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:
- W indeksie repozytorium przejdź do obszaru do com.android.tools.build > aapt2.
- Skopiuj nazwę najnowszej wersji AAPT2.
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
Otwórz adres URL w przeglądarce. Pobieranie pliku AAPT2 wkrótce się rozpocznie.
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ą:
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
Poza tym wszystkie pliki PNG są domyślnie zniekształcane i stosują rozszerzenia |
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:
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
|
-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 |
-source-path path
|
Ustawia ścieżkę pliku źródłowego skompilowanego pliku zasobów na |
-h
|
Wyświetla pomoc dotyczącą narzędzi. |
-v
|
Włącza logowanie szczegółowe. |
Link
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.
Składnia linku
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
Opcje połączenia
W poleceniu link
możesz używać tych opcji:
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 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
|
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ą
Tej opcji należy używać tylko w przypadku pakietów z wersją |
--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
|
--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:
|
-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:
Polecenie podrzędne | Opis |
---|---|
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:
Option | Opis |
---|---|
--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:
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. |
-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 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:
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. |
--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.