apkanalyzer

Die Befehlszeilenversion von APK Analyzer bietet nach Abschluss des Build-Prozesses sofortigen Einblick in die Zusammensetzung Ihres APKs und ermöglicht es Ihnen, Unterschiede zwischen zwei APKs zu vergleichen. Mit APK Analyzer wird der Zeitaufwand für das Beheben von Problemen mit DEX-Dateien und -Ressourcen in Ihrer App verringert und die Größe Ihres APK verringert.

apkanalyzer ist im Paket Android SDK-Befehlszeilentools unter android_sdk/cmdline-tools/version/bin/apkanalyzer enthalten. Alternativ können Sie das APK Analyzer-Tool in Android Studio aufrufen, wie unter Build mit APK Analyzer analysieren beschrieben.

Syntax

Die Syntax für apkanalyzer lautet:

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]

Die subject ist das, was Sie abfragen möchten, und kann das gesamte APK oder ein Teil des APKs sein. Folgende Themen sind möglich:

  • apk: Analysieren Sie APK-Dateiattribute wie App-ID, Versionscode und Versionsname.
  • files: Analysiere die Dateien in der APK-Datei.
  • manifest: Analysiere den Inhalt des Manifests in der APK-Datei.
  • dex: Analysieren Sie die DEX-Dateien in der APK-Datei.
  • resources: Text-, Bild- und Stringressourcen ansehen.

Das verb ist das, was Sie über das Thema wissen möchten. Die Themen, Verben und ihre Optionen werden im folgenden Abschnitt über Befehle beschrieben.

Für jeden Befehl müssen Sie eine APK-Datei angeben. Nur für den Befehl apk compare müssen Sie ein zweites APK angeben.

Sie können jede Option kürzen, solange die Option eindeutig ist. Die globale Option --human-readable kann beispielsweise zu -h gekürzt werden.

Im folgenden Beispiel wird das apk (Subjekt) analysiert, um das file-size (Verb) zu erhalten, und die Dateigröße dann in einem für Menschen lesbaren Format (-h-Option) gedruckt:

apkanalyzer -h apk file-size myapk.apk

Befehle

Die folgenden Befehlsbeschreibungen sind nach Thema geordnet und enthalten die verfügbaren Kombinationen von Verb und Optionen für jedes Subjekt:

Attribute der APK-Datei ansehen Beschreibung
apk summary apk-file Gibt die Anwendungs-ID, den Versionscode und den Versionsnamen aus.

Beispielausgabe:

com.myapp 5 1.1-beta

apk file-size apk-file Gibt die Gesamtgröße der APK-Datei aus.
apk download-size apk-file Gibt eine Schätzung der Downloadgröße des APK aus.
apk features [--not-required] apk-file Druckt vom APK verwendete Funktionen, die die Play Store-Filterung auslösen. Fügen Sie die Option --not-required hinzu, um Features, die als nicht erforderlich gekennzeichnet sind, in die Ausgabe aufzunehmen.

Beispielausgabe:

android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission

apk compare [options] apk-file apk-file2 Vergleicht die Größen von apk-file und apk-file2. Folgende Optionen sind verfügbar:
  • --different-only: Gibt Verzeichnisse und Dateien mit Unterschieden aus.
  • --files-only: Es werden keine Verzeichniseinträge gedruckt.
  • --patch-size: Zeigt eine Schätzung des Patches für jede Datei anstelle einer groben Differenz an.

Beispielausgabe (alte Größe / neue Größe / Größenunterschied / Pfad):

39086736 48855615 9768879 /
10678448 11039232 360784 /classes.dex
18968956 18968956 0 /lib/
110576 110100 -476 /AndroidManifest.xml
...

APK-Dateisystem ansehen Beschreibung
files list apk-file Listet alle Dateien im APK auf.

Beispielausgabe:

/
/classes2.dex
/classes.dex
/assets/
/assets/asset.data
/AndroidManifest.xml
/resources.arsc
/res/
...

files cat --file path apk-file Gibt den Dateiinhalt aus. Du musst einen Pfad innerhalb des APK mit der Option --file path angeben, z. B. --file /AndroidManifest.xml
Informationen im Manifest ansehen Beschreibung
manifest print apk-file Gibt das APK-Manifest im XML-Format aus.
manifest application-id apk-file Gibt den Anwendungs-ID-Wert aus.
manifest version-name apk-file Gibt den Wert des Versionsnamens aus.
manifest version-code apk-file Gibt den Versionscodewert aus.
manifest min-sdk apk-file Gibt die SDK-Mindestversion aus.
manifest target-sdk apk-file Gibt die SDK-Zielversion aus.
manifest permissions apk-file Gibt die Liste der Berechtigungen aus.
manifest debuggable apk-file Gibt an, ob die App debug-fähig ist.
Auf DEX-Dateiinformationen zugreifen Beschreibung
dex list apk-file Gibt eine Liste der DEX-Dateien im APK aus.
dex references [--files path] [--files path2] apk-file Gibt die Anzahl der Methodenverweise in den angegebenen DEX-Dateien aus. Der Standardwert sind alle DEX-Dateien. Fügen Sie die Option --files hinzu, um bestimmte Dateien anzugeben, die Sie aufnehmen möchten.

Beispielausgabe:

classes.dex 59598
classes2.dex 8042

dex packages [option1 option2 ...] apk-file Gibt die Klassenstruktur aus DEX aus. In der Ausgabe geben P, C, M und F Pakete, Klassen, Methoden bzw. Felder an. x, k, r und d geben jeweils entfernte, beibehaltene, referenzierte bzw. definierte Knoten an.

Fügen Sie die folgenden Optionen hinzu, um die Ausgabe zu optimieren:

  • --defined-only: Enthält nur Klassen, die im APK in der Ausgabe definiert sind.
  • --files: Gibt die einzubeziehenden DEX-Dateinamen an. Standard: alle DEX-Dateien.
  • --proguard-folder file: Gibt den Proguard-Ausgabeordner für die Suche nach Zuordnungen an.
  • --proguard-mappings file: Gibt die Proguard-Zuordnungsdatei an.
  • --proguard-seeds file: Gibt die Proguard-Seeds-Datei an.
  • --proguard-usages file: Gibt die Proguard-Nutzungsdatei an.
  • --show-removed: Zeigt Kurse und Mitglieder an, die von Proguard entfernt wurden.

Beispielausgabe (Typ/Status/definierte Methoden/Verweis-Methoden/Bytegröße/Name):

P d 1 1 85 g
P d 1 1 85 g.a
C d 1 1 85 g.a.a
M d 1 1 45 g.a.a java.lang.Object get()
C r 0 1 40 byte[]
M r 0 1 40 byte[] java.lang.Object clone()

dex code --class class [--method method] Gibt den Bytecode einer Klasse oder Methode im Smali-Format aus. Der Klassenname ist erforderlich und gibt den voll qualifizierten Klassennamen für die Dekompilierung aus. Fügen Sie die Option --method hinzu, um die Dekompilierungsmethode anzugeben.

Das Format für die Dekompilierungsmethode ist name(params)returnType, z. B. someMethod(Ljava/lang/String;I)V.

In res/ und Resources.arsc gespeicherte Ressourcen ansehen Beschreibung
resources packages Gibt eine Liste der Pakete aus, die in der Ressourcentabelle definiert sind.
resources configs --type type [--package package] apk-file Gibt eine Liste von Konfigurationen für die angegebene type aus. type ist ein Ressourcentyp wie string. Verwenden Sie die Option --package, wenn Sie den Paketnamen der Ressourcentabelle angeben möchten. Andernfalls wird das erste definierte Paket verwendet.
resources value --config config --name name --type type [--package package] apk-file Gibt den Wert der durch config, name und type angegebenen Ressource aus. Die Option type ist der Typ der Ressource, z. B. string.

Verwenden Sie die Option --package, wenn Sie den Paketnamen der Ressourcentabelle angeben möchten. Andernfalls wird das erste definierte Paket verwendet.

resources names --config config --type type [--package package] apk-file Gibt eine Liste von Ressourcennamen für eine Konfiguration und einen Typ aus. Die Option type ist der Typ der Ressource, z. B. string. Verwenden Sie die Option --package, wenn Sie den Paketnamen der Ressourcentabelle angeben möchten. Andernfalls wird das erste definierte Paket verwendet.
resources xml --file path apk-file Gibt die visuell lesbare Form einer binären XML-Datei aus. Verwenden Sie die Option file, um den Pfad zur Datei anzugeben.