APK APK

La versione a riga di comando dello strumento di analisi APK fornisce informazioni immediate sulla composizione dell'APK al termine del processo di compilazione e consente di confrontare le differenze tra i due APK. L'utilizzo dello Strumento di analisi APK riduce il tempo dedicato al debug dei problemi con i file e le risorse DEX all'interno della tua app e riduce le dimensioni dell'APK.

apkanalyzer è incluso nel pacchetto Strumenti a riga di comando dell'SDK Android nella pagina android_sdk/cmdline-tools/version/bin/apkanalyzer. In alternativa, puoi accedere allo strumento di analisi APK in Android Studio, come descritto nella sezione Analizzare la build con lo Strumento di analisi APK.

Sintassi

La sintassi per apkanalyzer è:

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

subject è l'elemento su cui vuoi eseguire la query e può essere l'intero APK o una sua parte. Un soggetto può essere:

  • apk: analizza gli attributi dei file APK, come ID applicazione, codice di versione e nome di versione.
  • files: analizza i file all'interno del file APK.
  • manifest: analizza i contenuti del file manifest all'interno del file APK.
  • dex: analizza i file DEX all'interno del file APK.
  • resources: visualizza risorse di testo, immagini e stringhe.

Il verb è ciò che vuoi sapere sull'argomento. I soggetti, i verbi e le relative opzioni sono descritti nella seguente sezione relativa ai comandi.

Ogni comando richiede la specifica di un file APK. Solo il comando apk compare richiede di specificare un secondo APK.

Puoi accorciare ogni opzione purché sia chiara. Ad esempio, l'opzione globale --human-readable può essere ridotta a -h.

L'esempio seguente analizza apk (oggetto) per ottenere il relativo file-size (verbo), quindi stampa le dimensioni del file in formato leggibile (opzione -h):

apkanalyzer -h apk file-size myapk.apk

Comandi

Le seguenti descrizioni dei comandi sono organizzate per soggetto ed elencano le combinazioni di verbi e opzioni disponibili per ciascun soggetto:

Visualizzare gli attributi dei file APK Descrizione
apk summary apk-file Stampa l'ID applicazione, il codice di versione e il nome della versione.

Output di esempio:

com.myapp 5 1.1-beta

apk file-size apk-file Consente di stampare le dimensioni totali del file dell'APK.
apk download-size apk-file Consente di stampare una stima delle dimensioni di download dell'APK.
apk features [--not-required] apk-file Consente di stampare le funzionalità usate dall'APK che attivano i filtri del Play Store . Aggiungi l'opzione --not-required per includere le funzionalità contrassegnate come non obbligatorie nell'output.

Output di esempio:

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

apk compare [options] apk-file apk-file2 Confronta le dimensioni di apk-file e apk-file2. Puoi includere le seguenti opzioni:
  • --different-only: stampa directory e file con differenze.
  • --files-only: non stampa le voci della directory.
  • --patch-size: mostra una stima della patch file per file anziché una differenza non elaborata.

Output di esempio (vecchia dimensione / nuova dimensione / differenza di dimensioni / percorso):

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

Visualizzare il file system APK Descrizione
files list apk-file Elenca tutti i file nell'APK.

Output di esempio:

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

files cat --file path apk-file Stampa i contenuti del file. Devi specificare un percorso all'interno dell'APK utilizzando l'opzione --file path, ad esempio --file /AndroidManifest.xml
Visualizza le informazioni nel file manifest Descrizione
manifest print apk-file Consente di stampare il file manifest dell'APK in formato XML.
manifest application-id apk-file Stampa il valore dell'ID applicazione.
manifest version-name apk-file Stampa il valore del nome della versione.
manifest version-code apk-file Stampa il valore del codice versione.
manifest min-sdk apk-file Consente di stampare la versione minima dell'SDK.
manifest target-sdk apk-file Stampa la versione target dell'SDK.
manifest permissions apk-file Stampa l'elenco delle autorizzazioni.
manifest debuggable apk-file Indica se è possibile eseguire il debug dell'app.
Accedere alle informazioni del file DEX Descrizione
dex list apk-file Consente di stampare un elenco dei file DEX contenuti nell'APK.
dex references [--files path] [--files path2] apk-file Stampa il numero di riferimenti al metodo nei file DEX specificati. L'impostazione predefinita è Tutti i file DEX. Aggiungi l'opzione --files per indicare i file specifici che vuoi includere.

Output di esempio:

classes.dex 59598
classes2.dex 8042

dex packages [option1 option2 ...] apk-file Stampa l'albero delle classi da DEX. Nell'output, P, C, M e F indicano rispettivamente pacchetti, classi, metodi e campi. E x, k, r e d indicano rispettivamente i nodi rimossi, mantenuti, a cui viene fatto riferimento e i nodi definiti.

Aggiungi le seguenti opzioni per perfezionare l'output:

  • --defined-only: include nell'output solo le classi definite nell'APK.
  • --files: specifica i nomi dei file DEX da includere. Predefinito: tutti i file DEX.
  • --proguard-folder file: specifica la cartella di output di Proguard in cui cercare le mappature.
  • --proguard-mappings file: specifica il file di mapping Proguard.
  • --proguard-seeds file: specifica il file originale di Proguard.
  • --proguard-usages file: specifica il file degli utilizzi di Proguard.
  • --show-removed: mostra i corsi e i membri che sono stati rimossi da Proguard.

Output di esempio (tipo/stato/metodi definiti/metodi di riferimento/dimensione byte/nome):

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] Stampa il bytecode di una classe o di un metodo in formato smali. Il nome della classe è obbligatorio e stampa il nome completo della classe da decompilare. Aggiungi l'opzione --method per specificare il metodo da decompilare.

Il formato del metodo di decompilazione è name(params)returnType, ad esempio someMethod(Ljava/lang/String;I)V.

Visualizza le risorse archiviate in res/ e Resources.arsc Descrizione
resources packages Stampa un elenco dei pacchetti definiti nella tabella delle risorse.
resources configs --type type [--package package] apk-file Consente di stampare un elenco di configurazioni per l'elemento type specificato. type è un tipo di risorsa come string. Includi l'opzione --package se vuoi specificare il nome del pacchetto della tabella delle risorse, altrimenti verrà utilizzato il primo pacchetto definito.
resources value --config config --name name --type type [--package package] apk-file Stampa il valore della risorsa specificata da config, name e type. L'opzione type è il tipo di risorsa, ad esempio string.

Includi l'opzione --package se vuoi specificare il nome del pacchetto della tabella delle risorse, altrimenti verrà utilizzato il primo pacchetto definito.

resources names --config config --type type [--package package] apk-file Stampa un elenco di nomi di risorse per una configurazione e un tipo. L'opzione type è il tipo di risorsa, ad esempio string. Includi l'opzione --package se vuoi specificare il nome del pacchetto della tabella delle risorse, altrimenti verrà utilizzato il primo pacchetto definito.
resources xml --file path apk-file Stampa il formato leggibile di un file XML binario. Includi l'opzione file per specificare il percorso del file.