Как хранится код приложения в apk файле

«Как хранится код приложения в apk файле» — вопрос из категории Gradle и сборка, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

APK (Android Package Kit) — это ZIP-архив, содержащий скомпилированный код и ресурсы приложения. Основные компоненты:

  1. DEX-файлы — скомпилированный байт-код в формате Dalvik (classes.dex, classes2.dex и т.д.)
  2. Манифест (AndroidManifest.xml) — в бинарном XML-формате
  3. Ресурсы (res/) — скомпилированные в resources.arsc
  4. Нативные библиотеки (lib/) — .so файлы для разных архитектур
  5. Ассеты (assets/) — неизменяемые файлы

Пример структуры:

APK
├── AndroidManifest.xml
├── classes.dex
├── resources.arsc
├── res/
├── lib/
├── assets/
└── META-INF/

Код Java/Kotlin компилируется в .class файлы, которые затем преобразуются в .dex-файлы инструментом dx/d8. Для уменьшения размера APK используется ProGuard/R8 для обфускации и удаления неиспользуемого кода.