Android application package

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
APK
Расширение ..apk, .xapk, .apks, .apkm, .akp
MIME-тип application/vnd.android.package-archive
Разработчик Google
Тип формата Упакованное приложение
Содержит Android: Мобильные приложения
BlackBerry 10
Fire OS
Ubuntu Touch через терминал Linux с контейнером WayDroid
Windows 11: Приложения рабочего стола для WSA
Fuchsia: с расширением Starnix
Несколько других дистрибутивов Linux с подсистемами Android.
Расширен из JAR
Развит в .aab

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

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

Обзор[править | править код]

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

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

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

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

Содержание упакованного приложения[править | править код]

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

  • Директория 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 и выше[9]
    • x86: скомпилированный код только для процессоров x86
    • x86_64: скомпилированный код только для процессоров x86-64
    • mips и armeabi устарели с версии NDK r17[10][11]
  • res: директория, содержащая ресурсы, не скомпилированные в resources.arsc (см. ниже).
  • assets: директория, содержащая активы приложений, которые могут быть извлечены с помощью AssetManager .
  • AndroidManifest.xml: дополнительный файл манифеста Android, описывающий имя, версию, права доступа и библиотеки приложения. Этот файл может быть в двоичном формате XML Android, который может быть преобразован в удобночитаемый текст XML с помощью таких инструментов, как AXMLPrinter2, apktool или Androguard.
  • classes.dex: классы, скомпилированные в формате файла dalvik executable, понятном виртуальной машине Dalvik и среде выполнения Android .
  • resources.arsc: файл, содержащий предварительно скомпилированные ресурсы, например двоичный XML.

Примечания[править | править код]

  1. Application Fundamentals (англ.). Android Developers. Дата обращения: 3 декабря 2018. Архивировано 21 ноября 2020 года.
  2. Peters. Google is moving away from APKs on the Play Store (англ.). The Verge (30 июня 2021). Дата обращения: 15 августа 2021. Архивировано 4 августа 2021 года.
  3. Application Studio (англ.). Android Developers. Дата обращения: 11 сентября 2021. Архивировано 12 сентября 2021 года.
  4. Inside the Android Application Framework (video). Google Sites. Дата обращения: 11 сентября 2021. Архивировано 24 декабря 2011 года.
  5. Hatem Ben Yacoub. Tips: How to install apk files on Android Emulator. Open Ha Magazine (20 апреля 2018). Дата обращения: 17 июля 2021. Архивировано из оригинала 26 мая 2012 года.
  6. The Structure of Android Package (APK) Files. OPhone SDN. OPhone Software Developer Network (17 ноября 2010). Архивировано из оригинала 8 февраля 2011 года.
  7. Unknown Sources: Everything you need to know! Android Central (27 июля 2018). Дата обращения: 11 сентября 2021. Архивировано 1 сентября 2021 года.
  8. Parmar. Microsoft confirms Android apps will run on all Windows 11 PCs. Windows Latest (27 июня 2021). Дата обращения: 28 июня 2021. Архивировано 27 июня 2021 года.
  9. ABI Management | Android Developers. developer.android.com. Дата обращения: 16 июня 2018. Архивировано 31 мая 2019 года.
  10. Android ABIs | Android NDK (англ.). Android Developers. — «Note: Historically the NDK supported ARMv5 (armeabi), and 32-bit and 64-bit MIPS, but support for these ABIs was removed in NDK r17.» Дата обращения: 14 августа 2020. Архивировано 8 апреля 2019 года.
  11. Dan. Changelog r17 (англ.). GitHub (5 сентября 2018). — «Support for ARMv5 (armeabi), MIPS, and MIPS64 has been removed. Attempting to build any of these ABIs will result in an error.» Дата обращения: 14 августа 2020. Архивировано 28 августа 2020 года.