apkanalyzer

Die Befehlszeilenversion von APK Analyzer bietet sofortigen Einblick in die Zusammensetzung des APK nach Abschluss des Build-Prozesses und ermöglicht Ihnen, die Unterschiede zwischen zwei APKs. Die Verwendung von APK Analyzer reduziert die Zeit, die Sie für das Beheben von Problemen mit DEX-Dateien und -Ressourcen in Ihrer App aufwenden, verringert die Größe Ihres APK.

apkanalyzer ist enthalten in Android SDK-Befehlszeilentools unter android_sdk/cmdline-tools/version/bin/apkanalyzer. Alternativ können Sie auf das APK Analyzer-Tool in Android Studio, wie in Analysiere deinen Build mit APK Analyzer.

Syntax

Die Syntax für apkanalyzer lautet:

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

Das subject ist das, was Sie abfragen möchten. Es kann das gesamte APK sein. oder ein Teil des APK ist. Ein Subjekt kann Folgendes sein:

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

verb ist das, was Sie über das Thema wissen möchten. Die Fächer, Verben und ihre Optionen werden im folgenden Abschnitt zu Befehlen beschrieben.

Jeder Befehl erfordert die Angabe einer APK-Datei. Nur die Für den Befehl apk compare musst du ein zweites APK angeben.

Sie können jede Option kürzen, wenn die Option eindeutig ist. Beispiel: Die globale Option --human-readable kann zu folgender Abkürzung gekürzt werden: -h.

Im folgenden Beispiel wird apk (Betreff) analysiert. um das Verb file-size zu erhalten, und gibt dann die Dateigröße menschenlesbares Format (Option -h):

apkanalyzer -h apk file-size myapk.apk

Befehle

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

APK-Dateiattribute 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 Funktionen, die vom APK verwendet werden, die auslösen Play Store-Filter Option --not-required hinzufügen um Funktionen einzubeziehen, die als nicht erforderlich gekennzeichnet sind.

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. Sie können die folgenden Optionen angeben: <ph type="x-smartling-placeholder">
    </ph>
  • --different-only: gibt Verzeichnisse und Dateien aus mit Unterschiede.
  • --files-only: Verzeichniseinträge werden nicht gedruckt.
  • --patch-size: Zeigt eine Schätzung des Datei-für-Datei-Patches an. statt wie ein unveränderlicher Unterschied.

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 der APK-Datei mithilfe von die Option --file path, 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 Wert der Anwendungs-ID 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 Druckt 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 Druckt eine Liste der DEX-Dateien im APK.
dex references [--files path] [--files path2] apk-file Gibt die Anzahl der Methodenverweise in den angegebenen DEX-Dateien aus. Standardmäßig werden alle DEX-Dateien verwendet. Fügen Sie die Option --files zu bestimmte Dateien an, die Sie einschließen möchten.

Beispielausgabe:

classes.dex 59598
classes2.dex 8042
dex packages [option1 option2 ...] apk-file Gibt die Klassenstruktur von DEX aus. In der Ausgabe P C, M und F stehen für Pakete. Klassen, Methoden bzw. Feldern. Und x, k, r und d geben an, dass sie entfernt, beibehalten referenzierten bzw. definierten Knoten.

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

  • --defined-only: Enthält nur Klassen, die im APK in der Ausgabe definiert sind.
  • --files: Gibt die Namen der DEX-Dateien an, die einbezogen werden sollen. Standardeinstellung: alle DEX-Dateien.
  • --proguard-folder file: Gibt den Proguard-Ausgabeordner an, in dem nach Zuordnungen gesucht werden soll.
  • --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/Verweismethoden) /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. Kursname ist erforderlich und gibt den voll qualifizierten Klassennamen zur Dekompilierung aus. Fügen Sie den --method, um die zu dekompilierende Methode anzugeben.

Das Format für die Dekompiliermethode name(params)returnType ist. Beispiel: 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 der Konfigurationen für die angegebene type aus. type ist ein Ressourcentyp wie string. --package einschließen 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 angegebenen Ressource aus, name und type. Die Die Option type ist der Ressourcentyp, z. B. string.

--package einschließen 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 der Ressourcennamen für eine Konfiguration und einen Typ aus. Die Die Option type ist der Ressourcentyp, z. B. string. --package einschließen Option, wenn Sie den Paketnamen der Ressourcentabelle angeben möchten. Andernfalls wird das erste definierte Paket verwendet.
resources xml --file path apk-file Gibt die menschenlesbare Form einer binären XML-Datei aus. Fügen Sie die file, um den Pfad zur Datei anzugeben.