Сборка Android-приложения состоит из следующих шагов:

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