# Apk (Dateiformat)

Das Android-Paket mit der Dateiendung apk ist das Dateiformat, das vom Android-Betriebssystem und einer Reihe anderer Android-basierter Betriebssysteme zur Verteilung und Installation von mobilen Apps, mobilen Spielen und Middleware verwendet wird. Es kann entweder in Java oder Kotlin geschrieben werden.
APK-Dateien können aus Android App Bundles generiert und signiert werden.

## Überblick

APK ist analog zu anderen Softwarepaketen wie APPX in Microsoft Windows oder einem Debian-Paket in Debian-basierten Betriebssystemen. Um eine APK-Datei zu erstellen, wird zunächst ein Programm für Android mit einem Tool wie Android Studio oder Visual Studio kompiliert und dann alle seine Teile in eine Containerdatei gepackt. Eine APK-Datei enthält den gesamten Programmcode (z. B. .dex-Dateien), Ressourcen, Assets, Zertifikate und Manifestdateien. Wie bei vielen Dateiformaten können APK-Dateien einen beliebigen Namen haben, aber es kann erforderlich sein, dass der Dateiname mit der Dateierweiterung endet, um als solche erkannt zu werden.
Bei den meisten Android-Implementierungen können Benutzer APK-Dateien erst dann manuell installieren, nachdem sie die Einstellung „Unbekannte Quellen“ aktiviert haben, die die Installation aus anderen als vertrauenswürdigen Quellen wie Google Play zulässt. Dies kann aus vielen Gründen geschehen, beispielsweise während der Entwicklung von Apps, um Apps zu installieren, die nicht im Store gefunden werden, oder um eine ältere Version einer vorhandenen App zu installieren.

## Verwendung auf anderen Betriebssystemen

Auf der Windows-11-Ankündigungsveranstaltung im Juni 2021 stellte Microsoft das neue Windows-Subsystem für Android (WSA) vor, das die Unterstützung für das Android Open Source Project (AOSP) ermöglicht und es Benutzern ermöglicht, Android-Apps auf ihrem Windows-Desktop auszuführen. Microsoft hat bestätigt, dass Benutzer Android-Apps von der Seite auf Windows laden können und dass es möglich wäre, APK-Dateien zu installieren, die von Drittanbieterquellen heruntergeladen wurden.
Benutzer konnten WSA nicht verwenden, als das Betriebssystem gestartet wurde, aber es ist derzeit mit Windows Insidern in den Vereinigten Staaten getestet.
Google plant, irgendwann im Jahr 2022 eine eigene Methode zum Ausführen von Android-Apps unter Windows einzuführen.

## Packungsinhalt

Eine APK-Datei ist ein Archiv, das normalerweise die folgenden Dateien und Verzeichnisse enthält:
* META-INF Verzeichnis:
** MANIFEST.MF: die Manifest-Datei
** Das Zertifikat der Anwendung
** CERT.SF: Die Liste der Ressourcen und ein SHA-1-Digest der entsprechenden Zeilen in der Datei MANIFEST.MF; zum Beispiel:Signatur-Version: 1.0 Erstellt von: 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: das Verzeichnis, das den kompilierten Code enthält, der plattformabhängig ist; das Verzeichnis ist darin in weitere Verzeichnisse aufgeteilt:
** armeabi-v7a: kompilierter Code nur für die 32-Bit-Arm-Architektur ARMv7 und höher
** arm64-v8a: kompilierter Code nur für die 64-Bit-Arm-Architektur ARMv8 („arm64“) und höher
** x86: kompilierter Code nur für die 32-Bit-x86-Architektur IA-32 (auch „i386“)
** x86_64: kompilierter Code nur für die 64-Bit-x86-Architektur x64 (auch „x86-64“ od. „amd64“)
** mips und armeabi, veraltet seit NDK r17
* res: das Verzeichnis, das Ressourcen enthält, die nicht in resources.arsc kompiliert wurden (siehe unten).
* assets: Ein Verzeichnis mit Anwendungsressourcen, die per AssetManager abgerufen werden können.
* AndroidManifest.xml: Eine zusätzliche Android-Manifestdatei, die den Namen, die Version, die Zugriffsrechte und die referenzierten Bibliotheksdateien für die Anwendung beschreibt. Diese Datei kann in binärem Android-XML vorliegen, das mit Tools wie AXMLPrinter2, Apktool M oder Androguard in menschenlesbares Klartext-XML konvertiert werden kann.
* classes.dex: Die im dex-Dateiformat kompilierten Klassen, die von Android Runtime (oder von der in Android 4.4 KitKat verwendeten virtuellen Dalvik-Maschine) ausgeführt werden.
* resources.arsc: eine Datei, die vorkompilierte Ressourcen enthält, wie zum Beispiel binäres XML.