AAPT2

AAPT2 (Android Asset Packaging Tool) to narzędzie do tworzenia kompilacji, Używanie wtyczki Androida do kompilowania i pakowania resources. analiza, indeksy i indeksy AAPT2, i kompiluje zasoby do formatu binarnego zoptymalizowanego pod kątem Platforma Androida.

Wtyczka Androida do obsługi Gradle w wersji 3.0.0 lub nowszej włącza domyślnie protokół AAPT2. Ty zwykle nie trzeba wywoływać metody aapt2 samodzielnie. Jeśli jednak wolisz używać terminala i własnego systemu kompilacji, a nie Android Studio, AAPT2 z wiersza poleceń. Możesz też debugować błędy kompilacji związane z AAPT2 w wierszu poleceń. Aby to zrobić, znajdź AAPT2 jako samodzielne narzędzie w Android SDK Build Tools w wersji 26.0.2 lub nowszej.

Aby pobrać narzędzia Android SDK Build Tools z wiersza poleceń, użyj polecenia sdkmanager i uruchom to polecenie:

sdkmanager "build-tools;build-tools-version"

Po pobraniu SDK Build Tools znajdź narzędzie AAPT2 w android_sdk/build-tools/version/

Ponieważ wersje Android SDK Build Tools nie są publikowane często wersja AAPT2 zawarta w narzędziu SDK Build Tools może nie być najnowszego. Aby pobrać najnowszą wersję AAPT2, Pobierz pakiet AAPT2 z Google Maven.

Aby użyć dodatku AAPT2 z poziomu wiersza poleceń w systemie Linux lub na Macu, uruchom polecenie aapt2. W systemie Windows uruchom polecenie aapt2.exe.

AAPT2 umożliwia szybszą kompilację zasobów przez włączenie przyrostowego kompilację danych. Do przeprowadzenia kompilacji przyrostowej wymagane jest przetwarzanie zasobów w 2 etapach:

  • Kompilowanie: kompiluje pliki zasobów do formatów binarnych.
  • Link: łączy wszystkie skompilowane pliki i pakuje je w jeden plik. pakietu SDK.

Taki podział pomaga zwiększyć wydajność kompilacji przyrostowych. Przykład: Jeśli jeden plik zawiera zmiany, musisz ponownie skompilować tylko ten plik.

Pobierz plik AAPT2 z Google Maven

Aby pobrać najnowszą wersję AAPT2, której nie ma w narzędziach do kompilacji, Pobierz plik AAPT2 z repozytorium Google Maven w ten sposób:

  1. W indeksie repozytorium przejdź do obszaru do com.android.tools.build > aapt2.
  2. Skopiuj nazwę najnowszej wersji AAPT2.
  3. Wstaw skopiowaną nazwę wersji do poniższego adresu URL i określ docelowy system operacyjny: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar

    Aby np. pobrać wersję 3.2.0-alfa18-4804415 na system Windows, użyj kodu: 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. Otwórz adres URL w przeglądarce. Pobieranie pliku AAPT2 wkrótce się rozpocznie.

  5. Rozpakuj pobrany przed chwilą plik JAR.

    Plik JAR powinien zawierać plik wykonywalny aapt2 i kilka bibliotek, zależy od pliku wykonywalnego.

Kompilacja

AAPT2 obsługuje kompilację wszystkich Typy zasobów Androida: obiektów rysowalnych i plików XML. Po wywołaniu pakietu AAPT2 na potrzeby kompilacji pojedynczy plik zasobów jako dane wejściowe na wywołanie. AAPT2 analizuje plik. i generuje pośredni plik binarny z rozszerzeniem .flat.

Podczas przekazywania całych katalogów AAPT2 ponownie kompiluje wszystkie pliki w katalogu nawet jeśli zmienił się tylko jeden zasób. Mimo że można przekazać zasób katalogów zawierających więcej niż 1 plik zasobów do AAPT2 przy użyciu interfejsu --dir nie zyskuje się w ten sposób korzyści przyrostowej kompilacji zasobów.

Typy plików wyjściowych mogą się różnić w zależności od danych wejściowych podanych na potrzeby kompilacji, zgodnie z poniższą tabelą:

Tabela 1. Plik wejściowy i wyjściowy typy do kompilacji

Wprowadź tekst Wyjście
Pliki zasobów XML, takie jak String oraz Styl, znajduje się w katalogu res/values/ Tabela zasobów z rozszerzeniem *.arsc.flat.
Wszystkie inne pliki zasobów.

Wszystkie pliki oprócz plików w katalogu res/values/ są zostało przekonwertowane na binarne pliki XML z rozszerzeniem *.flat.

Poza tym wszystkie pliki PNG są domyślnie zniekształcane i stosują rozszerzenia *.png.flat . Jeśli nie chcesz kompresować plików PNG, możesz użyć Opcja --no-crunch podczas kompilacji.

Pliki wyjściowe AAPT2 nie są plikami wykonywalnymi i musisz później uwzględnić te pliki plików binarnych jako danych wejściowych na etapie łączenia, by wygenerować pakiet APK. Jednak wygenerowany plik APK nie jest plikiem wykonywalnym, który można wdrożyć na urządzeniu z Androidem. ponieważ nie zawiera plików DEX i jest nie podpisano.

Składnia kompilacji

Ogólna składnia elementu compile jest taka:

aapt2 compile path-to-input-files [options] -o output-directory/

W poniższym przykładzie AAPT2 kompiluje pliki zasobów o nazwach values.xml i myImage.png pojedynczo:

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/

Jak widać w tabeli 1, nazwa pliku wyjściowego zależy od danych wejściowych nazwa pliku i nazwa jego katalogu nadrzędnego.

W poprzednim przykładzie z danymi wejściowymi pliku strings.xml: aapt2 automatycznie nadaje plikowi wyjściowemu nazwę values-en_strings.arsc.flat. Skompilowany plik plik rysowalny zapisany w katalogu z obiektem ma nazwę drawable_img.png.flat.

Opcje kompilacji

Polecenie compile udostępnia kilka opcji, jak pokazano na ilustracji w tabeli 2:

Tabela 2. Opcje polecenia kompilacji

Option Opis
-o path

Określa ścieżkę wyjściową skompilowanych zasobów.

Jest to wymagana flaga, ponieważ musisz podać ścieżkę do katalogu, w którym AAPT2 może wyświetlać i przechowywać skompilowane zasoby.

--dir directory

Określa katalog do przeskanowania w poszukiwaniu zasobów.

Chociaż możesz użyć tej flagi do skompilowania wielu plików zasobów jednym poleceniem wyłącza korzyści kompilacji przyrostowej. Dlatego tej flagi nie należy używać w przypadku dużych projektów.

--pseudo-localize Generuje pseudolokalizowane wersji ciągów domyślnych, takich jak en-XA i en-XB.
--no-crunch Wyłącza przetwarzanie PNG.

Użyj tej opcji, jeśli pliki PNG zostały już przetworzone lub tworzy kompilacje do debugowania, które nie wymagają zmniejszania rozmiaru plików. Włączenie tej opcji przyspiesza wykonywanie, ale zwiększa dane wyjściowe rozmiar pliku.

--legacy Traktuje błędy, które są dozwolone podczas korzystania z wcześniejszych wersji AAPT, jako ostrzeżeniami.

Tej flagi należy używać w przypadku nieoczekiwanych błędów podczas kompilacji. Do rozwiązania znane zmiany w działaniu, które mogą wystąpić podczas używania AAPT2, przeczytaj Sposób działania zmienia się, gdy używany jest AAPT2.

-zip file file to plik ZIP zawierający katalog res do przeskanowania i zasobami Google Cloud.
-output-text-symbols file Generuje plik tekstowy zawierający symbole zasobów w określonym file.
-preserve-visibility-of-styleables Jeśli określisz reguły, zostaną zastosowane te same reguły widoczności do elementów stylu, które są używane we wszystkich innych zasobach. W przeciwnym razie wszystkie elementy z elementami stylów stają się publiczne.
-visibility [public|private|default|] Ustawia widoczność skompilowanych zasobów na określony poziom.
-trace-folder folder Generuje fragment logu czasu JSON systrace do określonego folderu.
-source-path path Ustawia ścieżkę pliku źródłowego skompilowanego pliku zasobów na path.
-h Wyświetla pomoc dotyczącą narzędzi.
-v Włącza logowanie szczegółowe.

Na etapie połączenia AAPT2 scala wszystkie pliki pośrednie, które kompiluje kompilacja generowanie, takie jak tabele zasobów, binarne pliki XML i przetworzone pliki PNG a potem spakuj je do jednego pliku APK. Dodatkowo inne pliki pomocnicze, np. R.java i pliki z regułami ProGuard, można generować; podczas tej fazy. Wygenerowany plik APK nie zawiera jednak kodu bajtowego DEX ani jest bez podpisu. Nie możesz wdrożyć tego pliku APK na urządzeniu.

Jeśli nie używasz wtyczki Androida do obsługi Gradle do stworzyć aplikację z poziomu wiersza poleceń, używać innych narzędzi wiersza poleceń, np. d8, Kod bajtowy Java do kodu bajtowego DEX i tagu apksigner aby podpisać pakiet APK.

Ogólna składnia elementu link jest taka:

aapt2 link path-to-input-files [options] -o
outputdirectory/outputfilename.apk --manifest AndroidManifest.xml

W poniższym przykładzie AAPT2 scala 2 pliki pośrednie: drawable_Image.flat i values_values.arsc.flat oraz AndroidManifest.xml. Kod AAPT2 łączy wynik z parametrem android.jar który zawiera zasoby zdefiniowane w pakiecie 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

W poleceniu link możesz używać tych opcji:

Tabela 3. Opcje poleceń dotyczących linku

Option Opis
-o path

Określa ścieżkę wyjściową pliku APK powiązanego zasobu.

Jest to wymagana flaga, ponieważ należy podać ścieżkę dla wyjściowy plik APK, który może zawierać połączone zasoby.

--manifest file

Określa ścieżkę do pliku manifestu Androida do skompilowania.

Jest to wymagana flaga, ponieważ plik manifestu zawiera najważniejszych informacji o aplikacji, takich jak nazwa pakietu i aplikacja; ID.

-I

Zawiera ścieżkę do pliku android.jar platformy lub innych plików APK, np. framework-res.apk, które mogą być przydatne podczas tworzenia funkcje zabezpieczeń.

Ta flaga jest wymagana, jeśli używasz atrybutów z atrybutem Przestrzeń nazw android w plikach zasobów.
-A directory Określa katalog zasobów, który ma zostać dołączony do pliku APK.

W tym katalogu możesz przechowywać oryginalne, nieprzetworzone pliki. Do więcej informacji, przeczytaj Dostęp do oryginalnych plików.

-R file Przekazuje pojedynczy plik .flat do usługi link przy użyciu semantyki overlay bez użycia tagu <add-resource>.

Jeśli podasz plik zasobów, który nakłada się na istniejący plik, makro używany jest ostatni kolidujący zasób.

--package-id package-id Określa identyfikator pakietu, który ma być używany w przypadku aplikacji.

Podany identyfikator pakietu nie może być mniejszy niż 0 x 7f chyba że jest używany w połączeniu z --allow-reserved-package-id

--allow-reserved-package-id

Umożliwia użycie zarezerwowanego identyfikatora pakietu.

Zarezerwowane identyfikatory pakietów to identyfikatory, które są zwykle przypisywane do identyfikatorów pakietów od 0x02 do 0x7e włącznie. Za pomocą --allow-reserved-package-id, możesz przypisać identyfikatory, które spełniają wymagania w zakresie identyfikatorów zarezerwowanych pakietów.

Tej opcji należy używać tylko w przypadku pakietów z wersją min-sdk 26 lub mniej.

--java directory Określa katalog, w którym zostanie wygenerowany plik R.java.
--proguard proguard_options Generuje plik wyjściowy dla reguł ProGuard.
--proguard-conditional-keep-rules Generuje plik wyjściowy dla reguł ProGuard dla głównego DEX.
--no-auto-version Wyłącza automatyczną obsługę wersji pakietów SDK stylów i układów.
--no-version-vectors Wyłącza automatyczną obsługę wersji obiektów rysowanych wektorowych. Używaj tej flagi tylko w przypadku tworzenia plików APK z funkcją Vector Drawable. Biblioteka.
--no-version-transitions Wyłącza automatyczną obsługę wersji zasobów przejściowych. Używaj tej flagi tylko podczas tworzenia pakietu APK z biblioteką pomocy dotyczącej przenoszenia.
--no-resource-deduping Wyłącza automatyczne usuwanie duplikatów zasobów o identycznych wartościach w różnych miejscach zgodne konfiguracje.
--enable-sparse-encoding Włącza kodowanie wpisów rozproszonych za pomocą drzewa wyszukiwania binarnego. Jest to pomocne przy optymalizacji rozmiaru pliku APK, ale kosztem zasobów skuteczność pobierania.
-z Wymaga lokalizacji ciągów znaków oznaczonych jako „sugerowane”.
-c config Podaje rozdzielaną przecinkami listę konfiguracji.

Jeśli na przykład korzystasz z biblioteki pomocy, zawiera tłumaczenia na wiele języków, możesz filtrować zasoby tylko w przypadku danej konfiguracji języka, np. angielskiego lub hiszpańskiego.

Konfigurację języka należy zdefiniować za pomocą dwuliterowego kodu ISO 639-1. kod języka, opcjonalnie z dwuliterowym kodem ISO 3166-1-alpha-2 kodu regionu poprzedzonego małą literą „r”. Na przykład en-rUS.

--preferred-density density Pozwala AAPT2 wybrać najbliższą gęstość dopasowania i pasek niż pozostałe.

W aplikacji możesz użyć kilku kwalifikatorów gęstości pikseli: takich jak ldpi, hdpi i xhdpi. Gdy określisz preferowaną gęstość, AAPT2 wybiera i przechowuje w zasobie najbliższą gęstość dopasowania tabeli i usuwa wszystkie pozostałe.

--output-to-dir Powoduje przekazanie zawartości pliku APK do katalogu określonego przez właściwość -o.

Jeśli podczas korzystania z tej flagi pojawią się jakiekolwiek błędy, możesz je rozwiązać, przechodząc na wyższą wersję usługi do Android SDK Build Tools w wersji 28.0.0 lub wyższą.

--min-sdk-version min-sdk-version Określa domyślną minimalną wersję pakietu SDK, która ma być używana AndroidManifest.xml
--target-sdk-version target-sdk-version Ustawia domyślną docelową wersję pakietu SDK AndroidManifest.xml
--version-code version-code Określa kod wersji, która ma zostać wstrzyknięta AndroidManifest.xml, jeśli nie ma żadnej wartości.
--version-name version-name Określa nazwę wersji, która ma zostać wstrzyknięta AndroidManifest.xml, jeśli nie ma żadnej wartości.
--revision-code revision-code Określa kod wersji do wstrzykiwania AndroidManifest.xml, jeśli żaden nie jest dostępny.
--replace-version Jeśli --version-code, --version-name lub Podano --revision-code, te wartości zastępują dowolną wartość już w pliku manifestu. Domyślnie plik manifestu nic się nie zmieni, już ma zdefiniowane te atrybuty.
--compile-sdk-version-nacodeme compile-sdk-version-name Określa kod wersji, która ma zostać wstrzyknięta AndroidManifest.xml, jeśli żaden nie jest dostępny.
--compile-sdk-version-name compile-sdk-version-name Określa nazwę wersji, która ma zostać wstrzyknięta AndroidManifest.xml, jeśli żaden nie jest dostępny.
--proto-format Generuje skompilowane zasoby w formacie protokołu Protobuf.

Odpowiednie jako dane wejściowe dla bundletool za wygenerowanie pakietu Android App Bundle.

--non-final-ids Generuje R.java z nieostatecznymi identyfikatorami zasobów. Odniesienia do identyfikatory z kodu aplikacji nie są wstawiane w czasie kotlinc ani javac kompilację danych.
--emit-ids path Wysyła plik w podanej ścieżce z listą nazw typów zasobów oraz ich mapowania identyfikatorów. Odpowiednie do użytku z: --stable-ids.
--stable-ids outputfilename.ext Pobiera plik wygenerowany za pomocą funkcji --emit-ids, która zawiera lista nazw typów zasobów i ich przypisanych identyfikatorów.

Dzięki tej opcji przypisane identyfikatory pozostają niezmienne nawet po usunięciu lub dodać nowe zasoby podczas łączenia kont.

--custom-package package_name Określa niestandardowy pakiet Javy, w którym ma być generowany plik R.java.
--extra-packages package_name Generuje ten sam plik R.java, ale z innym pakietem nazw.
--add-javadoc-annotation annotation Dodaje adnotację JavaDoc do wszystkich wygenerowanych klas Java.
--output-text-symbols path Generuje plik tekstowy zawierający symbole zasobów klasy R w określonym pliku.

Musisz podać ścieżkę do pliku wyjściowego.

--auto-add-overlay Umożliwia dodawanie nowych zasobów do nakładek bez użycia funkcji <add-resource>.
--rename-manifest-package manifest-package Zmienia nazwę pakietu w pliku AndroidManifest.xml.
--rename-instrumentation-target-package instrumentation- target-package Zmienia nazwę pakietu docelowego dla instrumentation

Tej opcji należy używać w połączeniu z: --rename-manifest-package

-0 extension

Określa rozszerzenia plików, których nie chcesz kompresować.

--split path:config[,config[..]] Dzieli zasoby na podstawie zbioru konfiguracji w celu wygenerowania różnych wersji pliku APK.

Musisz podać ścieżkę do wyjściowego pliku APK wraz ze zbiorem konfiguracji.

--proguard-main-dex file Plik wyjściowy dla wygenerowanych reguł ProGuard dla głównego DEX.
--proguard-minimal-keep-rules Generuje minimalny zestaw reguł przechowywania ProGuard.
--no-resource-removal Wyłącza automatyczne usuwanie zasobów bez wartości domyślnych. Użyj tej opcji tylko podczas tworzenia pakietów nakładek zasobów środowiska wykonawczego.
-x Starsza flaga, która określa użycie identyfikatora pakietu 0x01.
--product products-list Określa rozdzielaną przecinkami listę nazw produktów do zachowania.
--no-xml-namespaces Usuwa prefiks przestrzeni nazw XML i informacje o identyfikatorze URI z AndroidManifest.xml plik i pliki binarne XML w res/*
--shared-lib Generuje udostępnianą bibliotekę środowiska wykonawczego Androida.
--static-lib Generuje statyczną bibliotekę Androida.
--no-static-lib-packages Scala wszystkie zasoby biblioteki z pakietu aplikacji.
--no-proguard-location-reference Uniemożliwia plikom reguł ProGuard odniesienie do pliku źródłowego.
--private-symbols package-name package-name określa nazwę pakietu, która ma być używana podczas generowania R.java dla symboli prywatnych. Jeśli nie określono inaczej, publiczny i symbole prywatne używają nazwy pakietu aplikacji.
--override-styles-instead-of-overlaying Powoduje, że style zdefiniowane w -R zasobach zastępują poprzednie definicje zamiast ich scalania.
--rename-resources-package package-name Zmienia nazwę pakietu w tabeli zasobów na package-name.
--no-compress Nie kompresuje żadnych zasobów.
--keep-raw-values Zachowuje nieprzetworzone wartości atrybutów w plikach XML.
--no-compress-regex regular-expression Nie kompresuje rozszerzeń pasujących do regular-expression. Koniec wiersza użyj symbolu $. Wykorzystuje z uwzględnieniem wielkości liter gramatyki wyrażenia regularnego ECMAScript.
--warn-manifest-validation Traktuje błędy weryfikacji pliku manifestu jako ostrzeżenia.
--exclude-configs qualifier[,qualifier[..]] Wyklucza wartości zasobów, których konfiguracje zawierają w kwalifikatorach.
--debug-mode Wstawia obiekt android:debuggable="true" do węzła aplikacji pliku manifestu, dzięki czemu aplikację można debugować nawet w środowisku produkcyjnym urządzenia.
--strict-visibility Nakładki o różnych poziomach widoczności są niedozwolone.
--exclude-sources Nie serializuje informacji o pliku źródłowym podczas generowania zasobów w Format protokołu Protobuf.
--trace-folder folder Generuje fragment logu czasu JSON systrace na określony folder.
--merge-only Scala tylko zasoby bez weryfikacji odwołań do zasobów. Ten flagi należy używać tylko z --static-lib flaga.
-h Wyświetla menu pomocy.
-v Włącza zwiększoną szczegółowość danych wyjściowych.

Zrzuć

dump służy do drukowania informacji o pliku APK wygenerowanym za pomocą link.

Składnia zrzutu

Ogólna składnia elementu dump jest taka:

aapt2 dump sub-command filename.apk [options]

Poniższy przykład pokazuje treść z tabeli zasobów określonego typu Plik APK:

aapt2 dump resources output.apk

Zrzuć podrzędne polecenia

Za pomocą polecenia dump określ jedno z tych poleceń podrzędnych:

Tabela 4. Zrzuć podrzędne polecenia

Polecenie podrzędneOpis
apc Wyświetla zawartość kontenera AAPT2 (APC) wygenerowaną podczas kompilację danych.
badging Wyświetla informacje wyodrębnione z pliku manifestu pakietu APK.
configurations Powoduje wydrukowanie każdej konfiguracji używanej przez zasób w pliku APK.
overlayable Drukuje nałożone zasoby pliku APK.
packagename Wyświetla nazwę pakietu APK.
permissions Wyświetla uprawnienia wyodrębnione z pliku manifestu pakietu APK.
strings Wyświetla zawartość puli ciągów tabel zasobów pliku APK.
styleparents Drukuje elementy nadrzędne stylów używanych w pliku APK.
resources Wyświetla zawartość tabeli zasobów pliku APK.
xmlstrings Drukuje ciągi znaków ze skompilowanego kodu XML pakietu APK.
xmltree Wyświetla drzewo skompilowanego kodu XML pakietu APK.

Opcje zrzutu

W połączeniu z usługą dump możesz używać tych opcji:

Tabela 5. Opcje zrzutu

OptionOpis
--no-values Pomija dane wyjściowe wartości podczas wyświetlania zasobu.
--file file Określa plik jako argument do pobrania z pakietu APK.
-v Zwiększa szczegółowość danych wyjściowych.

Różnice

Użyj narzędzia diff, aby porównać 2 pakiety APK i znaleźć różnice między nimi.

Składnia różnic

Ogólna składnia elementu diff jest taka:

aapt2 diff first.apk second.apk

Polecenie diff nie ma żadnych opcji.

Optymalizuj

optimize służy do uruchamiania optymalizacji scalonych zasobów oraz resources.arsc. Ta optymalizacja może zmniejszyć rozmiar pliku APK o około 1-3%, w zależności od w których używa się różnych zasobów.

Optymalizuj składnię

Ogólna składnia elementu optimize jest taka:

aapt2 optimize options file[,file[..]]

Poniższy przykład optymalizuje zasoby w input.apk i tworzy nowy, zoptymalizowany plik APK w aplikacji output.apk. Zastępuje ona zwykłą tabelę kartotekową z bardziej kompaktowym drzewem wyszukiwania binarnego, dzięki czemu plik APK na koszt pobierania danych:

aapt2 optimize -o output.apk --enable-sparse-encoding input.apk

Opcje optymalizacji

W połączeniu z usługą optimize możesz używać tych opcji:

Tabela 6. Opcje optymalizacji

OptionOpis
-o path Określa ścieżkę wyjściową pliku APK powiązanego zasobu.

Jest to wymagana flaga, ponieważ należy podać ścieżkę dla wyjściowy plik APK, który może zawierać połączone zasoby.

-d directory Określa ścieżkę do katalogu wyjściowego na potrzeby podziałów.
-x path Określa ścieżkę do pliku konfiguracji XML.
-p Wydrukuje artefakty z wielu plików APK i zamyka plik.
--target-densities density[,density[..]] Określa rozdzielaną przecinkami listę gęstości ekranu w pliku APK zoptymalizowane pod kątem tych celów. Wszystkie zasoby, które byłyby nieużywane na urządzeniach dane gęstości są usuwane z pakietu APK.
--resources-config-path path

Określa ścieżkę do pliku resources.cfg zawierającego listę zasobów i dyrektyw do każdego z nich.

Format: type/resource_name#[directive][,directive]

-c config[,config[..]] Określa rozdzieloną przecinkami listę konfiguracji do uwzględnienia. Domyślna wartość to wszystko konfiguracji.
--split path:config[,config[..]] Dzieli zasoby na podstawie zbioru konfiguracji w celu wygenerowania różnych wersji pliku APK.

Musisz podać ścieżkę do wyjściowego pliku APK wraz ze zbiorem konfiguracji.

--keep-artifacts artifact[,artifact[..]] Określa rozdzielaną przecinkami listę artefaktów do zachowania. Jeśli nie podasz żadnej wartości, wszystkie artefakty są zachowywane.
--enable-sparse-encoding Włącza kodowanie wpisów rozproszonych za pomocą drzewa wyszukiwania binarnego. Ta opcja jest przydatna do optymalizacji rozmiaru plików APK, ale kosztem wydajność pobierania zasobów.
--collapse-resource-names Zwija nazwy zasobów do jednej wartości w puli ciągów kluczy. Zasoby są wykluczone przy użyciu dyrektywy no_collapse w z pliku określonego przez zasadę --resources-config-path.
--shorten-resource-paths Skraca ścieżki zasobów w pliku APK.
--resource-path-shortening-map path Określa ścieżkę generującą mapę starych ścieżek zasobów na skrócone ścieżki.
-v Zwiększa szczegółowość danych wyjściowych.
-h Wyświetla pomoc dotyczącą narzędzia.

Pozyskiwanie

Domyślnie polecenie AAPT compile kompiluje zasoby do formatu binarnego która jest odpowiednia dla plików APK. Możesz też określić format protokołu. który jest odpowiedni dla pakietów aplikacji na Androida, określając --proto-format. convert konwertuje pliki APK między tymi dwoma formatami.

Konwertuj składnię

Ogólna składnia słowa convert jest taka:

aapt2 convert -o output-file options file[,file[..]]

Poniższy przykład pokazuje konwertowanie zasobów w input.apk i tworzy nowy, Plik APK w formacie output.apk zawierający zasoby formatu protobuf. Zastępuje ono standardowy tabela kartotekowa z bardziej zwartym drzewem wyszukiwania binarnego, w wyniku z mniejszym plikiem APK i kosztem wydajności pobierania:

aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk

Opcje konwersji

W połączeniu z usługą convert możesz używać tych opcji:

Tabela 7. Opcje konwersji

OptionOpis
-o path

Określa ścieżkę wyjściową pliku APK powiązanego zasobu.

Jest to wymagana flaga, ponieważ należy podać ścieżkę dla wyjściowy plik APK, który może zawierać połączone zasoby.

--output-format [proto|binary] Format danych wyjściowych. Akceptowane wartości to proto i binary Jeśli nie jest skonfigurowana, domyślna wartość to binary.
--enable-sparse-encoding Włącza kodowanie wpisów rozproszonych za pomocą drzewa wyszukiwania binarnego. Ta opcja jest przydatna do optymalizacji rozmiaru plików APK, ale kosztem wydajność pobierania zasobów.
--keep-raw-values Zachowuje nieprzetworzone wartości atrybutów w plikach XML.
-v Zwiększa szczegółowość danych wyjściowych.
-h Wyświetla pomoc dotyczącą narzędzia.

Tryb demona

W programie AAPT w wersji 2.19 wprowadzono tryb demona do wydawania poleceń. Tryb demona pozwala wpisujesz wiele poleceń w jednej sesji AAPT.

Składnia demonów

Uruchom tryb demona za pomocą tego polecenia:

aapt2 daemon

Gdy działa on w trybie demona, możesz wpisywać polecenia. Każdy argument funkcji musi znajdować się w osobnym wierszu z pustym wierszem na końcu. Wyjdź z trybu demona, naciskając Control+D.

Rozważ te indywidualne polecenia compile:

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/

Te polecenia można wprowadzić w trybie demona w ten sposób:

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

Opcje trybu demona

Jedyna opcja dla trybu demona to --trace-folder folder, który generuje plik JSON systrace fragment logu czasu do określonego folder.

Wersja

Za pomocą polecenia version określ wersję AAPT2, której używasz:

aapt2 version
Android Asset Packaging Tool (aapt) 2.19-8678579

Działanie zmienia się po użyciu AAPT2

Przed wprowadzeniem AAPT2 domyślną wersją narzędzia Android Asset Packaging Tool był AAPT. który został już wycofany. Chociaż AAPT2 powinna od razu działać z starszych projektów, w tej sekcji opisano niektóre zmiany w zachowaniu, które o których wiadomo.

Hierarchie elementów w pliku manifestu Androida

W poprzednich wersjach AAPT elementy zagnieżdżone w nieprawidłowych węzłach AndroidManifest.xml plik został zignorowany lub spowodował ostrzeżenie. Na przykład:

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

Poprzednie wersje AAPT ignorowały po prostu nieprawidłowo umieszczony tag <action>.

W przypadku protokołu AAPT2 pojawia się następujący błąd:

AndroidManifest.xml:15: error: unknown element <action> found.

Aby rozwiązać ten problem, sprawdź, czy elementy manifestu są prawidłowo zagnieżdżone. Aby dowiedzieć się więcej, przeczytaj Omówienie pliku manifestu aplikacji.

Deklaracja zasobów

Nie możesz już wskazywać typu zasobu za pomocą atrybutu name. Ten przykład nieprawidłowo deklaruje element zasobu attr:

<style name="childStyle" parent="parentStyle">
    <item name="attr/my_attr">@color/pink</item>
</style>

Ten sposób zadeklarowania typu zasobu powoduje następujący błąd kompilacji:

Error: style attribute 'attr/attr/my_attr (aka my.package:attr/attr/my_attr)'
not found.

Aby naprawić ten błąd, jawnie zadeklaruj typ za pomocą atrybutu type="attr":

<style name="childStyle" parent="parentStyle">
  <item type="attr" name="my_attr">@color/pink</item>
</style>

Poza tym przy deklarowaniu elementu <style> jego elementem nadrzędnym musi być również typu zasobu stylu. W przeciwnym razie pojawi się błąd podobny do tego:

Error: (...) invalid resource type 'attr' for parent of style

Nieprawidłowe użycie symboli odwołania do zasobu @

AAPT2 powoduje błędy kompilacji, gdy pominiesz lub nieprawidłowo umieścisz zasób symboli referencyjnych (@). Jeśli na przykład pominiesz ten symbol przy określając atrybut stylu:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  ...
  <!-- Note the missing '@' symbol when specifying the resource type. -->
  <item name="colorPrimary">color/colorPrimary</item>
</style>

Podczas tworzenia modułu AAPT2 zgłasza następujący błąd kompilacji:

ERROR: expected color but got (raw string) color/colorPrimary

Ponadto, jeśli błędnie dodasz symbol przy otwieraniu zasób z przestrzeni nazw android:

...
<!-- When referencing resources from the 'android' namespace, omit the '@' symbol. -->
<item name="@android:windowEnterAnimation"/>

Podczas tworzenia modułu AAPT2 zgłasza następujący błąd kompilacji:

Error: style attribute '@android:attr/windowEnterAnimation' not found

Nieprawidłowa konfiguracja bibliotek

Jeśli Twoja aplikacja zależy od biblioteki innej firmy, która została stworzona przy użyciu starszych wersji pakietów Android SDK Build Tools, aplikacja może ulec awarii w czasie działania bez wyświetlania żadnych błędów ani ostrzeżeń. Ta awaria może wystąpić, ponieważ podczas tworzenia biblioteki pola R.java są zadeklarował: final. W rezultacie wszystkie identyfikatory zasobów są w sekcji na zajęciach w bibliotece.

AAPT2 opiera się na możliwości ponownego przypisywania identyfikatorów do zasobów biblioteki podczas tworzenia do aplikacji. Jeśli biblioteka zakłada, że identyfikatory mają wartość final, i umieszcza je w elemencie pliku DEX biblioteki, występuje niezgodność środowiska wykonawczego.

Aby naprawić ten błąd, skontaktuj się z autorem biblioteki i odbuduj ją używając najnowszej wersji pakietu Android SDK Build Tools, i ponownie opublikuj kod bibliotece.