AAPT2 (Android Asset Packaging Tool) ist ein Build-Tool, das von Android Studio Android-Gradle-Plug-in zum Kompilieren und Verpacken der Ressourcen AAPT2 parst, indexiert, und kompiliert die Ressourcen in einem Binärformat, das für den Android-Plattform.
Ab Android-Gradle-Plug-in 3.0.0 wird AAPT2 standardmäßig aktiviert. Ich
normalerweise nicht selbst aapt2
aufrufen. Wenn Sie jedoch
Ihr Terminal und Ihr eigenes Build-System anstelle von Android Studio verwenden, können Sie
AAPT2 über die Befehlszeile ausführen. Du kannst auch Build-Fehler im Zusammenhang mit AAPT2 beheben
über die Befehlszeile eingeben. Suchen Sie dazu AAPT2 als eigenständiges Tool in
Android SDK Build Tools 26.0.2 und höher.
Um Android SDK Build Tools über die Befehlszeile herunterzuladen, verwenden Sie
sdkmanager
und führen Sie den folgenden Befehl aus:
sdkmanager "build-tools;build-tools-version"
Nachdem du die SDK Build Tools heruntergeladen hast, suche AAPT2 in
android_sdk/build-tools/version/
Weil Versionen der Android SDK Build Tools nicht veröffentlicht werden Häufig ist die in deinen SDK-Build-Tools enthaltene Version von AAPT2 möglicherweise nicht die auf dem neuesten Stand. Um die neueste Version von AAPT2 zu erhalten, laden Sie AAPT2 von Google Maven herunter.
Wenn Sie AAPT2 über die Befehlszeile unter Linux oder Mac verwenden möchten, führen Sie den Befehl aapt2
aus.
Führen Sie unter Windows den Befehl aapt2.exe
aus.
AAPT2 unterstützt eine schnellere Kompilierung von Ressourcen, indem inkrementelle Kompilierung. Um eine inkrementelle Kompilierung zu erreichen, ist die Ressourcenverarbeitung in zwei Schritte unterteilt:
- Kompilieren: Die Ressourcendateien werden in Binärformate kompiliert.
- Link: Führt alle kompilierten Dateien zusammen und verpackt sie zu einer einzigen Datei Paket.
Diese Trennung trägt dazu bei, die Leistung inkrementeller Builds zu verbessern. Beispiel: Wenn eine einzelne Datei Änderungen enthält, müssen Sie nur diese Datei neu kompilieren.
AAPT2 von Google Maven herunterladen
Um die neueste Version von AAPT2 zu erhalten, die nicht in den Build-Tools enthalten ist, Laden Sie AAPT2 wie folgt aus dem Maven-Repository von Google herunter:
- Gehen Sie im Repository-Index zu den com.android.tools.build > aapt2.
- Kopiere den Namen der neuesten Version von AAPT2.
Fügen Sie den kopierten Versionsnamen in die folgende URL ein und geben Sie Ihre Zielbetriebssystem: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar
Um beispielsweise die Version 3.2.0-alpha18-4804415 für Windows herunterzuladen, verwenden Sie: 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
Rufen Sie die URL in einem Browser auf. AAPT2 wird in Kürze heruntergeladen.
Entpacken Sie die gerade heruntergeladene JAR-Datei.
Die JAR-Datei sollte eine ausführbare
aapt2
und einige Bibliotheken enthalten, die vom ausgeführt werden kann.
Kompilieren
AAPT2 unterstützt die Kompilierung aller
Android-Ressourcentypen wie
und XML-Dateien. Wenn Sie AAPT2 zur Kompilierung aufrufen, übergeben Sie
eine einzelne Ressourcendatei als Eingabe pro Aufruf. AAPT2 parst die Datei dann.
und generiert eine Zwischenbinärdatei mit der Erweiterung .flat
.
Bei der Übergabe ganzer Verzeichnisse kompiliert AAPT2 alle Dateien im Verzeichnis neu
auch wenn sich nur eine Ressource geändert hat. Sie können zwar Ressourcen
Verzeichnisse mit mehr als einer Ressourcendatei in AAPT2 über das --dir
können Sie auf diese Weise nicht von den Vorteilen der inkrementellen Ressourcenkompilierung profitieren.
Die Ausgabedateitypen können sich je nach Eingabe unterscheiden, die Sie für die Kompilierung bereitstellen. wie in der folgenden Tabelle dargestellt:
Eingang | Ausgabe |
---|---|
XML-Ressourcendateien wie
String und
Stil,
im Verzeichnis res/values/
|
Ressourcentabelle mit *.arsc.flat als Erweiterung.
|
Alle anderen Ressourcendateien. |
Alle Dateien außer den Dateien im Verzeichnis
Außerdem werden alle PNG-Dateien standardmäßig verarbeitet und übernehmen die Erweiterung |
Die von AAPT2 ausgegebenen Dateien sind keine ausführbaren Dateien und müssen später eingefügt werden Binärdateien als Eingabe in die Verknüpfungsphase ein, um ein APK zu generieren. Die Die generierte APK-Datei ist keine ausführbare Datei, die du auf einem Android-Gerät bereitstellen kannst. da es keine DEX-Dateien enthält und nicht unterzeichnet.
Syntax kompilieren
Die allgemeine Syntax zur Verwendung von compile
lautet so:
aapt2 compile path-to-input-files [options] -o output-directory/
Im folgenden Beispiel kompiliert AAPT2 Ressourcendateien mit den Namen values.xml
und
myImage.png
einzeln:
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/
Wie in Tabelle 1 dargestellt, hängt der Name der Ausgabedatei von der Eingabe filename und den Namen des übergeordneten Verzeichnisses.
Für das vorherige Beispiel mit der Datei strings.xml
als Eingabe aapt2
automatisch
nennt die Ausgabedatei values-en_strings.arsc.flat
. Die kompilierten
Die im Drawable-Verzeichnis gespeicherte Drawable-Datei heißt drawable_img.png.flat
.
Optionen kompilieren
Es gibt mehrere Optionen, die Sie mit dem Befehl compile
verwenden können:
in Tabelle 2:
Option | Beschreibung |
---|---|
-o path
|
Gibt den Ausgabepfad für die kompilierten Ressourcen an. Dies ist ein erforderliches Flag, da Sie einen Pfad zu einem Verzeichnis, in dem AAPT2 die kompilierten Ressourcen ausgeben und speichern kann. |
--dir directory
|
Gibt das Verzeichnis an, das nach Ressourcen durchsucht werden soll. Sie können mit diesem Flag zwar mehrere Ressourcendateien kompilieren mit einem Befehl deaktiviert, werden die Vorteile der inkrementellen Kompilierung deaktiviert. Daher sollte dieses Flag nicht für große Projekte verwendet werden. |
--pseudo-localize
|
Generiert pseudolocalized
Versionen von Standardstrings wie en-XA und en-XB .
|
--no-crunch
|
Deaktiviert die PNG-Verarbeitung.
Verwenden Sie diese Option, wenn Sie die PNG-Dateien bereits verarbeitet haben oder erstellen Debug-Builds, die keine Dateigrößenreduzierung erfordern. Das Aktivieren dieser Option führt zu einer schnelleren Ausführung, erhöht aber auch die Ausgabe Dateigröße. |
--legacy
|
Behandelt Fehler, die bei Verwendung früherer Versionen von AAPT zulässig sind, wie
Warnungen.
Dieses Flag sollte für unerwartete Kompilierungszeitfehler verwendet werden. Lösung Verhaltensänderungen bei Verwendung von AAPT2, Verhaltensänderungen bei Verwendung von AAPT2 |
-zip file
|
file ist eine ZIP-Datei mit dem Verzeichnis res , nach dem gesucht werden soll.
Ressourcen.
|
-output-text-symbols file
|
Erstellt eine Textdatei mit den Ressourcensymbolen im angegebenen
|
-preserve-visibility-of-styleables
|
Falls angegeben, werden dieselben Sichtbarkeitsregeln auf Styleables angewendet, die für alle anderen Ressourcen verwendet werden. Andernfalls werden alle Styleables veröffentlicht. |
-visibility [public|private|default|]
|
Legt die Sichtbarkeit der kompilierten Ressourcen auf das angegebene Level fest. |
-trace-folder folder
|
Erzeugt ein systrace -JSON-Trace-Fragment im angegebenen |
-source-path path
|
Legt den Pfad der kompilierten Ressource auf |
-h
|
Zeigt die Hilfe für Tools an. |
-v
|
Aktiviert die ausführliche Protokollierung. |
Link
In der Verknüpfungsphase führt AAPT2 alle Zwischendateien zusammen, die von der Kompilierung
in der Phase erzeugt, wie Ressourcentabellen, binäre XML-Dateien und verarbeitete PNGs.
und packt die Dateien dann in einem einzigen APK. Darüber hinaus haben andere
Zusätzliche Dateien wie R.java
- und ProGuard-Regeldateien können generiert werden.
während dieser Phase. Das generierte APK enthält jedoch keinen DEX-Bytecode und
ist nicht signiert. Du kannst dieses APK nicht auf einem Gerät bereitstellen.
Wenn Sie das Android-Gradle-Plug-in nicht verwenden, App über die Befehlszeile erstellen, können Sie andere Befehlszeilentools wie d8 zum Kompilieren verwenden Java-Bytecode in DEX-Bytecode und apksigner um Ihr APK zu signieren.
Link syntax
Die allgemeine Syntax zur Verwendung von link
lautet so:
aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml
Im folgenden Beispiel führt AAPT2 zwei Zwischendateien zusammen,
drawable_Image.flat
und values_values.arsc.flat
sowie die
AndroidManifest.xml
-Datei. AAPT2 verknüpft das Ergebnis mit dem android.jar
-Datei, die die im Paket android
definierten Ressourcen enthält:
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
Linkoptionen
Mit dem Befehl link
können Sie die folgenden Optionen verwenden:
Option | Beschreibung |
---|---|
-o path
|
Gibt den Ausgabepfad für das APK der verknüpften Ressource an. Dies ist ein erforderliches Flag, da Sie den Pfad für Das Ausgabe-APK, das die verknüpften Ressourcen enthalten kann |
--manifest file
|
Gibt den Pfad zur Android-Manifestdatei an, die erstellt werden soll. Dies ist ein erforderliches Flag, da die Manifestdatei wichtige Informationen zu deiner App wie der Paketname und die App ID. |
-I
|
Gibt den Pfad zum android -Namespace in Ihren Ressourcendateien.
|
-A directory
|
Gibt ein Asset-Verzeichnis an, das in das APK aufgenommen werden soll.
In diesem Verzeichnis können Sie nicht verarbeitete Originaldateien speichern. Bis Weitere Informationen, Lesen <ph type="x-smartling-placeholder"></ph> Zugriff auf Originaldateien |
-R file
|
Übergibt eine einzelne .flat -Datei mit der overlay -Semantik an link
ohne das <add-resource> -Tag zu verwenden.
Wenn Sie eine Ressourcendatei bereitstellen, die eine vorhandene Datei überlagert, die zuletzt angegebene in Konflikt stehende Ressource verwendet wird. |
--package-id package-id
|
Gibt die Paket-ID an, die für Ihre App verwendet werden soll.
Die angegebene Paket-ID muss größer oder gleich 0x7f sein
es sei denn, er wird in Kombination mit
|
--allow-reserved-package-id
|
Ermöglicht die Verwendung einer reservierten Paket-ID. Reservierte Paket-IDs sind IDs, die normalerweise gemeinsam genutzten
und im Bereich von 0x02 bis einschließlich 0x7e. Durch die Verwendung von
Diese Option sollte nur für Pakete mit der |
--java directory
|
Gibt das Verzeichnis an, in dem R.java generiert werden soll.
|
--proguard proguard_options
|
Generiert die Ausgabedatei für ProGuard-Regeln. |
--proguard-conditional-keep-rules
|
Generiert die Ausgabedatei für ProGuard-Regeln für den Haupt-DEX. |
--no-auto-version
|
Deaktiviert die automatische SDK-Versionsverwaltung für Stil und Layout. |
--no-version-vectors
|
Deaktiviert die automatische Versionsverwaltung von Vektor-Drawables. Verwenden Sie dieses Flag nur, wenn Sie Ihr APK mit dem Vector Drawable erstellen. Mediathek. |
--no-version-transitions
|
Deaktiviert die automatische Versionsverwaltung von Übergangsressourcen. Verwenden Sie dieses Flag nur, wenn Sie Ihr APK mit der Transition Support Library erstellen. |
--no-resource-deduping
|
Deaktiviert die automatische Deduplizierung von Ressourcen mit identischen Werten in kompatible Konfigurationen. |
--enable-sparse-encoding
|
Ermöglicht die Codierung von Einträgen mit geringer Dichte mithilfe eines binären Suchbaums. Dies ist nützlich für die Optimierung der APK-Größe, allerdings auf Kosten der Ressourcen. die Datenabrufleistung. |
-z
|
Erfordert die Lokalisierung von Strings, die als „vorgeschlagen“ gekennzeichnet sind. |
-c config
|
Stellt eine durch Kommas getrennte Liste von Konfigurationen bereit.
Wenn Sie beispielsweise Abhängigkeiten von der Supportbibliothek haben, Übersetzungen für mehrere Sprachen enthält, können Sie nach Ressourcen filtern. nur für die gegebene Sprachkonfiguration, z. B. Englisch oder Spanisch. Sie müssen die Sprachkonfiguration mit einem aus zwei Buchstaben bestehenden ISO 639-1-konformen Code definieren Sprachcode, optional gefolgt von einem aus zwei Buchstaben bestehenden ISO 3166-1-alpha-2-Code Regionscode mit vorangestelltem Kleinbuchstaben „r“. Beispiel: en-rUS. |
--preferred-density density
|
Ermöglicht es AAPT2, eine möglichst passende Dichte auszuwählen und zu entfernen
alle anderen herauszufiltern.
Es gibt mehrere Pixeldichte-Qualifier, die Sie in Ihrer App verwenden können. wie ldpi, hdpi und xhdpi. Wenn Sie eine bevorzugte Dichte festlegen, AAPT2 wählt die nächstgelegene übereinstimmende Dichte aus und speichert sie in der Ressource und entfernt alle anderen. |
--output-to-dir
|
Gibt den APK-Inhalt in ein Verzeichnis aus, das durch -o angegeben wird.
Wenn Sie mit diesem Flag Fehler erhalten, können Sie sie beheben, indem Sie ein Upgrade ausführen auf Android SDK Build Tools 28.0.0 oder höher. |
--min-sdk-version min-sdk-version
|
Legt die niedrigste SDK-Standardversion für die Verwendung fest
AndroidManifest.xml
|
--target-sdk-version target-sdk-version
|
Legt die SDK-Standardversion für die Verwendung fest
AndroidManifest.xml
|
--version-code version-code
|
Gibt den Versionscode an, in den eingeschleust werden soll
AndroidManifest.xml , wenn keiner vorhanden ist.
|
--version-name version-name
|
Gibt den Versionsnamen an, in den eingefügt werden soll
AndroidManifest.xml , wenn keiner vorhanden ist.
|
--revision-code revision-code
|
Gibt den Überarbeitungscode an, in den eingeschleust werden soll
Datei AndroidManifest.xml , wenn keine vorhanden ist.
|
--replace-version
|
Wenn --version-code , --version-name oder
--revision-code angegeben sind, ersetzen diese Werte alle Werte
bereits im Manifest enthalten. Standardmäßig ändert sich nichts, wenn das Manifest
definiert diese Attribute bereits.
|
--compile-sdk-version-nacodeme compile-sdk-version-name
|
Gibt den Versionscode an, in den eingeschleust werden soll
Datei AndroidManifest.xml , wenn keine vorhanden ist.
|
--compile-sdk-version-name compile-sdk-version-name
|
Gibt den Versionsnamen an, in den eingefügt werden soll
Datei AndroidManifest.xml , wenn keine vorhanden ist.
|
--proto-format
|
Erzeugt kompilierte Ressourcen im Protobuf-Format.
Geeignet als Eingabe für
<ph type="x-smartling-placeholder"></ph>
|
--non-final-ids
|
Generiert R.java mit nicht endgültigen Ressourcen-IDs. Verweise auf
Die IDs aus dem App-Code werden während kotlinc oder javac nicht eingefügt
Kompilierung.
|
--emit-ids path
|
Gibt eine Datei unter dem angegebenen Pfad mit einer Liste von Namen von Ressourcentypen und
ihre ID-Zuordnungen. Dies ist zur Verwendung mit --stable-ids geeignet.
|
--stable-ids outputfilename.ext
|
Verwendet die mit --emit-ids generierte Datei, die den
Liste mit Namen von Ressourcentypen und ihren zugewiesenen IDs.
Mit dieser Option bleiben zugewiesene IDs auch nach dem Löschen stabil oder neue Ressourcen beim Verknüpfen hinzufügen. |
--custom-package package_name
|
Gibt das benutzerdefinierte Java-Paket an, unter dem R.java generiert werden soll.
|
--extra-packages package_name
|
Generiert die gleiche R.java -Datei, aber mit einem anderen Paket
Namen.
|
--add-javadoc-annotation annotation
|
Fügt allen generierten Java-Klassen eine JavaDoc-Anmerkung hinzu. |
--output-text-symbols path
|
Generiert eine Textdatei mit den Ressourcensymbolen der Klasse R
in der angegebenen Datei.
Sie müssen den Pfad zur Ausgabedatei angeben. |
--auto-add-overlay
|
Ermöglicht das Hinzufügen neuer Ressourcen zu Overlays ohne die
<add-resource> -Tag.
|
--rename-manifest-package manifest-package
|
Benennt das Paket in der Datei AndroidManifest.xml um.
|
--rename-instrumentation-target-package instrumentation-
target-package
|
Ändert den Namen des Zielpakets für
<ph type="x-smartling-placeholder"></ph>
instrumentation
Diese Option sollte in Verbindung mit
|
-0 extension
|
Gibt die Dateiendungen an, die nicht komprimiert werden sollen. |
--split path:config[,config[..]]
|
Teilt Ressourcen basierend auf einer Reihe von Konfigurationen auf, um ein anderes
Version der APK-Datei.
Sie müssen den Pfad zum Ausgabe-APK zusammen mit den Konfigurationen. |
--proguard-main-dex file
|
Ausgabedatei für generierte ProGuard-Regeln für den Haupt-DEX. |
--proguard-minimal-keep-rules
|
Generiert einen minimalen Satz von ProGuard-Keep-Regeln. |
--no-resource-removal
|
Deaktiviert das automatische Entfernen von Ressourcen ohne Standardeinstellungen. Diese Option verwenden wenn Sie Laufzeitressourcen-Overlay-Pakete erstellen. |
-x
|
Legacy-Flag, das die Verwendung der Paketkennung 0x01 angibt. |
--product products-list
|
Gibt eine durch Kommas getrennte Liste der Produktnamen an, die beibehalten werden sollen. |
--no-xml-namespaces
|
Entfernt das Präfix des XML-Namespace und die URI-Informationen aus
AndroidManifest.xml -Datei und XML-Binärdateien in
res/* .
|
--shared-lib
|
Generiert eine gemeinsam genutzte Android-Laufzeitbibliothek. |
--static-lib
|
Generiert eine statische Android-Bibliothek. |
--no-static-lib-packages
|
Führt alle Bibliotheksressourcen unter dem App-Paket zusammen. |
--no-proguard-location-reference
|
Verhindert, dass ProGuard-Regeldateien einen Verweis auf die Quelldatei haben. |
--private-symbols package-name
|
package-name gibt den Paketnamen an, der beim Generieren verwendet werden soll
R.java für private Symbole. Wenn nicht angegeben, werden öffentlich und
privaten Symbolen den Paketnamen der App.
|
--override-styles-instead-of-overlaying
|
Bewirkt, dass in -R Ressourcen definierte Stile vorherige Definitionen ersetzen
statt sie zusammenzuführen.
|
--rename-resources-package package-name
|
Benennt das Paket in der Ressourcentabelle in package-name um. |
--no-compress
|
Es werden keine Ressourcen komprimiert. |
--keep-raw-values
|
Behält unverarbeitete Attributwerte in XML-Dateien bei. |
--no-compress-regex regular-expression
|
Erweiterungen, die mit regular-expression übereinstimmen, werden nicht komprimiert.
Verwenden Sie das Symbol $ für das Zeilenende. Verwendet eine
zwischen Groß- und Kleinschreibung zu unterscheiden.
|
--warn-manifest-validation
|
Behandelt Fehler bei der Manifestvalidierung als Warnungen. |
--exclude-configs qualifier[,qualifier[..]]
|
Schließt Werte von Ressourcen aus, deren Konfigurationen die angegebenen Qualifier. |
--debug-mode
|
Fügt android:debuggable="true" in den Anwendungsknoten ein
des Manifests, sodass die Anwendung auch in der Produktionsumgebung
Geräte.
|
--strict-visibility
|
Overlays mit unterschiedlichen Sichtbarkeitsstufen sind nicht zulässig. |
--exclude-sources
|
Quelldateiinformationen werden nicht serialisiert, wenn Ressourcen generiert werden in Protobuf-Format. |
--trace-folder folder
|
Generiert das JSON-Trace-Fragment systrace für die angegebene folder.
|
--merge-only
|
Führt nur die Ressourcen zusammen, ohne Ressourcenverweise zu prüfen. Dieses
Flag sollte nur mit dem Parameter --static-lib verwendet werden
melden.
|
-h
|
Zeigt das Hilfemenü an. |
-v
|
Ermöglicht eine erhöhte Ausführlichkeit der Ausgabe. |
Erfassen
Mit dump
werden Informationen zum APK gedruckt, das du mithilfe des
link
-Befehl.
Dump-Syntax
Die allgemeine Syntax zur Verwendung von dump
lautet so:
aapt2 dump sub-command filename.apk [options]
Im folgenden Beispiel werden Inhalte aus der Ressourcentabelle der angegebenen APK:
aapt2 dump resources output.apk
Dump-Unterbefehle
Geben Sie mit dem Befehl dump
einen der folgenden Unterbefehle an:
Unterbefehl | Beschreibung |
---|---|
apc
|
Gibt den Inhalt des AAPT2-Containers (APC) aus, der während Kompilierung. |
badging
|
Druckt Informationen, die aus dem Manifest des APK extrahiert wurden. |
configurations
|
Gibt jede Konfiguration aus, die von einer Ressource im APK verwendet wird. |
overlayable
|
Gibt die einblendbaren Ressourcen des APK aus. |
packagename
|
Gibt den Paketnamen des APK aus. |
permissions
|
Druckt die aus dem Manifest des APK extrahierten Berechtigungen. |
strings
|
Gibt den Inhalt des Ressourcentabellen-Stringpools des APK aus. |
styleparents
|
Gibt die übergeordneten Stile aus, die im APK verwendet werden. |
resources
|
Gibt den Inhalt der Ressourcentabelle des APK aus. |
xmlstrings
|
Druckt Strings aus dem kompilierten XML-Code des APK aus. |
xmltree
|
Druckt eine Baumstruktur des kompilierten XML-Codes des APK. |
Dumpoptionen
Verwenden Sie die folgenden Optionen mit dump
:
Option | Beschreibung |
---|---|
--no-values
|
Unterdrückt die Ausgabe von Werten beim Anzeigen der Ressource. |
--file file
|
Gibt eine Datei als Argument an, die aus dem APK abgerufen werden soll. |
-v
|
Erhöht die Ausführlichkeit der Ausgabe. |
Unterschied
Verwende diff
, um zwei APKs zu vergleichen und Unterschiede zwischen ihnen zu identifizieren.
Differenz-Syntax
Die allgemeine Syntax zur Verwendung von diff
lautet so:
aapt2 diff first.apk second.apk
Für den Befehl diff
gibt es keine Optionen.
Optimieren
Mit optimize
werden Optimierungen für die zusammengeführten Ressourcen und
resources.arsc
, bevor sie in das APK gepackt werden. Diese Optimierung
die APK-Größe um etwa 1–3 % reduzieren, je nach Größe und Anzahl der
die genutzt werden.
Optimize-Syntax
Die allgemeine Syntax zur Verwendung von optimize
lautet so:
aapt2 optimize options file[,file[..]]
Im folgenden Beispiel werden die Ressourcen in input.apk
optimiert und ein neues,
optimiertes APK in output.apk
. Sie ersetzt die übliche Darstellung in einer flachen Tabelle.
mit einem kompakteren binären Suchbaum, was zu einem kleineren APK auf der
Kosten für die Abrufleistung:
aapt2 optimize -o output.apk --enable-sparse-encoding input.apk
Optimize-Optionen
Mit optimize
können Sie die folgenden Optionen verwenden:
Option | Beschreibung |
---|---|
-o path
|
Gibt den Ausgabepfad für das APK der verknüpften Ressource an.
Dies ist ein erforderliches Flag, da Sie den Pfad für Das Ausgabe-APK, das die verknüpften Ressourcen enthalten kann |
-d directory
|
Gibt den Pfad zum Ausgabeverzeichnis für Splits an. |
-x path
|
Gibt den Pfad zur XML-Konfigurationsdatei an. |
-p
|
Gibt die Multi-APK-Artefakte aus und wird beendet. |
--target-densities density[,density[..]]
|
Gibt eine durch Kommas getrennte Liste der Bildschirmdichten an, die das APK ist optimiert ist. Alle Ressourcen, die auf den Geräten der werden aus dem APK entfernt. |
--resources-config-path path
|
Gibt den Pfad zur Datei Format: type/resource_name#[directive][,directive] |
-c config[,config[..]]
|
Gibt eine durch Kommas getrennte Liste der einzuschließenden Konfigurationen an. Die Standardeinstellung ist „Alle“. Konfigurationen. |
--split path:config[,config[..]]
|
Teilt Ressourcen basierend auf einer Reihe von Konfigurationen auf, um ein anderes
Version der APK-Datei.
Sie müssen den Pfad zum Ausgabe-APK zusammen mit den Konfigurationen. |
--keep-artifacts artifact[,artifact[..]]
|
Gibt eine durch Kommas getrennte Liste der Artefakte an, die beibehalten werden sollen. Sind keine angegeben, werden alle Artefakte beibehalten. |
--enable-sparse-encoding
|
Ermöglicht die Codierung dünnbesetzter Einträge mithilfe eines binären Suchbaums. Diese Option ist nützlich für die Optimierung der APK-Größe, erfordert jedoch beim Abrufen von Ressourcen. |
--collapse-resource-names
|
Minimiert Ressourcennamen auf einen einzelnen Wert im Schlüsselstringpool.
Ressourcen werden mithilfe der no_collapse -Anweisung ausgenommen in
eine durch --resources-config-path angegebene Datei.
|
--shorten-resource-paths
|
Verkürzt die Pfade von Ressourcen im APK. |
--resource-path-shortening-map path
|
Gibt den Pfad für die Ausgabe der Zuordnung alter Ressourcenpfade zu verkürzten Pfaden an. |
-v
|
Erhöht die Ausführlichkeit der Ausgabe. |
-h
|
Zeigt die Hilfe zum Tool an. |
Umwandeln
Standardmäßig kompiliert der AAPT-Befehl compile
Ressourcen in einem Binärformat
das für APKs geeignet ist. Sie können auch das protobuf-Format angeben
der für AABs geeignet ist, indem Sie --proto-format
angeben. Das convert
werden APKs zwischen den beiden Formaten konvertiert.
Syntax konvertieren
Die allgemeine Syntax für convert
lautet so:
aapt2 convert -o output-file options file[,file[..]]
Im folgenden Beispiel werden die Ressourcen in input.apk
konvertiert und ein neues,
APK in output.apk
mit Ressourcen im protobuf-Format. Sie ersetzt die üblichen
Darstellung einer flachen Tabelle mit einer kompakteren binären Suchstruktur, die
in einem kleineren APK auf Kosten der Abrufleistung:
aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk
Konvertierungsoptionen
Verwenden Sie die folgenden Optionen mit convert
:
Option | Beschreibung |
---|---|
-o path
|
Gibt den Ausgabepfad für das APK der verknüpften Ressource an. Dies ist ein erforderliches Flag, da Sie den Pfad für Das Ausgabe-APK, das die verknüpften Ressourcen enthalten kann |
--output-format [proto|binary]
|
Format der Ausgabe. Zulässige Werte sind proto und
binary . Wenn nichts festgelegt ist, wird standardmäßig binary verwendet.
|
--enable-sparse-encoding
|
Ermöglicht die Codierung dünnbesetzter Einträge mithilfe eines binären Suchbaums. Diese Option ist nützlich für die Optimierung der APK-Größe, erfordert jedoch beim Abrufen von Ressourcen. |
--keep-raw-values
|
Behält unverarbeitete Attributwerte in XML-Dateien bei. |
-v
|
Erhöht die Ausführlichkeit der Ausgabe. |
-h
|
Zeigt die Hilfe zum Tool an. |
Daemon-Modus
Mit AAPT-Version 2.19 wurde der Daemon-Modus für die Ausgabe von Befehlen eingeführt. Mit dem Daemon-Modus mehrere Befehle in einer AAPT-Sitzung eingeben.
Daemon-Syntax
Starten Sie den Daemon-Modus mit dem folgenden Befehl:
aapt2 daemon
Sobald der Daemon-Modus ausgeführt wird, können Sie Befehle eingeben. Jedes Argument des -Befehl muss sich in einer separaten Zeile mit einer Leerzeile am Ende des Befehls befinden. Beenden Sie den Daemon-Modus, indem Sie Strg+D drücken.
Betrachten Sie die folgenden einzelnen compile
-Befehle:
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/
Diese Befehle können im Daemon-Modus eingegeben werden als:
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
Optionen für den Daemon-Modus
Die einzige Option für den Daemon-Modus ist
--trace-folder folder
, die ein systrace
-JSON generiert
Trace-Fragment auf die angegebene folder.
Version
Bestimme die Version von AAPT2, die du mit dem Befehl version
verwendest:
aapt2 version Android Asset Packaging Tool (aapt) 2.19-8678579
Verhaltensänderungen bei Verwendung von AAPT2
Vor AAPT2 war AAPT die Standardversion des Android Asset Packaging Tool, die mittlerweile eingestellt wurde. Obwohl AAPT2 sofort mit älteren Projekten enthält, werden in diesem Abschnitt einige Verhaltensänderungen beschrieben, die Sie bewusst sind.
Elementhierarchien im Android-Manifest
In früheren Versionen von AAPT waren Elemente, die in falschen Knoten in der
AndroidManifest.xml
Datei wurde entweder ignoriert oder es wurde eine Warnung ausgegeben.
Hier ein Beispiel:
<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>
In früheren Versionen des AAPT wurde das falsch platzierte <action>
-Tag einfach ignoriert.
Mit AAPT2 wird der folgende Fehler angezeigt:
AndroidManifest.xml:15: error: unknown element <action> found.
Um das Problem zu beheben, müssen Sie dafür sorgen, dass Ihre Manifestelemente richtig verschachtelt sind. Weitere Informationen finden Sie in den App-Manifest-Übersicht.
Angabe von Ressourcen
Sie können den Ressourcentyp nicht mehr über das Attribut name
angeben.
Im folgenden Beispiel wird ein attr
-Ressourcenelement fälschlicherweise deklariert:
<style name="childStyle" parent="parentStyle"> <item name="attr/my_attr">@color/pink</item> </style>
Die Deklaration eines Ressourcentyps auf diese Weise führt zu folgendem Build-Fehler:
Error: style attribute 'attr/attr/my_attr (aka my.package:attr/attr/my_attr)' not found.
Um diesen Fehler zu beheben, müssen Sie den Typ explizit mit type="attr"
deklarieren:
<style name="childStyle" parent="parentStyle"> <item type="attr" name="my_attr">@color/pink</item> </style>
Außerdem muss beim Deklarieren eines <style>
-Elements das übergeordnete Element ebenfalls ein
Ressourcentyp des Stils. Andernfalls erhalten Sie eine Fehlermeldung, die in etwa so aussieht:
Error: (...) invalid resource type 'attr' for parent of style
Falsche Verwendung von @-Ressourcenreferenzsymbolen
AAPT2 gibt Build-Fehler aus, wenn Sie eine Ressource weglassen oder falsch platzieren
Referenzsymbole (@
). Wenn Sie z. B. das Symbol weglassen,
durch Angabe eines Stilattributs:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... <!-- Note the missing '@' symbol when specifying the resource type. --> <item name="colorPrimary">color/colorPrimary</item> </style>
Beim Erstellen des Moduls gibt AAPT2 den folgenden Build-Fehler aus:
ERROR: expected color but got (raw string) color/colorPrimary
Wenn Sie das Symbol beim Zugriff auf eine
Ressource aus dem Namespace android
:
... <!-- When referencing resources from the 'android' namespace, omit the '@' symbol. --> <item name="@android:windowEnterAnimation"/>
Beim Erstellen des Moduls gibt AAPT2 den folgenden Build-Fehler aus:
Error: style attribute '@android:attr/windowEnterAnimation' not found
Falsche Konfiguration der Bibliotheken
Wenn Ihre App von einer Bibliothek eines Drittanbieters abhängig ist, die mit älteren Versionen
der Android SDK-Build-Tools verwenden,
App während der Laufzeit abstürzen kann, ohne dass Fehler oder Warnungen angezeigt werden. Dieser Absturz
kann auftreten, weil die R.java
-Felder während der Erstellung der Bibliothek
hat final
deklariert. Daher werden alle Ressourcen-IDs in den
in der Bibliothek an.
AAPT2 setzt voraus, dass die IDs den Bibliotheksressourcen beim Erstellen von
für Ihre App. Wenn die Bibliothek annimmt, dass die IDs final
sind, und sie inline eingefügt werden,
Bibliothek DEX enthält, liegt eine Abweichung der Laufzeit vor.
Bitten Sie den Autor der Bibliothek, die Bibliothek neu zu erstellen, um diesen Fehler zu beheben Verwenden Sie die neueste Version der Android SDK Build Tools und veröffentlichen Sie die Bibliothek.