AAPT2 (Android Asset Packaging Tool) è uno strumento di creazione utilizzato da Android Studio e dal plug-in Android per Gradle per compilare e pacchettizzare le risorse della tua app. AAPT2 analizza, indicizza e compila le risorse in un formato binario ottimizzato per la piattaforma Android.
Il plug-in Android per Gradle 3.0.0 e versioni successive abilita AAPT2 per impostazione predefinita. In genere
non è necessario richiamare aapt2
autonomamente. Tuttavia, se preferisci utilizzare il tuo terminale e il tuo sistema di build anziché Android Studio, puoi utilizzare AAPT2 dalla riga di comando. Puoi anche eseguire il debug degli errori di build relativi all'AAPT2
dalla riga di comando. A questo scopo, trova AAPT2 come strumento autonomo in
Android SDK Build Tools 26.0.2 e versioni successive.
Per scaricare Strumenti di creazione dell'SDK Android dalla riga di comando, utilizza sdkmanager
ed esegui questo comando:
sdkmanager "build-tools;build-tools-version"
Dopo aver scaricato l'SDK Build Tools, trova AAPT2 in
android_sdk/build-tools/version/
.
Poiché le revisioni di SDK Build Tools non vengono rilasciate spesso, la versione di AAPT2 inclusa in SDK Build Tools potrebbe non essere la più recente. Per ottenere la versione più recente di AAPT2, scarica AAPT2 da Google Maven.
Per utilizzare AAPT2 dalla riga di comando su Linux o Mac, esegui il comando aapt2
.
Su Windows, esegui il comando aapt2.exe
.
AAPT2 supporta una compilazione più rapida delle risorse abilitando la compilazione incrementale. Per eseguire la compilazione incrementale, l'elaborazione delle risorse viene separata in due passaggi:
- Compilazione: compila i file di risorse in formati binari.
- Link: unisce tutti i file compilati e li pacchettizza in un unico pacchetto.
Questa separazione aiuta a migliorare le prestazioni per le build incrementali. Ad esempio, se sono presenti modifiche in un singolo file, dovrai ricompilare solo quel file.
Scarica AAPT2 da Google Maven
Per ottenere la versione più recente di AAPT2 non integrata negli strumenti di creazione, scarica AAPT2 dal Repository Maven di Google nel seguente modo:
- Nell'indice repository vai a com.android.tools.build > aapt2.
- Copia il nome dell'ultima versione di AAPT2.
Inserisci il nome della versione copiato nel seguente URL e specifica il sistema operativo di destinazione: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar
Ad esempio, per scaricare la versione 3.2.0-alpha18-4804415 per Windows, usa: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-48
Accedi all'URL in un browser. Il download di AAPT2 inizierà a breve.
Apri il pacchetto del file JAR appena scaricato.
Il file JAR deve contenere un file eseguibile
aapt2
e alcune librerie da cui dipende l'eseguibile.
Compila
AAPT2 supporta la compilazione di tutti i
tipi di risorse Android, come
disegnabili e file XML. Quando richiami AAPT2 per la compilazione, passa
un singolo file di risorse come input per ogni chiamata. AAPT2 analizza quindi il file
e genera un file binario intermedio con estensione .flat
.
Quando passa intere directory, AAPT2 ricompila tutti i file al suo interno anche se è stata modificata una sola risorsa. Anche se puoi passare all'AAPT2 le directory delle risorse contenenti più di un file di risorse utilizzando il flag --dir
, non puoi usufruire dei vantaggi della compilazione incrementale delle risorse in questo modo.
I tipi di file di output possono variare in base all'input fornito per la compilazione, come mostrato nella seguente tabella:
Ingresso | Uscita |
---|---|
File di risorse XML, come String e Style, che si trovano nella directory res/values/
|
Tabella delle risorse con *.arsc.flat come estensione.
|
Tutti gli altri file di risorse. |
Tutti i file diversi dai file nella directory
Inoltre, tutti i file PNG vengono elaborati per impostazione predefinita e adottano le estensioni |
I file generati da AAPT2 non sono eseguibili, pertanto devi includere questi file binari come input nella fase di collegamento per generare un APK in un secondo momento. Tuttavia, il file APK generato non è un eseguibile che puoi implementare subito su un dispositivo Android, perché non contiene file DEX e non è firmato.
Compila sintassi
La sintassi generale per l'utilizzo di compile
è la seguente:
aapt2 compile path-to-input-files [options] -o output-directory/
Nell'esempio seguente, AAPT2 compila i file di risorse denominati values.xml
e myImage.png
singolarmente:
aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/ aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/
Come mostrato nella tabella 1, il nome del file di output dipende dal nome del file di input e dal nome della directory padre.
Per l'esempio precedente, in cui il file strings.xml
è l'input, aapt2
denomina automaticamente
il file di output come values-en_strings.arsc.flat
. Tuttavia, il file di disegno compilato e archiviato nella directory disegnabile è denominato drawable_img.png.flat
.
Opzioni di compilazione
Esistono diverse opzioni che puoi utilizzare con il comando compile
, come mostrato nella tabella 2:
Opzione | Descrizione |
---|---|
-o path
|
Specifica il percorso di output per le risorse compilate. Questo è un flag required, perché devi specificare un percorso di una directory in cui AAPT2 può generare e archiviare le risorse compilate. |
--dir directory
|
Specifica la directory in cui eseguire la scansione delle risorse. Anche se puoi utilizzare questo flag per compilare più file di risorse con un solo comando, disattiva i vantaggi della compilazione incrementale. Di conseguenza, questo flag non deve essere utilizzato per progetti di grandi dimensioni. |
--pseudo-localize
|
Genera versioni pseudolocalizzate
di stringhe predefinite, come en-XA e en-XB .
|
--no-crunch
|
Disabilita l'elaborazione PNG.
Utilizza questa opzione se hai già elaborato i file PNG o se stai creando build di debug che non richiedono la riduzione delle dimensioni del file. Se abiliti questa opzione, l'esecuzione sarà più rapida, ma le dimensioni del file di output aumentano. |
--legacy
|
Tratta gli errori consentiti quando si utilizzano versioni precedenti di AAPT come avvisi.
Questo flag deve essere utilizzato in caso di errori imprevisti durante la compilazione. Per risolvere le modifiche note del comportamento che potrebbero verificarsi durante l'utilizzo di AAPT2, leggi Modifiche del comportamento durante l'utilizzo di AAPT2. |
-zip file
|
file è un file ZIP contenente la directory res per la scansione delle risorse.
|
-output-text-symbols file
|
Genera un file di testo contenente i simboli delle risorse nel |
-preserve-visibility-of-styleables
|
Se specificato, applica le stesse regole di visibilità per gli stilizzabili utilizzati per tutte le altre risorse. In caso contrario, tutti gli stili di stile verranno resi pubblici. |
-visibility [public|private|default|]
|
Imposta la visibilità delle risorse compilate al livello specificato. |
-trace-folder folder
|
Genera un frammento di traccia JSON systrace nella |
-source-path path
|
Imposta su |
-h
|
Visualizza la guida degli strumenti. |
-v
|
Attiva il logging dettagliato. |
Collega
Nella fase di collegamento, AAPT2 unisce tutti i file intermedi generati dalla fase di compilazione, ad esempio tabelle di risorse, file XML binari e file PNG elaborati, per poi pacchettizzare i file in un unico APK. Inoltre, durante questa fase è possibile generare altri file ausiliari, come i file di regole R.java
e ProGuard. Tuttavia, l'APK generato non contiene bytecode DEX e non è firmato. Non puoi eseguire il deployment di questo APK su un dispositivo.
Se non usi il plug-in Android per Gradle per creare la tua app dalla riga di comando, puoi usare altri strumenti a riga di comando, come d8 per compilare il bytecode Java nel bytecode DEX e apksigner per firmare l'APK.
Sintassi del link
La sintassi generale per l'utilizzo di link
è la seguente:
aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml
Nell'esempio seguente, AAPT2 unisce due file intermedi, drawable_Image.flat
e values_values.arsc.flat
, e il file AndroidManifest.xml
. AAPT2 collega il risultato al file android.jar
, che contiene le risorse definite nel pacchetto android
:
aapt2 link -o output.apk -I android_sdk/platforms/android_version/android.jar compiled/res/values_values.arsc.flat compiled/res/drawable_Image.flat --manifest /path/to/AndroidManifest.xml -v
Opzioni di collegamento
Puoi utilizzare le seguenti opzioni con il comando link
:
Opzione | Descrizione |
---|---|
-o path
|
Specifica il percorso di output dell'APK di risorsa collegato. Questo è un flag required, perché devi specificare il percorso dell'APK di output che può contenere le risorse collegate. |
--manifest file
|
Specifica il percorso del file manifest Android da creare. Questo è un flag obbligatorio, perché il file manifest include informazioni essenziali sulla tua app, come il nome del pacchetto e l'ID dell'applicazione. |
-I
|
Fornisce il percorso dell'elemento android nei file di risorse.
|
-A directory
|
Specifica una directory di asset da includere nell'APK.
Puoi utilizzare questa directory per archiviare i file originali non elaborati. Per scoprire di più, consulta Accesso ai file originali. |
-R file
|
Trasferisce un singolo file .flat a link , utilizzando la semantica overlay senza utilizzare il tag <add-resource> .
Quando fornisci un file di risorsa che si sovrappone a un file esistente, viene utilizzata l'ultima risorsa in conflitto specificata. |
--package-id package-id
|
Specifica l'ID pacchetto da utilizzare per la tua app.
L'ID pacchetto specificato deve essere maggiore o uguale a 0x7f, a meno che non venga utilizzato in combinazione con |
--allow-reserved-package-id
|
Consente l'utilizzo di un ID pacchetto riservato. Gli ID pacchetto riservati sono ID normalmente assegnati a librerie condivise nell'intervallo da 0x02 a 0x7e inclusi. Utilizzando
Questa opzione deve essere utilizzata solo per i pacchetti con una versione |
--java directory
|
Specifica la directory in cui generare R.java .
|
--proguard proguard_options
|
Genera il file di output per le regole ProGuard. |
--proguard-conditional-keep-rules
|
Genera il file di output per le regole ProGuard per il file DEX principale. |
--no-auto-version
|
Disattiva il controllo automatico delle versioni dell'SDK di stile e layout. |
--no-version-vectors
|
Disattiva il controllo automatico delle versioni dei trainable vettoriali. Utilizza questo flag solo quando crei l'APK con la Vector Drawable Library. |
--no-version-transitions
|
Disabilita il controllo automatico delle versioni delle risorse di transizione. Usa questo flag soltanto quando crei il tuo APK con la libreria di supporto per la transizione. |
--no-resource-deduping
|
Disabilita la deduplicazione automatica delle risorse con valori identici nelle configurazioni compatibili. |
--enable-sparse-encoding
|
Consente di attivare la codifica di voci sparse utilizzando una struttura di ricerca binaria. Questo è utile per ottimizzare le dimensioni degli APK, ma a scapito delle prestazioni di recupero delle risorse. |
-z
|
Richiede la localizzazione delle stringhe contrassegnate come "suggested". |
-c config
|
Fornisce un elenco di configurazioni separato da virgole.
Ad esempio, se la libreria di supporto contiene dipendenze, che contiene traduzioni in più lingue, puoi filtrare le risorse solo in base alla configurazione della lingua specificata, ad esempio inglese o spagnolo. Devi definire la configurazione della lingua con un codice lingua ISO 639-1 di due lettere, facoltativamente seguito da un codice regione ISO 3166-1-alpha-2 di due lettere preceduto da una "r" minuscola. Ad esempio, en-rUS. |
--preferred-density density
|
Consente all'AAPT2 di selezionare la densità più simile e di rimuovere tutte le altre.
Nella tua app sono disponibili diversi qualificatori di densità dei pixel, ad esempio ldpi, hdpi e xhdpi. Quando specifichi una densità preferita, AAPT2 seleziona e archivia la densità corrispondente più vicina nella tabella delle risorse e rimuove tutte le altre. |
--output-to-dir
|
Restituisce i contenuti dell'APK in una directory specificata da -o .
Se si verificano errori con questo flag, puoi risolverli eseguendo l'upgrade a Android SDK Build Tools 28.0.0 o versioni successive. |
--min-sdk-version min-sdk-version
|
Imposta la versione minima predefinita dell'SDK da utilizzare per
AndroidManifest.xml .
|
--target-sdk-version target-sdk-version
|
Imposta la versione target predefinita dell'SDK da utilizzare per
AndroidManifest.xml .
|
--version-code version-code
|
Specifica il codice di versione da inserire in AndroidManifest.xml se non è presente.
|
--version-name version-name
|
Specifica il nome della versione da inserire in AndroidManifest.xml se non è presente.
|
--revision-code revision-code
|
Specifica il codice di revisione da inserire nel file AndroidManifest.xml se non è presente.
|
--replace-version
|
Se vengono specificati --version-code , --version-name o --revision-code , questi valori sostituiscono qualsiasi valore già presente nel file manifest. Per impostazione predefinita, non cambia nulla se il manifest definisce già questi attributi.
|
--compile-sdk-version-nacodeme compile-sdk-version-name
|
Specifica il codice di versione da inserire nel
file AndroidManifest.xml se non è presente.
|
--compile-sdk-version-name compile-sdk-version-name
|
Specifica il nome della versione da inserire nel file AndroidManifest.xml se non è presente.
|
--proto-format
|
Genera risorse compilate in formato Protobuf.
Adatto come input a
|
--non-final-ids
|
Genera R.java con ID risorsa non finali. I riferimenti agli
ID nel codice dell'app non vengono incorporati durante la compilazione
kotlinc o javac .
|
--emit-ids path
|
Emette un file nel percorso specificato con un elenco di nomi dei tipi di risorse e dei relativi mapping ID. È adatto all'uso con --stable-ids .
|
--stable-ids outputfilename.ext
|
Utilizza il file generato con --emit-ids contenente l'elenco dei nomi dei tipi di risorse e i relativi ID assegnati.
Questa opzione consente agli ID assegnati di rimanere stabili anche quando elimini o aggiungi nuove risorse durante il collegamento. |
--custom-package package_name
|
Specifica il pacchetto Java personalizzato in cui generare R.java .
|
--extra-packages package_name
|
Genera lo stesso file R.java , ma con nomi di pacchetto diversi.
|
--add-javadoc-annotation annotation
|
Aggiunge un'annotazione JavaDoc a tutte le classi Java generate. |
--output-text-symbols path
|
Genera un file di testo contenente i simboli delle risorse della classe R nel file specificato.
Devi specificare il percorso del file di output. |
--auto-add-overlay
|
Consente l'aggiunta di nuove risorse negli overlay senza utilizzare il tag <add-resource> .
|
--rename-manifest-package manifest-package
|
Rinomina il pacchetto nel file AndroidManifest.xml .
|
--rename-instrumentation-target-package instrumentation-
target-package
|
Modifica il nome del pacchetto di destinazione per
instrumentation .
Questa opzione deve essere utilizzata insieme a
|
-0 extension
|
Specifica le estensioni dei file che non vuoi comprimere. |
--split path:config[,config[..]]
|
Suddividi le risorse in base a un insieme di configurazioni per generare una versione diversa dell'APK.
Devi specificare il percorso dell'APK di output e il set di configurazioni. |
--proguard-main-dex file
|
File di output per le regole ProGuard generate per il file DEX principale. |
--proguard-minimal-keep-rules
|
Genera un insieme minimo di regole di conservazione di ProGuard. |
--no-resource-removal
|
Disabilita la rimozione automatica di risorse senza impostazioni predefinite. Utilizza questa opzione solo quando crei pacchetti di overlay di risorse di runtime. |
-x
|
Flag precedente che specifica l'utilizzo dell'identificatore di pacchetto 0x01. |
--product products-list
|
Specifica un elenco di nomi di prodotti da mantenere separati da virgole. |
--no-xml-namespaces
|
Rimuove il prefisso dello spazio dei nomi XML e le informazioni sull'URI dal file AndroidManifest.xml e dai programmi binari XML in res/* .
|
--shared-lib
|
Genera una libreria di runtime Android condivisa. |
--static-lib
|
Genera una libreria Android statica. |
--no-static-lib-packages
|
Unisce tutte le risorse della libreria sotto il pacchetto dell'app. |
--no-proguard-location-reference
|
Impedisce ai file delle regole di ProGuard di avere un riferimento al file di origine. |
--private-symbols package-name
|
package-name specifica il nome del pacchetto da utilizzare durante la generazione di
R.java per i simboli privati. Se non specificato, i simboli pubblici e privati utilizzano il nome del pacchetto dell'app.
|
--override-styles-instead-of-overlaying
|
Fa sì che gli stili definiti nelle risorse -R sostituiscano le definizioni precedenti anziché unirli.
|
--rename-resources-package package-name
|
Rinomina il pacchetto nella tabella delle risorse in package-name. |
--no-compress
|
Non comprime le risorse. |
--keep-raw-values
|
Conserva i valori degli attributi non elaborati nei file XML. |
--no-compress-regex regular-expression
|
Non comprime le estensioni corrispondenti a regular-expression.
Usa il simbolo $ per la fine della riga. Utilizza una grammatica delle espressioni regolari ECMAScript sensibile alle maiuscole.
|
--warn-manifest-validation
|
Tratta gli errori di convalida del file manifest come avvisi. |
--exclude-configs qualifier[,qualifier[..]]
|
Esclude i valori delle risorse le cui configurazioni contengono i qualificatori specificati. |
--debug-mode
|
Inserisce android:debuggable="true" nel nodo dell'applicazione
del manifest, rendendo l'applicazione di cui è possibile eseguire il debug anche sui dispositivi
di produzione.
|
--strict-visibility
|
Non sono consentiti overlay con diversi livelli di visibilità. |
--exclude-sources
|
Non serializza le informazioni del file di origine durante la generazione di risorse in formato Protobuf. |
--trace-folder folder
|
Genera il frammento di traccia JSON systrace nello specifico folder.
|
--merge-only
|
Unisce solo le risorse senza verificare i riferimenti alle risorse. Questo flag deve essere utilizzato solo con il flag --static-lib .
|
-h
|
Visualizza il menu Guida. |
-v
|
Consente di aumentare le Preferenze di lettura dell'output. |
Dump
dump
viene utilizzato per stampare informazioni sull'APK che hai generato usando il
comando link
.
Sintassi del dump
La sintassi generale per l'utilizzo di dump
è la seguente:
aapt2 dump sub-command filename.apk [options]
L'esempio seguente stampa i contenuti della tabella delle risorse dell'APK specificato:
aapt2 dump resources output.apk
Esegui il dump dei comandi secondari
Specifica uno dei seguenti sottocomandi con il comando dump
:
Sottocomando | Descrizione |
---|---|
apc
|
Stampa i contenuti del container AAPT2 (APC) generato durante la compilazione. |
badging
|
Consente di stampare informazioni estratte dal file manifest dell'APK. |
configurations
|
Stampa ogni configurazione utilizzata da una risorsa nell'APK. |
overlayable
|
Consente di stampare le risorse dell'APK che è possibile sovrapporre. |
packagename
|
Consente di stampare il nome del pacchetto dell'APK. |
permissions
|
Stampa le autorizzazioni estratte dal file manifest dell'APK. |
strings
|
Stampa i contenuti del pool di stringhe della tabella delle risorse dell'APK. |
styleparents
|
Consente di stampare gli stili principali degli stili utilizzati nell'APK. |
resources
|
Stampa i contenuti della tabella delle risorse dell'APK. |
xmlstrings
|
Stampa le stringhe dal codice XML compilato dell'APK. |
xmltree
|
Stampa una struttura ad albero del file XML compilato dell'APK. |
Opzioni di dump
Utilizza le seguenti opzioni con dump
:
Opzione | Descrizione |
---|---|
--no-values
|
Elimina l'output dei valori durante la visualizzazione della risorsa. |
--file file
|
Specifica un file come argomento da eseguire il dump dall'APK. |
-v
|
Aumenta le Preferenze di lettura dell'output. |
Differenza
Utilizza diff
per confrontare due APK e identificare le eventuali differenze.
Sintassi diff
La sintassi generale per l'utilizzo di diff
è la seguente:
aapt2 diff first.apk second.apk
Non sono disponibili opzioni per il comando diff
.
Ottimizzazione
optimize
viene utilizzato per eseguire ottimizzazioni sulle risorse unite e resources.arsc
prima che vengano pacchettizzate nell'APK. Questa ottimizzazione
può ridurre le dimensioni degli APK di circa l'1-3%, a seconda delle dimensioni e del numero di
risorse utilizzate.
Sintassi di Optimize
La sintassi generale per l'utilizzo di optimize
è la seguente:
aapt2 optimize options file[,file[..]]
L'esempio seguente ottimizza le risorse in input.apk
e crea un nuovo APK ottimizzato in output.apk
. Sostituisce la solita rappresentazione di tabella piatta con una struttura ad albero di ricerca binaria più compatta, con il risultato di un APK più piccolo a scapito delle prestazioni di recupero:
aapt2 optimize -o output.apk --enable-sparse-encoding input.apk
Opzioni di ottimizzazione
Puoi utilizzare le seguenti opzioni con optimize
:
Opzione | Descrizione |
---|---|
-o path
|
Specifica il percorso di output dell'APK di risorsa collegato.
Questo è un flag required, perché devi specificare il percorso dell'APK di output che può contenere le risorse collegate. |
-d directory
|
Specifica il percorso alla directory di output per le suddivisioni. |
-x path
|
Specifica il percorso del file di configurazione XML. |
-p
|
Consente di stampare gli artefatti dell'APK multiplo e di uscire. |
--target-densities density[,density[..]]
|
Specifica un elenco separato da virgole delle densità dello schermo per cui è ottimizzato l'APK. Tutte le risorse che non verrebbero utilizzate sui dispositivi con le densità specificate vengono rimosse dall'APK. |
--resources-config-path path
|
Specifica il percorso del file Formato: type/resource_name#[directive][,directive] |
-c config[,config[..]]
|
Specifica un elenco separato da virgole di configurazioni da includere. L'impostazione predefinita è Tutte le configurazioni. |
--split path:config[,config[..]]
|
Suddividi le risorse in base a un insieme di configurazioni per generare una versione diversa dell'APK.
Devi specificare il percorso dell'APK di output e il set di configurazioni. |
--keep-artifacts artifact[,artifact[..]]
|
Specifica un elenco separato da virgole di artefatti da mantenere. Se non ne viene specificato nessuno, tutti gli artefatti vengono conservati. |
--enable-sparse-encoding
|
Consente di attivare la codifica di voci sparse utilizzando una struttura di ricerca binaria. Questa opzione è utile per ottimizzare le dimensioni degli APK, ma a scapito delle prestazioni di recupero delle risorse. |
--collapse-resource-names
|
Comprime i nomi delle risorse in un singolo valore nel pool di stringhe di chiavi.
Le risorse vengono esenti utilizzando l'istruzione no_collapse in un file specificato da --resources-config-path .
|
--shorten-resource-paths
|
Abbrevia i percorsi delle risorse all'interno dell'APK. |
--resource-path-shortening-map path
|
Specifica il percorso di output della mappa dei percorsi delle risorse precedenti su percorsi abbreviati. |
-v
|
Aumenta le Preferenze di lettura dell'output. |
-h
|
Visualizza la guida dello strumento. |
Converti
Per impostazione predefinita, il comando compile
dell'AAPT compila le risorse in un formato binario adatto agli APK. È possibile anche specificare il formato protobuf
adatto per gli AAB specificando --proto-format
. Il comando convert
converte gli APK nei due formati.
Converti sintassi
La sintassi generale di convert
è la seguente:
aapt2 convert -o output-file options file[,file[..]]
L'esempio seguente converte le risorse in input.apk
e crea un nuovo APK in output.apk
contenente risorse in formato protobuf. Sostituisce la normale rappresentazione di tabella piatta con una struttura di ricerca binaria più compatta, generando un APK più piccolo a scapito delle prestazioni di recupero:
aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk
Opzioni di conversione
Utilizza le seguenti opzioni con convert
:
Opzione | Descrizione |
---|---|
-o path
|
Specifica il percorso di output dell'APK di risorsa collegato. Questo è un flag required, perché devi specificare il percorso dell'APK di output che può contenere le risorse collegate. |
--output-format [proto|binary]
|
Formato dell'output. I valori accettati sono proto e
binary . Se non viene configurato, il valore predefinito è binary .
|
--enable-sparse-encoding
|
Consente di attivare la codifica di voci sparse utilizzando una struttura di ricerca binaria. Questa opzione è utile per ottimizzare le dimensioni degli APK, ma a scapito delle prestazioni di recupero delle risorse. |
--keep-raw-values
|
Conserva i valori degli attributi non elaborati nei file XML. |
-v
|
Aumenta le Preferenze di lettura dell'output. |
-h
|
Visualizza la guida dello strumento. |
Modalità daemon
La versione 2.19 dell'AAPT ha introdotto la modalità daemon per l'invio di comandi. La modalità daemon consente di inserire più comandi in una singola sessione AAPT.
Sintassi del daemon
Avvia la modalità daemon con il comando seguente:
aapt2 daemon
Quando la modalità daemon è in esecuzione, puoi inserire i comandi. Ogni argomento del comando deve essere su una riga separata, con una riga vuota alla fine del comando. Esci dalla modalità daemon premendo Ctrl+D.
Considera i seguenti comandi compile
individuali:
aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/ aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/
Questi comandi possono essere inseriti in modalità daemon come:
aapt2 daemon Ready compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/ Done compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/ Done ^D Exiting daemon
Opzioni della modalità daemon
L'unica opzione per la modalità daemon è
--trace-folder folder
, che genera un frammento di traccia JSON systrace
per il valore folder specificato.
Versione
Determina la versione di AAPT2 che stai utilizzando con il comando version
:
aapt2 version Android Asset Packaging Tool (aapt) 2.19-8678579
Cambia il comportamento quando utilizzi AAPT2
Prima di AAPT2, AAPT era la versione predefinita dello strumento Android Asset Packaging Tool, che ora è deprecata. Anche se AAPT2 dovrebbe funzionare immediatamente con i progetti precedenti, questa sezione descrive alcune modifiche del comportamento di cui dovresti essere a conoscenza.
Gerarchie di elementi nel file manifest Android
Nelle versioni precedenti di AAPT, gli elementi nidificati in nodi errati nel file AndroidManifest.xml
sono stati ignorati o hanno generato un avviso.
Prendi in considerazione il seguente esempio:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myname.myapplication"> <application ... <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <action android:name="android.intent.action.CUSTOM" /> </activity> </application> </manifest>
Le versioni precedenti di AAPT semplicemente ignoravano il tag <action>
in posizione errata.
Con AAPT2, ricevi il seguente errore:
AndroidManifest.xml:15: error: unknown element <action> found.
Per risolvere il problema, assicurati che gli elementi del file manifest siano nidificati correttamente. Per ulteriori informazioni, consulta la panoramica del file manifest dell'app.
Dichiarazione delle risorse
Non puoi più indicare il tipo di risorsa dall'attributo name
.
L'esempio seguente dichiara in modo errato un elemento della risorsa attr
:
<style name="childStyle" parent="parentStyle"> <item name="attr/my_attr">@color/pink</item> </style>
Dichiarare un tipo di risorsa in questo modo genera l'errore di generazione riportato di seguito:
Error: style attribute 'attr/attr/my_attr (aka my.package:attr/attr/my_attr)' not found.
Per risolvere questo errore, dichiara esplicitamente il tipo utilizzando type="attr"
:
<style name="childStyle" parent="parentStyle"> <item type="attr" name="my_attr">@color/pink</item> </style>
Inoltre, quando dichiari un elemento <style>
, anche il relativo padre deve essere un tipo di risorsa di stile. In caso contrario, riceverai un errore simile al seguente:
Error: (...) invalid resource type 'attr' for parent of style
Utilizzo non corretto dei simboli di riferimento delle risorse @
AAPT2 genera errori di build quando ometti o posizioni in modo errato i simboli di riferimento delle risorse (@
). Ad esempio, se ometti il simbolo quando specifichi un attributo di stile:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... <!-- Note the missing '@' symbol when specifying the resource type. --> <item name="colorPrimary">color/colorPrimary</item> </style>
Durante la creazione del modulo, AAPT2 genera il seguente errore di generazione:
ERROR: expected color but got (raw string) color/colorPrimary
Inoltre, se includi in modo errato il simbolo quando accedi a una risorsa dallo spazio dei nomi android
:
... <!-- When referencing resources from the 'android' namespace, omit the '@' symbol. --> <item name="@android:windowEnterAnimation"/>
Durante la creazione del modulo, AAPT2 genera il seguente errore di generazione:
Error: style attribute '@android:attr/windowEnterAnimation' not found
Configurazione errata delle librerie
Se la tua app ha una dipendenza da una libreria di terze parti creata utilizzando versioni precedenti degli Strumenti di build dell'SDK Android, l'app potrebbe arrestarsi in modo anomalo in fase di runtime senza visualizzare errori o avvisi. Questo arresto anomalo potrebbe verificarsi perché durante la creazione della libreria, i campi R.java
sono stati dichiarati final
. Di conseguenza, tutti gli ID risorsa sono incorporati nelle classi della libreria.
AAPT2 si basa sulla possibilità di riassegnare gli ID alle risorse della libreria durante la creazione dell'app. Se la libreria presuppone che gli ID siano final
e li incorpora nel DEX della libreria, si verifica una mancata corrispondenza del runtime.
Per risolvere questo errore, contatta l'autore della libreria per ricreare la libreria utilizzando la versione più recente di Android Build Tools, quindi ripubblica la libreria.