Es gibt einige große Unterschiede zwischen der Funktionsweise von AAPT und AAPT2.
Die Grundidee hinter AAPT2 ist, abgesehen von den neuen Features, dass es den "Paket" -Schritt in zwei Teile teilt: "Kompilieren" und "Verknüpfen". Es verbessert die Leistung, denn wenn nur eine Datei geändert wird, müssen Sie nur diese eine Datei neu kompilieren und alle Zwischendateien mit dem Befehl 'link' verknüpfen.
AAPT2 versucht so früh wie möglich die meisten Fehler zu finden. Beim Wechsel von AAPT zu AAPT2 können daher viele Fehler auftreten, die darauf hinweisen, dass einige Elemente falsch verschachtelt sind oder dass einige Referenzen falsch sind. Weitere Informationen zur neuen Einschränkung finden Sie in der Android Studio 3.0-Dokumentation .
In Android Studio 3.0 ist AAPT2 standardmäßig aktiviert (mit Android Gradle Plugin 3.0.0). Wenn Sie jedoch AAPT2 in Ihrem eigenen Skript verwenden möchten, müssen Sie die Art der Verarbeitung Ihrer Ressourcen ändern.
Für den 'Paket'-Befehl mit AAPT würden Sie das Ressourcenverzeichnis mit dem -S übergeben. Bei AAPT2 müssen Sie zuerst jede Ressource mit dem Befehl 'compile' kompilieren und erst dann alle kompilierten Dateien mit dem Flag -R übergeben.
Zum Beispiel:
Verwenden Sie stattdessen:
%Vor%Es gibt mehr Unterschiede in der Flag-Verwendung, zum Beispiel werden die beiden '- pseudo-localize' und '- no-crunch' Flags während des Kompilierschrittes pro Datei verwendet. Umfassende Informationen über AAPT2-Flags erhalten Sie unter:
%Vor%Hinweis: Behandle dies als Ergänzung zu Izabelas Antwort
Dies ist (Stand Feb 2018) ziemlich schlecht dokumentiert. Die Autoren des Overlay Manager Service in Android O stellten kürzlich ihre Arbeit vor und sprachen über AAPT2 in ihren Folien (siehe Folien 12-14 für den Kontext).
Schauen Sie auch im Zweifelsfall auf den Quellcode: Ссылка .