Что такое apk и что в него входит

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

  • код,
  • ресурсы,
  • манифест,
  • метаинформацию,
  • подпись

Структура .apk файла

Вот что обычно входит в APK:

app.apk
├── AndroidManifest.xml
├── classes.dex
├── lib/
│ └── armeabi-v7a/libnative.so
├── res/
│ └── drawable/…
├── assets/
│ └── raw_data.json
├── resources.arsc
├── META-INF/
│ ├── CERT.RSA
│ ├── CERT.SF
│ └── MANIFEST.MF

Подробности по каждому элементу

Файл / КаталогНазначение
AndroidManifest.xmlГлавный манифест: компоненты, разрешения, intent-фильтры, темы и пр.
classes.dexСкомпилированный байткод (Java/Kotlin) в формате DEX (Dalvik EXecutable)
lib/Нативные .so библиотеки (JNI), разбитые по ABI (armeabi-v7a, x86_64)
res/Сжатые ресурсы: картинки, layout’ы, strings (без доступа через Assets)
assets/Несжатые произвольные файлы, доступны через AssetManager
resources.arscСкомпилированные ресурсы (индексы, строки, темы)
META-INF/Подпись, хэш-суммы, манифест безопасности
kotlin/, kotlinx/(опционально) модули Kotlin стандартной библиотеки

Подпись APK

APK должен быть подписан (debug или release-ключом).
Иначе Android не установит его.

  • CERT.RSA: цифровая подпись
  • MANIFEST.MF: контрольная сумма каждого файла
  • С Android 7+ — используется APK Signature Scheme v2/v3

Сколько может быть .dex файлов?

  • Один classes.dex => если код ≤ 64K методов
  • Если больше => MultiDex

Что попадает в res/ vs assets/?

ПапкаКак доступКогда использовать
res/через R.drawable.logo и т.д.фиксированные ресурсы (иконки, layout, strings)
assets/через AssetManager (open("file.json"))произвольные файлы (шрифты, JSON, шейдеры)

Опубликовано

в

от

Метки: