Пояснення щодо кожного формату файлів Android: APK, AAB, XAPK, APKS, APKM, OBB тощо

A filing tray with tabs labeled APK, AAB, XAPK, APKS, APKM and OBB

Екосистема Android використовує різні формати файлів для упаковки, розповсюдження та зберігання даних програм. Якщо ви коли-небудь завантажували програму зі стороннього джерела, ви, ймовірно, стикалися з розширеннями файлів, крім знайомого APK. Кожен формат, як-от XAPK, APKS, APKM, AAB і OBB, служить певній меті в життєвому циклі програми Android.

Цей посібник призначений як повний довідник для всіх основних форматів файлів Android. Розробники, досвідчені користувачі, які завантажують додатки збоку, і допитливі читачі, які просто хочуть знати, що насправді містять ці файли, усі знайдуть пояснення кожного формату зрозумілою мовою нижче.

APK: набір пакетів Android

APK є основним форматом файлів для програм Android. Це був стандартний формат інсталяції з моменту появи Android і залишається форматом, який операційна система Android розуміє для встановлення програм.

Що це містить

Файл APK – це, по суті, архів ZIP із певною внутрішньою структурою:

  • AndroidManifest.xml, бінарний XML-файл, у якому оголошено назву пакета програми, компоненти, дозволи та вимоги
  • classes.dex (і classes2.dex тощо), скомпільований байт-код Dalvik, що містить код програми Java/Kotlin
  • resources.arsc, скомпільована таблиця ресурсів, що зіставляє ідентифікатори ресурсів із їхніми значеннями
  • res/, каталог, що містить такі ресурси, як макети, малюнки та рядки, на які посилається ідентифікатор
  • assets/, необроблені файли активів, до яких програма отримує доступ під час виконання через AssetManager
  • lib/, рідні бібліотеки, організовані за архітектурою ЦП (наприклад, lib/arm64-v8a/)
  • META-INF/, файли підписів та інформація про сертифікати

Коли ви це стикаєтеся

Файли APK – це те, що ви завантажуєте, завантажуючи програми зі сторонніх джерел. Вони також встановлюються на ваш пристрій із Play Store, хоча сучасні інсталяції Play Store часто використовують розділені APK-файли, згенеровані з App Bundle.

Як з цим поводитися

Файли APK можна встановити безпосередньо на Android, відкривши їх за допомогою файлового менеджера або за допомогою adb install. Ви також можете перевірити їхній вміст, перейменувавши розширення на .zip і видобувши його, або використовуючи наш Перевірка APK для перевірки підписів і метаданих.

AAB: Android App Bundle

Android App Bundle – це формат публікації Google для Play Store. З серпня 2021 року всі нові програми в Play Store потрібно надсилати як AAB, а не як APK.

Що це містить

Файл AAB використовує формат на основі буфера протоколу та містить:

  • Базовий модуль: Основний код програми та ресурси, необхідні для кожного пристрою
  • Поділ конфігурації: Ресурси, упорядковані за щільністю екрана, архітектурою процесора та мовою
  • Модулі динамічних функцій: Додаткові функції, які можна завантажити на вимогу
  • Метадані групи: Інструкції для Google Play щодо створення файлів APK для певного пристрою

Коли ви це стикаєтеся

Як звичайний користувач, ви зазвичай не стикаєтеся безпосередньо з файлами AAB. Вони використовуються розробниками під час процесу збірки та завантаження. Однак якщо ви отримуєте файл AAB (можливо, з артефактів збірки проекту з відкритим вихідним кодом), вам потрібно перетворити його у формат APK перед установкою.

Як з цим поводитися

Використовуйте утиліту командного рядка bundletool від Google або нашу Конвертер AAB в APK, щоб створити файл APK, який можна встановити, із файлу AAB. У процесі перетворення створюється або універсальний файл APK (більший, працює всюди), або файли APK для певного пристрою (менші, орієнтовані на пристрій).

XAPK: Розширений файл APK

XAPK — це формат контейнера, популяризований APKPure, який об’єднує APK разом із пов’язаними з ним файлами даних OBB або розділяє конфігурації APK в єдиний пакет для завантаження.

Що це містить

Файл XAPK – це ZIP-архів, який містить:

  • Базовий файл APK (основна програма)
  • Файли OBB (дані розширення для ігор і великих програм)
  • За бажанням можна розділити файли APK для різних конфігурацій пристроїв
  • Файл manifest.json, що описує вміст пакета та інструкції зі встановлення
  • Файл значка для відображення

Коли ви це стикаєтеся

Ви стикаєтеся з файлами XAPK під час завантаження великих програм або ігор із сховищ програм сторонніх розробників. Ігри, які вимагають додаткових файлів даних (раніше поширюваних як файли OBB), зазвичай упаковуються як XAPK, щоб спростити процес завантаження в один файл.

Як з цим поводитися

Файли XAPK не можна безпосередньо встановити програмою встановлення пакетів за замовчуванням Android. Вам потрібен або спеціальний додаток для встановлення XAPK, або ви можете скористатися нашим Конвертер XAPK в APK, щоб видобути базовий APK. Для ігор, які вимагають даних OBB, вам також потрібно буде розпакувати та розмістити файли OBB у правильному каталозі за допомогою нашого Екстрактор OBB.

APKS: набір APK

Формат APKS є виходом інструменту Google Bundletool під час генерації APK для певного пристрою з файлу AAB. Він також використовується деякими інструментами резервного копіювання програм для зберігання розділених установок APK.

Що це містить

Файл APKS – це ZIP-архів, який містить:

  • toc.pb, таблиця змісту буфера протоколу, що описує розділену структуру
  • splits/, каталог, що містить базовий APK і всі розділені APK конфігурації
  • За бажанням, окремі файли APK для пристроїв, які не підтримують розділене встановлення

Коли ви це стикаєтеся

Ви стикаєтеся з файлами APKS під час локального використання Bundletool, під час резервного копіювання програм, установлених із Play Store, або під час завантаження з певних сторонніх сховищ, які зберігають розділену структуру APK.

Як з цим поводитися

Ви можете встановити файли APKS за допомогою команди install-apks у bundletool або перетворити їх на один файл APK за допомогою нашого Об’єднання APKS в APK. Зауважте, що об’єднання розділених APK в універсальний APK може збільшити розмір файлу, оскільки всі ресурси конфігурації об’єднані.

APKM: пакет APKMirror

APKM — це власний формат контейнера, створений APKMirror для розповсюдження програм, які складаються з кількох розділених APK. Він виконує подібну мету до XAPK і APKS, але використовує власну структуру APKMirror.

Що це містить

Файл APKM – це ZIP-архів, що містить:

  • Базовий файл APK
  • Розділення файлів APK для різних конфігурацій (щільність, ABI, мова)
  • Файл метаданих, що описує структуру пакета

Коли ви це стикаєтеся

Файли APKM зустрічаються виключно під час завантаження з APKMirror. Сайт використовує цей формат для програм, які розповсюджуються як набори додатків у Play Store і тому складаються з кількох розділених файлів .apk.

Як з цим поводитися

Файли APKM потребують програми APKMirror Installer для прямого встановлення, або ви можете розпакувати вміст (оскільки це ZIP-файл) і встановити розділені APK-файли вручну за допомогою команди ADB install-multiple. Базовий APK також можна розпакувати та встановити окремо, хоча деякі функції можуть бути обмежені без розділення конфігурації.

OBB: Непрозора двійкова крапка

OBB-файли — це файли розширення, які використовуються програмами Android (переважно іграми) для зберігання великих обсягів даних, які перевищують обмеження розміру APK у Play Store. Хоча Google значною мірою замінив цю систему на Play Asset Delivery, багато існуючих програм все ще використовують файли OBB.

Що це містить

Файли OBB можуть містити будь-які типи даних, які потрібні програмі:

  • Ігрові текстури та 3D моделі
  • Аудіофайли та саундтреки
  • Відео контент
  • Дані рівня та карти
  • Будь-які великі двійкові дані розробник вирішує зберігати ззовні

Формат даних у файлі OBB повністю залежить від розробника. Деякі використовують стиснення ZIP, інші використовують власні двійкові формати. «Непрозорий» у назві означає, що Android розглядає файл як чорну скриньку.

Коли ви це стикаєтеся

OBB-файли зустрічаються під час завантаження великих ігор або коли вони включені в пакети XAPK. Вони зберігаються в /Android/obb/[package.name]/ у спільній пам’яті пристрою.

Як з цим поводитися

Файли OBB потрібно розмістити в правильному каталозі, щоб програма могла їх знайти. Назва файлу зазвичай відповідає шаблону main.[version].[package.name].obb або patch.[version].[package.name].obb. Використовуйте наш Екстрактор OBB, щоб видобути OBB-файли з пакетів XAPK.

DEX: виконуваний файл Dalvik

Файли DEX містять скомпільований байт-код, який працює в середовищі виконання Android. Вони містяться у файлах APK, але можуть існувати незалежно під час розробки та налагодження.

Що це містить

Файл DEX містить:

  • Скомпільований байт-код Java/Kotlin у форматі інструкцій Dalvik
  • Рядкові константи та визначення типів
  • Посилання на методи та поля
  • Визначення класів та їх ієрархії

Технічні деталі

Один файл DEX має обмеження на 65 536 посилань на метод («ліміт 64 Кб»). Програми, які перевищують цей ліміт, використовують декілька файлів DEX (classes.dex, classes2.dex тощо), метод під назвою multidex. Сучасні інструменти збирання вирішують це автоматично.

Файли ODEX, VDEX і ART

Це оптимізовані версії файлів DEX, створених Android Runtime під час або після встановлення:

  • ODEX (оптимізований DEX): Містить скомпільований наперед власний машинний код для часто використовуваних методів. Створюється під час простою обслуговування на основі профілів використання.
  • VDEX (перевірений DEX): Містить перевірений байт-код DEX із попередньо обчисленими результатами перевірки. Це пришвидшує наступне завантаження та запуск програм, пропускаючи повторну перевірку.
  • ART (зображення середовища виконання Android): Містить попередньо ініціалізовані об’єкти класу та дані купи. Це дозволяє середовищу виконання пропускати завантаження класів та ініціалізацію для загальних класів фреймворку під час запуску.

Ці файли створюються системою, і користувачі зазвичай не взаємодіють із ними безпосередньо. Вони зберігаються в /data/dalvik-cache/ або поряд з APK у /data/app/.

SO: спільний об’єкт (власні бібліотеки)

Файли з розширенням .so є рідними спільними бібліотеками, скомпільованими для певних архітектур ЦП. Вони містять машинний код, написаний на C, C++ або Rust, який виконується безпосередньо на процесорі без додаткових витрат середовища виконання Dalvik/ART.

Варіанти архітектури

  • armeabi-v7a, 32-розрядний ARM (більшість старих пристроїв)
  • arm64-v8a, 64-bit ARM (більшість сучасних телефонів)
  • x86, 32-розрядний Intel/AMD (деякі планшети та емулятори)
  • x86_64, 64-розрядний Intel/AMD (Chromebook і емулятори)

Якщо APK містить рідні бібліотеки, він має містити правильну архітектуру для цільового пристрою. Якщо включено неправильну архітектуру, програма вийде з ладу з UnsatisfiedLinkError.

Файли XML в Android

Android широко використовує XML, але в двох різних формах:

Двійковий XML

У файлах APK XML-ресурси (макети, маніфести, рядкові файли) зберігаються у скомпільованому двійковому форматі під назвою AXML. Цей формат є більш компактним і швидшим для аналізу, ніж текстовий XML. Такі інструменти, як aapt2 або apktool, можуть декомпілювати двійковий XML назад у читабельний текст.

Текст XML

Під час розробки файли XML мають стандартний текстовий формат. Процес збирання компілює їх у бінарний XML для включення в APK. Файли конфігурації, такі як network_security_config.xml, і файли ресурсів у каталозі res/ починаються як текстовий XML.

Файли зіставлення ProGuard/R8

Хоча файли зіставлення (mapping.txt) не є специфічним для Android, вони важливі для розуміння обфускованих програм. Коли розробники використовують інструменти для скорочення коду, такі як R8, імена класів і методів замінюються короткими безглуздими ідентифікаторами. У файлі відображення записуються переклади імен з оригіналу на заплутаний, що є важливим для читання звітів про збої.

Формат резервного копіювання Android (AB)

Файли з розширенням .ab є резервними архівами Android, створеними adb backup. Вони містять архів tar (необов’язково стиснутий і зашифрований) каталогу даних програми. Цей формат припиняється на користь хмарних рішень резервного копіювання, але все ще використовується деякими інструментами резервного копіювання.

IMG та зображення розділів

Хоча образи системи Android не пов’язані з програмою, використовують кілька форматів, про які варто згадати:

  • system.img: Системний розділ лише для читання, що містить інфраструктуру Android і попередньо встановлені програми
  • boot.img: Містить ядро ​​Linux і початковий ramdisk
  • vendor.img: Спеціальні апаратні драйвери та мікропрограми
  • super.img: Динамічний контейнер розділу, який використовується в сучасних пристроях (Android 10+)

Таблиця порівняння форматів

Ось короткий довідник із порівнянням основних форматів розповсюдження програм:

  • APK: Один файл, можливість безпосереднього встановлення, універсальний (усі конфігурації включені), більший розмір
  • Формат публікації AAB:, який не можна встановити безпосередньо, потребує обробки в Play Store
  • Контейнер XAPK: (APK + OBB/розбивається), потрібен інсталятор або розпакування, використовується APKPure
  • Контейнер APKS: (розділені файли APK), формат bundletool, потрібен інсталятор або об’єднання
  • Контейнер APKM: (розділені APK), формат APKMirror, потрібен інсталятор

Вибір правильного інструменту

Залежно від того, з яким форматом ви працюєте, підійдуть різні інструменти:

  • Маєте XAPK? Використовуйте наш Конвертер XAPK в APK, щоб розпакувати встановлений APK
  • Маєте AAB? Використовуйте наш Конвертер AAB в APK для створення універсального APK
  • Маєте розділені APK (APKS)? Використовуйте наш Об’єднання APKS в APK, щоб поєднати їх
  • Потрібно перевірити APK? Використовуйте наш Перевірка APK для перевірки підписів
  • Потрібні файли OBB із XAPK? Використовуйте наш Екстрактор OBB, щоб розпакувати файли розширення

Який формат пакета Android вам слід використовувати?

Різноманітність форматів файлів екосистеми Android відображає еволюцію платформи від простих однофайлових APK до складних модульних систем доставки. Кожен формат існує для вирішення конкретної проблеми: AAB зменшує розмір завантаження, XAPK спрощує розповсюдження багатофайлових програм, OBB обробляє великі дані гри, а розділені APK дозволяють оптимізувати пристрій.

Коли ви зрозумієте ці формати, ви зможете працювати з будь-яким пакетом Android, з яким ви зіткнетеся, незалежно від того, чи ви завантажуєте додатки, створюєте резервні копії свого пристрою чи розробляєте власні програми. Ключовий висновок полягає в тому, що більшість із цих форматів зрештою є контейнерами, які містять файли APK у різних конфігураціях, і за допомогою правильних інструментів ви завжди можете витягнути те, що вам потрібно.

Розроблено та задокументовано Mst Shaefale Провідний розробник і архітектор пакетів Android • Перевірено на Android 12–15

Mst Shaefale підтримує злиття XAPK/APKS на стороні клієнта, аналізатор бінарних маніфестів та інструменти підписання APK v1+v2 у xapktoapk.com. Помітили застарілу команду чи зміну ОС? Надіслати редакційну примітку.