Збірка apk з android-додатки

Нещодавно я робив збірку apk в одному додатку, так що хочу розповісти, які є для цього рішення.


Процес складання Android-додатки
Для початку про сам процес збирання apk.

Коли ви запускаєте збірку, насамперед читається AndroidManifest.xml, в ньому є важливі параметри, такі як package (наприклад, com.example.app) і targetSdkVersion.

Потім викликається програма aapt (Android Asset Packaging Tool), якій передається AndroidManifest.xml, папка з ресурсами res /. assets /. шлях до android.jar потрібної target-версії. aapt перевіряє ресурси і компілює їх, створюючи при цьому клас R.java в якому містяться ідентифікатори ресурсів і файл resources.arsc в якому міститься інформація про xml-ресурсах і їх атрибутах.

Далі підхоплюються всі бібліотеки, які використовуються в проекті і запускається Java-компілятор javac. Отримані class-файли передаються в програму dx. яка переводить їх в Dalvik dex-формат. Причому для оптимізації, готові бібліотеки сується окремо, а класи проекту окремо (оптимізація в тому, що дексірованние бібліотеки можна закеширувати). Якщо зібралося кілька dex-файлів, то вони всі об'єднуються за допомогою Dex Merger Tool. В кінцевому підсумку ми отримуємо єдину файл classes.dex (або декілька, якщо використовується multidex).

Тепер у нас є всі компоненти і можна збирати apk. По суті це просто упаковка всіх файлів в zip-архів, але використовується спеціальна програма apkbuilder. Після її виконання отримуємо непідписаний apk-файл, тобто без папки META-INF всередині.

Останній етап - підпис apk. Береться заздалегідь згенерований ключ і передається в jarsigner разом з підписаним apk-файлом. На виході маємо готове додаток, яке можна встановлювати.

Збірка apk з android-додатки

Збірка з Android-додатки
На щастя, Android досить потужна платформа, так що всі перераховані вище програми також перенести для неї.

Компілятор Java присутня в ECJ.

Останню версію dx можна зібрати з початкових кодів в офіційному репозиторії.

Apkbuilder йде як частина sdklib. але замість нього можна скористатися будь-бібліотекою для створення zip-архіву.

Нарешті, бібліотека для підпису apk - zip-signer.

Слід зауважити, що для повноцінного складання, нам знадобляться не тільки ці бібліотеки, але ще і android.jar останньої версії. У підсумку ми маємо 20 Мб залежностей, що в іншому, не так вже й багато. А той же android.jar і aapt можна скачати при першому запуску, що значно заощадить місце і трафік користувачам.

1. Запуск aapt в залежності від архітектури
Найбільше проблем з aapt, так як це не бібліотека, а виконується програма. Потрібно запускати сумісну версію, попередньо виставивши права на запуск.

private String getAaptBinaryName # 40; # 41; # 123;

final String architecture = Build. CPU_ABI. substring # 40; 0. 3 # 41 ;. toLowerCase # 40; Locale. US # 41; ;

final boolean usePie = Build. VERSION. SDK_INT> = Build. VERSION_CODES. JELLY_BEAN;

final String pieSuffix = usePie. "-pie". "";

switch # 40; architecture # 41; # 123;

case "mip". return "aapt-mips";

case "x86". return "aapt-x86" + pieSuffix;

Схожі статті