AAPT2 (Android Asset Packaging Tool) è uno strumento di creazione che Android Studio e Il plug-in Android Gradle viene utilizzato per compilare e pacchettizzare il risorse. AAPT2 analizza, indicizza, e compila le risorse in un formato binario ottimizzato per la piattaforma Android.
Il plug-in Android Gradle 3.0.0 e versioni successive attiva AAPT2 per impostazione predefinita. Tu
in genere non hanno bisogno di richiamare aapt2
autonomamente. Tuttavia, se preferisci utilizzare
il tuo terminale e il tuo sistema di compilazione invece di Android Studio, puoi usare
AAPT2 dalla riga di comando. Puoi anche eseguire il debug degli errori di build relativi ad AAPT2
dalla riga di comando. A questo scopo, cerca AAPT2 come strumento autonomo in
Android Build Build Tools 26.0.2 e versioni successive.
Per scaricare Android SDK Build Tools dalla riga di comando, utilizza
sdkmanager
ed esegui questo comando:
sdkmanager "build-tools;build-tools-version"
Dopo aver scaricato SDK Build Tools, cerca AAPT2 in
android_sdk/build-tools/version/
.
Perché le revisioni di Android SDK Build Tools non vengono rilasciate spesso, la versione di AAPT2 inclusa negli SDK Build Tools potrebbe non essere più recenti. Per ottenere l'ultima versione di AAPT2: scarica AAPT2 da Google Maven.
Per usare 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 compilation. Per realizzare una compilazione incrementale, separati in due passaggi:
- Compilazione: compila i file di risorse in formati binari.
- Link: unisce tutti i file compilati e li pacchettizza in un'unica pacchetto.
Questa separazione aiuta a migliorare le prestazioni delle build incrementali. Ad esempio: se ci sono modifiche in un singolo file, devi ricompilare solo quel file.
Scarica AAPT2 da Google Maven
Per ottenere la versione più recente di AAPT2 che non è inclusa negli strumenti di creazione, scarica AAPT2 dal Repository Maven di Google come segue:
- Nell'indice del repository, naviga su com.android.tools.build > aapt2.
- Copia il nome della versione più recente di AAPT2.
Inserisci il nome della versione che hai copiato nell'URL seguente e specifica il tuo sistema operativo target: 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, utilizza: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-windows.jar
Accedi all'URL in un browser. A breve inizierà il download di AAPT2.
Rimuovi il pacchetto del file JAR appena scaricato.
Il file JAR deve contenere un eseguibile
aapt2
e alcune librerie che da cui dipende l'eseguibile.
Compila
AAPT2 supporta la compilazione di tutti
Tipi di risorse Android, ad esempio
disegnabili e file XML. Quando richiami AAPT2 per la compilazione,
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 nella directory
anche quando è cambiata una sola risorsa. Sebbene sia possibile passare le risorse
directory contenenti più di un file di risorse in AAPT2 utilizzando l'--dir
non usufruirai 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 illustrato nella tabella seguente:
Ingresso | Output |
---|---|
File di risorse XML, come
Stringa e
Stile,
situato nella directory res/values/
|
Tabella delle risorse con estensione *.arsc.flat .
|
Tutti gli altri file di risorse. |
Tutti i file tranne quelli nella directory
Inoltre, tutti i file PNG vengono elaborati per impostazione predefinita e adottano le estensioni |
I file generati da AAPT2 non sono eseguibili e dovrai includerli in un secondo momento file binari come input nella fase di collegamento per generare un APK. Tuttavia, generato non è un eseguibile che puoi implementare su un dispositivo Android dispositivo immediatamente, perché non contiene file DEX ed è 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 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 dall'input filename e il nome della relativa directory principale.
Per l'esempio precedente con il file strings.xml
come input, aapt2
automaticamente
assegna al file di output il nome values-en_strings.arsc.flat
. Tuttavia, gli attributi compilati
il file drawable archiviato nella directory drawable è 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. Si tratta di un flag obbligatorio perché devi specificare il percorso di una in cui AAPT2 può restituire e archiviare le risorse compilate. |
--dir directory
|
Specifica la directory in cui cercare le risorse. Sebbene sia possibile usare questo flag per compilare più file di risorse con un solo comando, disabilita i vantaggi della compilazione incrementale. Pertanto, questo flag non deve essere usato per progetti di grandi dimensioni. |
--pseudo-localize
|
Genera contenuti pseudolocalizzati
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 crei build di debug che non richiedono la riduzione delle dimensioni dei file. Se abiliti questa opzione, l'esecuzione sarà più rapida, ma l'output sarà più alto dimensioni del file. |
--legacy
|
Tratta gli errori consentiti quando si utilizzano versioni precedenti di AAPT come
avvisi.
Questo flag deve essere utilizzato per errori imprevisti durante la compilazione. Da risolvere cambiamenti del comportamento noti che potrebbero verificarsi durante l'utilizzo di AAPT2, leggi Il comportamento cambia quando utilizzi AAPT2. |
-zip file
|
file è un file ZIP contenente la directory res da cercare
Google Cloud.
|
-output-text-symbols file
|
Genera un file di testo contenente i simboli delle risorse nell'attributo specificato
|
-preserve-visibility-of-styleables
|
Se specificato, applica le stesse regole di visibilità per gli stilisti che per tutte le altre risorse. In caso contrario, tutti gli stili vengono resi pubblici. |
-visibility [public|private|default|]
|
Imposta la visibilità delle risorse compilate sul livello specificato. |
-trace-folder folder
|
Genera un frammento di traccia JSON systrace nella |
-source-path path
|
Imposta il percorso del file di origine del file di risorsa compilato su |
-h
|
Mostra la guida degli strumenti. |
-v
|
Attiva il logging dettagliato. |
Link
Nella fase di collegamento, AAPT2 unisce tutti i file intermedi inclusi nella compilazione
generata automaticamente, come tabelle di risorse, file XML binari e file PNG elaborati
e pacchettizzarli in un unico APK. Inoltre, altri
È possibile generare file ausiliari, ad esempio file di regole R.java
e ProGuard
durante questa fase. Tuttavia, l'APK generato non contiene bytecode DEX e
non è firmato. Non puoi eseguire il deployment di questo APK su un dispositivo.
Se non utilizzi il plug-in Android Gradle per creare un'app dalla riga di comando, puoi Usare altri strumenti a riga di comando, come d8 per compilare Bytecode Java in bytecode DEX e apksigner per firmare l'APK.
Sintassi dei 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
, values_values.arsc.flat
e
AndroidManifest.xml
file. AAPT2 collega il risultato con android.jar
contenente 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
Con il comando link
puoi utilizzare le seguenti opzioni:
Opzione | Descrizione |
---|---|
-o path
|
Specifica il percorso di output per l'APK della risorsa collegata. Questo è un flag obbligatorio perché devi specificare il percorso per l'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, ad esempio nome del pacchetto e applicazione ID. |
-I
|
Fornisce il percorso all'elemento android nei tuoi 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. A scopri di più, leggi Accesso ai file originali. |
-R file
|
Passa un singolo file .flat a link , utilizzando la semantica di overlay
senza utilizzare il tag <add-resource> .
Quando fornisci un file di risorse che si sovrappone a un file esistente, la macro viene utilizzata l'ultima risorsa in conflitto specificata. |
--package-id package-id
|
Specifica l'ID pacchetto da utilizzare per l'app.
L'ID pacchetto specificato deve essere maggiore o uguale a 0x7f
a meno che non vengano utilizzati in combinazione
|
--allow-reserved-package-id
|
Consente l'utilizzo di un ID pacchetto riservato. Gli ID pacchetto riservati sono ID normalmente assegnati agli ID
librerie e nell'intervallo da 0x02 a 0x7e inclusi. Utilizzando
Questa opzione deve essere utilizzata solo per i pacchetti con la 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 del file DEX principale. |
--no-auto-version
|
Disattiva il controllo automatico delle versioni dell'SDK di stile e layout. |
--no-version-vectors
|
Disattiva il controllo delle versioni automatico dei drawable vettoriali. Usa questo flag soltanto quando crei l'APK con il disegno vettoriale Raccolta. |
--no-version-transitions
|
Disabilita il controllo delle versioni automatico delle risorse di transizione. Utilizza questo flag soltanto quando crei l'APK con la libreria Supporto per la transizione. |
--no-resource-deduping
|
Disabilita la deduplicazione automatica delle risorse con valori identici su configurazioni compatibili. |
--enable-sparse-encoding
|
Abilita la codifica di voci sparse utilizzando una struttura di ricerca binaria. Ciò è utile per ottimizzare le dimensioni degli APK, ma a scapito delle risorse di recupero. |
-z
|
Richiede la localizzazione di stringhe contrassegnate come "suggerite". |
-c config
|
Fornisce un elenco di configurazioni separate da virgole.
Ad esempio, se hai dipendenze nella libreria di supporto, che contiene traduzioni per più lingue, puoi filtrare le risorse solo per la configurazione linguistica specificata, come inglese o spagnolo. Devi definire la configurazione della lingua tramite un file ISO 639-1 a due lettere codice lingua, facoltativamente seguito da due lettere ISO 3166-1-alpha-2 codice regione preceduto dalla lettera "r" minuscola. Ad esempio, en-rUS. |
--preferred-density density
|
Consente ad AAPT2 di selezionare la densità e la striscia corrispondenti più vicine
tutti gli altri.
Nella tua app sono disponibili diversi qualificatori di densità dei pixel, come ldpi, hdpi e xhdpi. Quando specifichi una densità preferita, AAPT2 seleziona e archivia la densità corrispondente più vicina nella risorsa e rimuove tutti gli altri. |
--output-to-dir
|
Restituisce i contenuti dell'APK in una directory specificata da -o .
Se ricevi errori che utilizzano questo flag, puoi risolverli eseguendo l'upgrade Android Build Build Tools 28.0.0 o superiore. |
--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 predefinita dell'SDK target da utilizzare per
AndroidManifest.xml .
|
--version-code version-code
|
Specifica il codice di versione da inserire
AndroidManifest.xml se non è presente.
|
--version-name version-name
|
Specifica il nome della versione da inserire
AndroidManifest.xml se non è presente.
|
--revision-code revision-code
|
Specifica il codice di revisione da inserire
AndroidManifest.xml file se non ne è presente nessuno.
|
--replace-version
|
Se --version-code , --version-name o
--revision-code sono specificati e questi valori sostituiscono qualsiasi valore
già nel manifest. Per impostazione predefinita, non cambia nulla se il file manifest
definisce già questi attributi.
|
--compile-sdk-version-nacodeme compile-sdk-version-name
|
Specifica il codice di versione da inserire
AndroidManifest.xml file se non ne è presente nessuno.
|
--compile-sdk-version-name compile-sdk-version-name
|
Specifica il nome della versione da inserire
AndroidManifest.xml file se non ne è presente nessuno.
|
--proto-format
|
Genera risorse compilate in formato Protobuf.
Adatto come input per
|
--non-final-ids
|
Genera R.java con ID risorsa non finali. Riferimenti a
Gli ID del codice dell'app non sono incorporati in kotlinc o javac
compilation.
|
--emit-ids path
|
Emette un file nel percorso specificato con un elenco di nomi di tipi di risorse e
e le loro mappature degli ID. È adatto all'uso con --stable-ids .
|
--stable-ids outputfilename.ext
|
Utilizza il file generato con --emit-ids contenente
dei nomi dei tipi di risorse con i relativi ID assegnati.
Questa opzione consente agli ID assegnati di rimanere stabili anche quando li elimini o aggiungere 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 un pacchetto diverso
i nomi degli utenti.
|
--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
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 target per
instrumentation .
Questa opzione deve essere utilizzata insieme a
|
-0 extension
|
Specifica le estensioni dei file che non vuoi comprimere. |
--split path:config[,config[..]]
|
Suddivide le risorse in base a un insieme di configurazioni per generare un
la versione più recente dell'APK.
Devi specificare il percorso dell'APK di output insieme all'insieme 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 ProGuard. |
--no-resource-removal
|
Disabilita la rimozione automatica delle risorse senza valori predefiniti. Utilizza questa opzione solo durante la creazione di pacchetti di overlay di risorse di runtime. |
-x
|
Flag legacy che specifica l'utilizzo dell'identificatore pacchetto 0x01. |
--product products-list
|
Specifica un elenco separato da virgole di nomi di prodotti da conservare. |
--no-xml-namespaces
|
Rimuove il prefisso dello spazio dei nomi XML e le informazioni URI da
File AndroidManifest.xml e file 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 all'interno del pacchetto dell'app. |
--no-proguard-location-reference
|
Impedisce ai file di 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
R.java per i simboli privati. Se non specificato, pubblico e
I simboli privati usano il nome del pacchetto dell'app.
|
--override-styles-instead-of-overlaying
|
Gli stili definiti in -R di risorse sostituiscono 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 un
grammatica delle espressioni regolari ECMAScript con distinzione tra maiuscole e minuscole.
|
--warn-manifest-validation
|
Tratta gli errori di convalida del manifest come avvisi. |
--exclude-configs qualifier[,qualifier[..]]
|
Esclude i valori delle risorse le cui configurazioni contengono i valori specificati qualificatori. |
--debug-mode
|
Inserisce android:debuggable="true" nel nodo dell'applicazione
del manifest, rendendo l'applicazione di cui è possibile eseguire il debug anche in produzione
dispositivi mobili.
|
--strict-visibility
|
Non sono consentiti overlay con livelli di visibilità diversi. |
--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 nel campo folder specificato.
|
--merge-only
|
Unisce solo le risorse senza verificare i riferimenti alle risorse. Questo
deve essere usato solo con l'elemento --static-lib
flag.
|
-h
|
Visualizza il menu Guida. |
-v
|
Consente di aumentare il livello di dettaglio dell'output. |
Dump
dump
viene utilizzato per stampare informazioni sull'APK che hai generato utilizzando l'elemento
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 il contenuto dalla tabella delle risorse dell'oggetto APK:
aapt2 dump resources output.apk
Esegui il dump dei sottocomandi
Specifica uno dei seguenti sottocomandi con il comando dump
:
Sottocomando | Descrizione |
---|---|
apc
|
Stampa i contenuti del container AAPT2 (APC) generato durante compilation. |
badging
|
Stampa le informazioni estratte dal file manifest dell'APK. |
configurations
|
Stampa ogni configurazione utilizzata da una risorsa nell'APK. |
overlayable
|
Consente di stampare le risorse sovrapponibili dell'APK. |
packagename
|
Stampa 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 utilizzati nell'APK. |
resources
|
Stampa i contenuti della tabella delle risorse dell'APK. |
xmlstrings
|
Stampa le stringhe dal file XML compilato dell'APK. |
xmltree
|
Stampa una struttura ad albero del codice 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 di cui eseguire il dump dall'APK. |
-v
|
Aumenta il livello di dettaglio dell'output. |
Differenza
Usa 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 di essere pacchettizzati nell'APK. Questa ottimizzazione
può ridurre le dimensioni degli APK dell'1-3% circa, a seconda delle dimensioni e del numero
e le risorse utilizzate.
Ottimizza la sintassi
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 tabella piatta
con una struttura di ricerca binaria più compatta, che genera un APK più piccolo
Costo 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 per l'APK della risorsa collegata.
Questo è un flag obbligatorio perché devi specificare il percorso per l'APK di output che può contenere le risorse collegate. |
-d directory
|
Specifica il percorso della directory di output per le suddivisioni. |
-x path
|
Specifica il percorso del file di configurazione XML. |
-p
|
Stampa gli artefatti dell'APK multiplo ed esce. |
--target-densities density[,density[..]]
|
Specifica un elenco separato da virgole di densità dello schermo di cui l'APK per ottimizzare i costi. Tutte le risorse che rimarrebbero inutilizzate sui dispositivi del determinate densità 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. Il valore predefinito è tutto configurazioni. |
--split path:config[,config[..]]
|
Suddivide le risorse in base a un insieme di configurazioni per generare un
la versione più recente dell'APK.
Devi specificare il percorso dell'APK di output insieme all'insieme di configurazioni. |
--keep-artifacts artifact[,artifact[..]]
|
Specifica un elenco separato da virgole di elementi da conservare. Se non viene specificato nulla, vengono conservati tutti gli artefatti. |
--enable-sparse-encoding
|
Abilita la codifica di voci sparse utilizzando una struttura di ricerca binaria. Questa opzione è utile per ottimizzare le dimensioni degli APK, ma a costo di recupero delle risorse. |
--collapse-resource-names
|
Comprime i nomi delle risorse in un singolo valore nel pool di stringhe di chiavi.
Le risorse sono 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 per l'output della mappa dei vecchi percorsi delle risorse in percorsi abbreviati. |
-v
|
Aumenta il livello di dettaglio dell'output. |
-h
|
Mostra la guida dello strumento. |
Converti
Per impostazione predefinita, il comando AAPT compile
compila le risorse in un formato binario
compatibile con gli APK. È possibile specificare anche il formato protobuf
che sia adatto agli AAB specificando --proto-format
. convert
consente di convertire gli APK tra i due formati.
Converti sintassi
La sintassi generale per convert
è la seguente:
aapt2 convert -o output-file options file[,file[..]]
L'esempio seguente converte le risorse in input.apk
e crea una nuova risorsa,
APK in output.apk
contenente risorse per il formato protobuf. Sostituisce il solito
rappresentazione a tabella piatta con un albero di ricerca binaria più compatto,
in un APK di dimensioni inferiori 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 per l'APK della risorsa collegata. Questo è un flag obbligatorio perché devi specificare il percorso per l'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
|
Abilita la codifica di voci sparse utilizzando una struttura di ricerca binaria. Questa opzione è utile per ottimizzare le dimensioni degli APK, ma a costo di recupero delle risorse. |
--keep-raw-values
|
Conserva i valori degli attributi non elaborati nei file XML. |
-v
|
Aumenta il livello di dettaglio dell'output. |
-h
|
Mostra la guida dello strumento. |
Modalità daemon
La versione 2.19 di AAPT ha introdotto la modalità daemon per l'invio di comandi. La modalità daemon puoi inserire più comandi in una singola sessione AAPT.
Sintassi del daemon
Avvia la modalità daemon con il seguente comando:
aapt2 daemon
Quando la modalità daemon è in esecuzione, puoi inserire i comandi. Ogni argomento del 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 modalità daemon
La singola opzione per la modalità daemon è
--trace-folder folder
, che genera un file JSON systrace
del frammento di traccia al valore folder specificato.
Versione
Determina la versione di AAPT2 in uso con il comando version
:
aapt2 version Android Asset Packaging Tool (aapt) 2.19-8678579
Il comportamento cambia quando si utilizza AAPT2
Prima di AAPT2, AAPT era la versione predefinita dell'Android Asset Packaging Tool, che ora è deprecato. Anche se AAPT2 dovrebbe funzionare immediatamente con progetti precedenti, in questa sezione vengono descritte alcune modifiche del comportamento che dovresti di cui sei a conoscenza.
Gerarchie di elementi nel manifest Android
Nelle versioni precedenti di AAPT, gli elementi nidificati nei nodi errati nella
AndroidManifest.xml
file sono stati ignorati o hanno generato un avviso.
Considera ad esempio il seguente:
<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 ignoravano semplicemente 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 manifest siano nidificati correttamente. Per ulteriori informazioni, leggi Panoramica del file manifest dell'app.
Dichiarazione delle risorse
Non puoi più indicare il tipo di una risorsa dall'attributo name
.
L'esempio seguente dichiara erroneamente un elemento di 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 il seguente errore di build:
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 quello principale deve essere un
un tipo di risorsa di stile. In caso contrario, viene visualizzato un errore simile al seguente:
Error: (...) invalid resource type 'attr' for parent of style
Uso non corretto dei simboli di riferimento delle risorse @
AAPT2 genera errori di build quando ometti o posizioni in modo errato la risorsa
simboli di riferimento (@
). Ad esempio, se ometti il simbolo quando
specificando 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>
Quando si crea il modulo, AAPT2 genera il seguente errore di build:
ERROR: expected color but got (raw string) color/colorPrimary
Inoltre, se includi il simbolo in modo errato quando accedi a un
risorsa dallo spazio dei nomi android
:
... <!-- When referencing resources from the 'android' namespace, omit the '@' symbol. --> <item name="@android:windowEnterAnimation"/>
Quando si crea il modulo, AAPT2 genera il seguente errore di build:
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
di Android Build Build Tools, il tuo
potrebbe arrestarsi in modo anomalo in fase di runtime senza mostrare errori o avvisi. Questo arresto anomalo
potrebbe verificarsi perché, durante la creazione della libreria, i campi R.java
vengono
dichiarato final
. Di conseguenza, tutti gli ID risorsa sono incorporati
corsi della biblioteca.
AAPT2 si basa sulla capacità di riassegnare gli ID alle risorse della libreria durante la creazione
la tua app. Se la libreria presuppone che gli ID siano final
e li incorpora in
al file DEX della libreria, il runtime non corrisponde.
Per risolvere l'errore, contatta l'autore della libreria per ricreare la libreria utilizzando l'ultima versione di Android SDK Build Tools e ripubblicare il libreria.