Analizza la tua build con lo Strumento di analisi APK

Android Studio include uno strumento di analisi APK che fornisce informazioni immediate sulla composizione dell'APK o dell'Android App Bundle al termine del processo di creazione. L'utilizzo dello strumento di analisi APK può ridurre il tempo dedicato al debug dei problemi relativi ai file e alle risorse DEX all'interno dell'app, nonché alle dimensioni degli APK. Lo strumento di analisi APK è disponibile anche dalla riga di comando con apkanalyzer.


Con lo strumento di analisi APK puoi:

  • Visualizza le dimensioni assolute e relative dei file nell'app, ad esempio i file di risorse DEX e Android.
  • Comprendi la composizione dei file DEX.
  • Visualizza rapidamente le versioni finali dei file nell'app, ad esempio il file AndroidManifest.xml.
  • Confrontare due APK o app bundle.

Esistono tre modi per accedere allo strumento di analisi APK quando un progetto è aperto:

  • Trascina un APK o un app bundle nella finestra Editor di Android Studio.
  • Passa alla vista Project nella finestra Project, quindi fai doppio clic sull'APK nella directory build/output/apks/ predefinita.
  • Seleziona Crea > Analizza APK nella barra dei menu, quindi seleziona il tuo APK o app bundle.

Visualizzare le informazioni su file e dimensioni

Gli APK sono file conformi al formato file ZIP. Lo strumento di analisi APK visualizza ogni file o cartella come un'entità che puoi espandere per navigare all'interno delle cartelle. La gerarchia delle entità rispecchia la struttura dei file e delle cartelle nel file APK.

Lo strumento di analisi APK mostra le dimensioni dei file compressi (o "dimensioni del file non elaborato") e i valori delle dimensioni del file di download per ogni entità, come mostrato nella Figura 1. La dimensione file non elaborata rappresenta il contributo dell'entità alle dimensioni totali dell'APK. Dimensioni download indica le dimensioni compresse stimate dell'entità così come verranno pubblicate da Google Play. La metrica % delle dimensioni di download totali indica la percentuale delle dimensioni di download totali dell'APK rappresentata dall'entità.

Figura 1. Dimensioni dei file nello strumento Analizzatore APK.

Visualizza il file AndroidManifest.xml

Se il progetto include più file AndroidManifest.xml, ad esempio per le versioni di prodotto, o include librerie che forniscono anche un file manifest, questi vengono uniti in un unico file nella tua app. Questo file manifest è in genere un file binario all'interno dell'APK o dell'app bundle, ma quando viene selezionato nello strumento di analisi APK, il formato XML dell'entità viene ricostruito e presentato.

Questo visualizzatore ti aiuta a comprendere le eventuali modifiche che potrebbero essere state apportate alla tua app durante la build. Ad esempio, puoi vedere in che modo il file AndroidManifest.xml di una libreria da cui dipende la tua applicazione viene unito nel file AndroidManifest.xml finale.

Inoltre, questo visualizzatore fornisce alcune funzionalità lint. Gli avvisi o gli errori vengono visualizzati nell'angolo in alto a destra. La Figura 2 mostra un errore segnalato per il file manifest selezionato.

Figura 2. Viene visualizzata un'icona di errore in alto a destra per il file manifest selezionato.

Visualizza i file DEX

Il visualizzatore file DEX di APK Analyzer consente di accedere immediatamente alle informazioni sottostanti nei file DEX della tua app. Il visualizzatore fornisce classe, pacchetti, riferimenti totali e conteggi delle dichiarazioni, che possono aiutarti a decidere se utilizzare multidex o come rimuovere le dipendenze per scendere al di sotto del limite DEX di 64.000.

La figura 3 mostra un'app di dimensioni medie con un limite inferiore a 64.000 DEX. Per ogni pacchetto, classe e metodo all'interno del file DEX sono elencati i conteggi nelle colonne Definisci i metodi e Metodi di riferimento.

Nella colonna Metodi di riferimento vengono conteggiati tutti i metodi a cui fa riferimento il file DEX. In genere sono inclusi metodi definiti nel codice, librerie di dipendenze e metodi definiti nei pacchetti Java e Android standard utilizzati dal codice. Questi sono i metodi conteggiati per il limite di 64.000 metodi in ogni file DEX.

Nella colonna Definisci i metodi vengono conteggiati solo i metodi definiti in uno dei file DEX, pertanto questo numero è un sottoinsieme di Metodi di riferimento.

Figura 3. Un'app di medie dimensioni.

Filtra la visualizzazione ad albero dei file DEX

Appena sopra l'elenco Class, lo strumento di analisi APK fornisce filtri per visualizzare i contenuti del file DEX selezionato, come mostrato nella Figura 4.

Figura 4. Filtri DEX impostati per visualizzare campi e metodi per BuildConfig.

Per utilizzare i filtri per visualizzare tutti i metodi e i campi all'interno di una classe:

  1. Nell'elenco File, seleziona il file classes.dex.
  2. Nell'elenco Corso, vai a un corso e selezionalo.
  3. Espandi il corso selezionato.
  4. Attiva/disattiva Mostra campi per mostrare o nascondere i campi del corso.
  5. Attiva/disattiva Mostra metodi per mostrare o nascondere i metodi della classe.
  6. Attiva/disattiva Mostra tutti i metodi o i campi di riferimento per mostrare o nascondere i pacchetti, le classi, i metodi e i campi a cui viene fatto riferimento.

    Nella visualizzazione ad albero, i nodi in corsivo sono riferimenti che non hanno una definizione nel file DEX selezionato. Un file DEX può fare riferimento a metodi e campi definiti in un file diverso. Ad esempio System.out.println() è un riferimento al metodo println() nel framework Android.

Carica mappature ProGuard

Accanto alle icone dei filtri sono presenti le icone di mappatura ProGuard. Le icone ProGuard non sono selezionabili fino a quando non carichi un set di file di mapping ProGuard che aggiungono funzionalità al visualizzatore DEX, ad esempio il deoffuscamento dei nomi (mapping.txt), la visualizzazione dei nodi rimossi (usage.txt) e l'indicazione di quelli che non possono essere rimossi (seeds.txt).

Il file di mapping ProGuard importato deve derivare dalla stessa build che ha prodotto i file DEX con la riduzione del codice attivata.

Figura 5. Carica mappature ProGuard...

Per caricare i file di mapping ProGuard, procedi nel seguente modo:

  1. Fai clic su Carica mappature Proguard....
  2. Vai alla cartella del progetto che contiene i file di mapping e carica tutti i file, qualsiasi combinazione di file o la cartella che contiene i file.

    I file di mapping si trovano in genere in project/app/build/outputs/mappings/release/. Per impostazione predefinita, il selettore file mostra la cartella release se rileva questa struttura di progetto.

    Innanzitutto, il selettore file verifica la presenza di nomi file che corrispondono esattamente a mapping.txt, seeds.txt e usage.txt. Successivamente, il selettore file cerca i nomi file che contengono il testo mapping, usage o seeds da qualche parte e terminano con .txt. Ad esempio, release-seeds-1.10.15.txt è una corrispondenza.

Nell'elenco seguente sono descritti i file di mapping:

  • seeds.txt: i nodi che la configurazione ProGuard impedisce di essere rimossi durante la riduzione sono mostrati in grassetto.
  • mapping.txt: attiva l'opzione Deoffusca i nomi in modo da poter ripristinare i nomi originali dei nodi che sono stati offuscati da R8. Ad esempio, puoi ripristinare i nomi dei nodi offuscati come a, b, c in MyClass, MainActivity e myMethod().
  • usage.txt: abilita Mostra nodi rimossi per mostrare le classi, i metodi e i campi che sono stati rimossi da R8 durante la riduzione. I nodi ripristinati sono mostrati in barrato.

    Per ulteriori informazioni sull'utilizzo di R8 per offuscare e ridurre al minimo il codice, consulta Ridurre, offuscare e ottimizzare l'app.

Mostra bytecode, trova gli utilizzi e genera la regola di Keep

I nodi nella visualizzazione elenco Corso hanno un menu contestuale con le seguenti opzioni che consentono di visualizzare il bytecode, trovare gli utilizzi e visualizzare una finestra di dialogo che mostra le regole ProGuard da copiare e incollare per il nodo selezionato. Fai clic con il tasto destro del mouse su qualsiasi nodo nella visualizzazione elenco Classe per vedere il relativo menu contestuale.

Mostra bytecode: decompila la classe, il metodo o il campo selezionato e visualizza la rappresentazione in bytecode smali in una finestra di dialogo, come segue:

Figura 6. Bytecode DEX per il metodo init.

Trova usi: mostra quali altre parti del codice DEX contengono riferimenti alla classe o al metodo selezionato, come mostrato nella Figura 7. Se è caricato seeds.txt, i nodi visualizzati in grassetto indicano che la configurazione ProGuard ne impedisce la rimozione durante la riduzione:

Figura 7. Riferimenti a MyClass.

Genera regola ProGuard Keep: mostra le regole ProGuard che puoi copiare e incollare nel file di configurazione ProGuard del progetto, come mostrato nella figura 8. Ciò impedisce che un determinato pacchetto, classe, metodo o campo venga rimosso durante la fase di riduzione del codice. Per maggiori informazioni, consulta Personalizzare il codice da conservare.

Figura 8. che puoi copiare dalla finestra di dialogo nel file di configurazione di ProGuard.

Visualizza entità di codice e risorse

Varie attività di creazione modificano le entità finali di un'app. Ad esempio, le regole di riduzione di ProGuard possono modificare il codice finale e le risorse immagine possono essere sostituite da risorse in una versione di prodotto.

Per visualizzare la versione finale dei file con lo strumento di analisi APK, fai clic sull'entità per visualizzare un'anteprima dell'entità di testo o immagine, come mostrato nella Figura 9.

Figura 9. Un'anteprima della risorsa immagine finale.

Lo strumento di analisi APK può inoltre visualizzare vari file di testo e binari. Ad esempio, il visualizzatore entità resources.arsc consente di visualizzare i valori specifici della configurazione, come le traduzioni dei linguaggi di una risorsa stringa. Nella Figura 10, puoi vedere le traduzioni di ogni risorsa stringa.

Figura 10. Anteprima delle risorse stringa tradotte.

Confronta file

Lo strumento di analisi APK può confrontare le dimensioni delle entità in due diversi file APK o app bundle. Ciò è utile quando devi capire perché le dimensioni della tua app sono aumentate rispetto a una release precedente.

Prima di pubblicare un'app aggiornata:

  1. Carica la versione dell'app che stai per pubblicare nello strumento di analisi APK.
  2. Nell'angolo in alto a destra di APK Analyzer, fai clic su Confronta con l'APK precedente....
  3. Nella finestra di dialogo di selezione, trova l'elemento pubblicato per l'ultima volta per gli utenti e fai clic su OK.

    Viene visualizzata una finestra di dialogo simile a quella della Figura 11 per aiutarti a valutare l'impatto che l'aggiornamento potrebbe avere sugli utenti.

La Figura 11 mostra la differenza tra le build di debug e di release di una determinata app. Tra questi tipi di build utilizzano diverse opzioni di build, il che modifica in modo diverso le entità sottostanti.

Figura 11. La differenza tra APK di debug e release.