AAPT2

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:

  1. Nell'indice del repository, naviga su com.android.tools.build > aapt2.
  2. Copia il nome della versione più recente di AAPT2.
  3. 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

  4. Accedi all'URL in un browser. A breve inizierà il download di AAPT2.

  5. 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:

Tabella 1. Il file di input e output tipi di compilazione

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 res/values/ vengono convertiti in file XML binari con estensioni *.flat.

Inoltre, tutti i file PNG vengono elaborati per impostazione predefinita e adottano le estensioni *.png.flat . Se scegli di non comprimere i file PNG, puoi utilizzare il metodo Opzione --no-crunch durante la compilazione.

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:

Tabella 2. Opzioni del comando di compilazione

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 file.
-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 cartella specificata.
-source-path path Imposta il percorso del file di origine del file di risorsa compilato su path.
-h Mostra la guida degli strumenti.
-v Attiva il logging dettagliato.

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.

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

Con il comando link puoi utilizzare le seguenti opzioni:

Tabella 3. Opzioni del comando Link

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.jar o ad altri APK della piattaforma, come framework-res.apk, che potrebbe essere utile durante la creazione le funzionalità di machine learning.

Questo flag è obbligatorio se utilizzi attributi con il parametro 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.

--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 --allow-reserved-package-id, puoi assegnare gli ID che rientrano nell'intervallo di ID pacchetto riservati.

Questa opzione deve essere utilizzata solo per i pacchetti con la versione min-sdk di 26 o inferiore.

--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 bundletool per generare un Android App Bundle.

--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 --rename-manifest-package.

-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:

Tabella 4. Esegui il dump dei sottocomandi

SottocomandoDescrizione
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:

Tabella 5. Opzioni di dump

OpzioneDescrizione
--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:

Tabella 6. Opzioni di ottimizzazione

OpzioneDescrizione
-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 resources.cfg contenente l'elenco di risorse e direttive per ogni risorsa.

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:

Tabella 7. Converti opzioni

OpzioneDescrizione
-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.