1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files
2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
dx
. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx
создает файлы формата .dex, которые содержат Dalvik-байткод..class, .jar, .aar -> dx -> classes.dex
3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
classes.dex, resource files -> aapt -> .apk file
4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
zipalign
выравнивает файлы в архиве определенным образом, что уменьшает использование RAM, при работе приложения.Подпись приложения выполняется утилитой apksigner.
.apk file -> zipalign -> apksigner -> signed .apk file
До Build Tools v24.0.3 подпись APK выполнялась утилитой
jarsigner
, которая была создана для подписи .jar-файлов, и zipalign
применялся к уже подписанному APK..apk file -> jarsigner -> zipalign -> signed .apk file