Android application package

20.11.2021

Android Package (APK) — формат файла приложения Android, используемый операционной системой Android и множеством других операционных систем на базе Android для распространения и установки мобильных приложений, мобильных игр и промежуточного программного обеспечения .

Файлы APK могут быть сгенерированы и подписаны из Android App Bundle .

Обзор

APK аналогичен другим пакетам приложений, таким как APPX в Microsoft Windows или Deb в операционных системах, основанных на Debian. Чтобы создать APK файл, программа для Android сперва компилируется с помощью инструментов, таких как Android Studio или Visual Studio, а затем все её части упаковываются в один контейнерный файл. APK содержит весь скомпонованный программный код (например, файлы .dex), а так же ресурсы, активы, сертификаты и файл манифеста. Как и в случае со многими файловыми форматами, файлы APK могут иметь любое выбранное имя, но, для распознавания файла как приложения для андроид, может понадобиться указание расширения файла.

Большинство реализаций безопасности Android позволяют пользователям вручную устанавливать файлы APK только после того, как они включили параметр «Неизвестные источники», который разрешает установку из источников, отличных от надёжных, наподобие Google Play. Это сделано для предотвращения неопытных пользователей от различных классов шпионских и троянских программ, которые маскируются под легитимные приложения. Включение функции установки из неизвестных источников можно сделать по многим причинам, например, во время разработки приложений, чтобы установить приложения, которых нет в магазине, или установить более старую версию существующего приложения.

Использование в других операционных системах

На мероприятии во время анонса Windows 11 в июне 2021 года, Microsoft продемонстрировала новую подсистему Windows для Android (Windows Subsystem for Android, WSA), которая реализует поддержку Android Open Source Project (AOSP) и позволит пользователям запускать Android приложения в Windows. Microsoft подтвердила, что пользователи смогут загружать sideload-приложения Android (не имеющие официального выпуска), а также устанавливать их.

Содержание упакованного приложения

APK файл — архив, который обычно содержит следующие файлы и директории:

  • Директория META-INF:
    • MANIFEST.MF: файл манифеста
    • Сертификат приложения.
    • CERT.SF: Список ресурсов и подпись SHA-1 соответствующих строк в MANIFEST.MF; Например:Signature-Version: 1.0 Created-By: 1.0 (Android) SHA1-Digest-Manifest: wxqnEAI0UA5nO5QJ8CGMwjkGGWE= ... Name: res/layout/exchange_component_back_bottom.xml SHA1-Digest: eACjMjESj7Zkf0cBFTZ0nqWrt7w= Name: res/drawable-hdpi/icon.png SHA1-Digest: DGEqylP8W0n0iV/ZzBx3MW0WGCA=
  • lib: директория, содержащая скомпилированный код, зависимый от платформы; lib разделён на несколько субдиректорий:
    • armeabi-v7a: скомпилированный код только для всех процессоров на базе ARMv7 и выше
    • arm64-v8a: скомпилированный код только для всех процессоров на базе ARMv8 arm64 и выше
    • x86: скомпилированный код только для процессоров x86
    • x86_64: скомпилированный код только для процессоров x86-64
    • mips и armeabi устарели с версии NDK r17
  • res: директория, содержащая ресурсы, не скомпилированные в resources.arsc (см. ниже).
  • assets: директория, содержащая активы приложений, которые могут быть извлечены с помощью AssetManager .
  • AndroidManifest.xml: дополнительный файл манифеста Android, описывающий имя, версию, права доступа и библиотеки приложения. Этот файл может быть в двоичном формате XML Android, который может быть преобразован в удобночитаемый текст XML с помощью таких инструментов, как AXMLPrinter2, apktool или Androguard.
  • classes.dex: классы, скомпилированные в формате файла dalvik executable, понятном виртуальной машине Dalvik и среде выполнения Android .
  • resources.arsc: файл, содержащий предварительно скомпилированные ресурсы, например двоичный XML.