AAPT2

AAPT2 (Android Öğe Paketleme Aracı), Android Studio ve Android Gradle Eklentisi, uygulamanızın kaynaklar. AAPT2; Search Ads 360'taki kaynaklar için optimize edilmiş ikili bir biçimde derler ve Android platformu.

Android Gradle Eklentisi 3.0.0 ve sonraki sürümler AAPT2'yi varsayılan olarak etkinleştirir. Siz genellikle aapt2 öğesini kendiniz çağırmanız gerekmez. Ancak isterseniz terminalinizi ve kendi derleme sisteminizi kullanıyorsanız, AAPT2 yazın. AAPT2 ile ilgili derleme hatalarını da ayıklayabilirsiniz komutunu çalıştırın. Bunun için, Android SDK Derleme Araçları 26.0.2 ve sonraki sürümler.

Android SDK Build Tools'u komut satırından indirmek için şunu kullanın: sdkmanager adresine gidin ve aşağıdaki komutu çalıştırın:

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

SDK Derleme Araçları'nı indirdikten sonra AAPT2'yi android_sdk/build-tools/version/

Android SDK Derleme Araçları'nın düzeltmeleri yayınlanmadığı için genellikle SDK Derleme Araçlarınızda yer alan AAPT2 sürümü en son AAPT2'nin son sürümünü edinmek için Google Maven'den AAPT2 indirin.

Linux veya Mac'te AAPT2'yi komut satırından kullanmak için aapt2 komutunu çalıştırın. Windows'da aapt2.exe komutunu çalıştırın.

AAPT2, artan verimlilik sayesinde kaynakların daha hızlı derlenmesini destekler derlememiz var. Artımlı derleme yapmak için kaynak işleme iki adıma ayrılır:

  • Derle: Kaynak dosyalarını ikili biçimlerde derler.
  • Bağlantı: Derlenen tüm dosyaları birleştirir ve tek bir dosyada paketler paketinden yararlanın.

Bu ayırma, artımlı derlemelerin performansını iyileştirmeye yardımcı olur. Örneğin, tek bir dosyada değişiklikler varsa yalnızca o dosyayı yeniden derlemeniz gerekir.

Google Maven'den AAPT2 indir

AAPT2'nin derleme araçlarında bulunmayan en yeni sürümünü edinmek için AAPT2'yi Google'ın Maven deposundan aşağıdaki şekilde indirin:

  1. Depo dizininde şu konuma gidin: adresine com.android.tools.build > aapt2 olarak değiştirin.
  2. AAPT2'nin en son sürümünün adını kopyalayın.
  3. Kopyaladığınız sürüm adını aşağıdaki URL'ye ekleyin ve hedef işletim sistemi: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar

    Örneğin, Windows için 3.2.0-alpha18-4804415 sürümünü indirmek üzere şunu kullanın: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415pencereler.jar

  4. Bir tarayıcıda URL'ye gidin. AAPT2 kısa süre içinde indirilmeye başlayacak.

  5. Yeni indirdiğiniz JAR dosyasının paketini açın.

    JAR dosyası bir aapt2 yürütülebilir dosyası ve biraz da yürütülebilir.

Derle

AAPT2 tüm videoların derlenmesini destekler Örneğin, Android kaynak türleri çekilebilir ve XML dosyası oluşturabilir. Derleme için AAPT2'yi çağırdığınızda tek bir kaynak dosyası yükleyebilirsiniz. AAPT2, daha sonra dosyayı ayrıştırarak ve .flat uzantılı bir ara ikili dosya oluşturur.

AAPT2, dizinlerin tamamını iletirken dizindeki tüm dosyaları yeniden derler. tek bir kaynak değişse bile. Her ne kadar birden fazla kaynak dosyası içeren dizinleri --dir kullanarak AAPT2'ye bu şekilde artımlı kaynak derlemenin avantajlarından yararlanamazsınız.

Çıkış dosyası türleri, derleme için sağladığınız girişe bağlı olarak farklılık gösterebilir. aşağıdaki tabloda gösterildiği gibi):

Tablo 1. Giriş ve çıkış dosyası derleme türleri

Giriş Çıkış
Şunun gibi XML kaynak dosyaları: String ve Stil, res/values/ dizininde bulunuyor Uzantısı *.arsc.flat olan kaynak tablosu.
Diğer tüm kaynak dosyaları.

res/values/ dizini altındaki dosyalar dışındaki tüm dosyalar *.flat uzantılı ikili XML dosyalarına dönüştürülmüştür.

Ayrıca, tüm PNG dosyaları varsayılan olarak sıkıştırılır ve *.png.flat uzantılarını kullanır. PNG'leri sıkıştırmamayı seçerseniz Derleme sırasında --no-crunch seçeneği.

AAPT2 çıkışları yürütülebilir dosyalar değildir ve daha sonra şunları eklemeniz gerekir: ikili program dosyalarını bağlantı aşamasında girdi olarak kullanır. Ancak oluşturulan APK dosyası, Android cihazlara dağıtabileceğiniz yürütülebilir bir dosya değil hemen kullanabilirsiniz, çünkü DEX dosyaları içermez ve imzalanmadı.

Söz dizimini derle

compile kullanımına ilişkin genel söz dizimi aşağıdaki gibidir:

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

Aşağıdaki örnekte AAPT2, values.xml ve Tek tek myImage.png:

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/

1. tabloda gösterildiği gibi, çıkış dosyasının adı girişe bağlıdır dosya adı ve üst dizininin adı.

Giriş olarak strings.xml dosyasının kullanıldığı önceki örnek için aapt2 otomatik olarak çıkış dosyasını values-en_strings.arsc.flat olarak adlandırır. Ancak derlenen çekilebilir dizinde saklanan çekilebilir dosyanın adı drawable_img.png.flat'dir.

Derleme seçenekleri

Aşağıda gösterildiği gibi, compile komutuyla kullanabileceğiniz birkaç seçenek bulunmaktadır. (tablo 2'de):

Tablo 2. Komut seçeneklerini derle

Option Açıklama
-o path

Derlenen kaynakların çıkış yolunu belirtir.

Bu bir gerekli işarettir, çünkü AAPT2'nin derlenen kaynakları çıktısı ve depolayabileceği dizindir.

--dir directory

Kaynakların taranacak dizini belirtir.

Bu işareti birden fazla kaynak dosyasını derlemek için kullanabilirsiniz. ekler, artımlı derlemenin avantajlarını devre dışı bırakır. Bu nedenle, bu işaret büyük projeler için kullanılmamalıdır.

--pseudo-localize pseudolocalized oluşturur en-XA ve en-XB gibi varsayılan dizelerin sürümleri.
--no-crunch PNG işlemeyi devre dışı bırakır.

PNG dosyalarını zaten işlediyseniz veya dosya boyutunu küçültmeyen hata ayıklama derlemeleri oluşturuyor. Bu seçeneğin etkinleştirilmesi yürütme hızını artırır ancak çıktıyı artırır dosya boyutu.

--legacy AAPT'nin önceki sürümleri kullanıldığında izin verilen hataları giderir: uyarılar.

Bu işaret, beklenmeyen derleme zamanı hataları için kullanılmalıdır. Sorunu çözmek için AAPT2 kullanırken meydana gelebilecek bilinen davranış değişiklikleri, AAPT2 kullanılırken davranış değişir.

-zip file file, taranacak res dizinini içeren bir ZIP dosyasıdır kaynaklar.
-output-text-symbols file Belirtilen file ekleyin.
-preserve-visibility-of-styleables Belirtilirse diğer tüm kaynaklar için kullanılır. Aksi takdirde, stil özellikleri herkese açık hale getirilir.
-visibility [public|private|default|] Derlenen kaynakların görünürlüğünü belirtilen düzeye ayarlar.
-trace-folder folder Belirtilen klasör için bir systrace JSON iz parçası oluşturur.
-source-path path Derlenen kaynak dosyasının kaynak dosyası yolunu path olarak ayarlar.
-h Araç yardımını görüntüler.
-v Ayrıntılı günlük kaydını etkinleştirir.

Bağlantı aşamasında, AAPT2 derlemenin oluşturduğunuz tüm ara dosyaları aşamasında (kaynak tablolar, ikili XML dosyaları ve işlenmiş PNG gibi) ve ardından dosyaları tek bir APK halinde paketler. Ayrıca, R.java ve ProGuard kural dosyaları gibi yardımcı dosyalar oluşturulabilir destekleyici materyalleri inceleyeceksiniz. Ancak oluşturulan APK DEX bayt kodunu içermiyor ve imzasız. Bu APK'yı bir cihaza dağıtamazsınız.

Şu işlemler için Android Gradle eklentisini kullanmıyorsanız: uygulamanızı komut satırından derlerseniz, derlemek için d8 gibi diğer komut satırı araçlarını kullanın Java bayt kodunu DEX bayt koduna ve apksigner’a dönüştürme kullanın.

link kullanımına ilişkin genel söz dizimi aşağıdaki gibidir:

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

Aşağıdaki örnekte AAPT2 iki ara dosyayı birleştirir: drawable_Image.flat ve values_values.arsc.flat ve AndroidManifest.xml dosyası. AAPT2, sonucu android.jar ile bağlar dosyasını içeren bir dosyayı yükleyin: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

link komutuyla aşağıdaki seçenekleri kullanabilirsiniz:

Tablo 3. Bağlantı komutu seçenekleri

Option Açıklama
-o path

Bağlı kaynak APK'sının çıkış yolunu belirtir.

Bu işaret zorunlu bir işarettir çünkü öğenin yolunu belirtmeniz gerekir. bağlı kaynakları barındırabilen çıkış APK'sı oluşturun.

--manifest file

Derlenecek Android manifest dosyasının yolunu belirtir.

Bu gerekli işarettir, çünkü manifest dosyası Uygulamanızla ilgili önemli bilgiler (ör. paket adı ve uygulama) Kimlik.

-I

Platformun android.jar veya diğer APK'ların yolunu sağlar. Örneğin: framework-res.apk, bu da özellikleri.

Şu özelliklere sahip özellikler kullanıyorsanız bu işaret gereklidir: Kaynak dosyalarınızda android ad alanı bulunması.
-A directory APK'ya dahil edilecek öğeler dizinini belirtir.

Orijinal, işlenmemiş dosyaları depolamak için bu dizini kullanabilirsiniz. Alıcı: daha fazla bilgi, oku Orijinal dosyalara erişme.

-R file overlay semantiğini kullanarak tek bir .flat dosyasını link hedefine iletir <add-resource> etiketini kullanmadan elde edilir.

Mevcut bir dosyanın üzerine yer paylaşımlı bir kaynak dosyası sağladığınızda belirtilen en son çakışan kaynak kullanılıyor.

--package-id package-id Uygulamanız için kullanılacak paket kimliğini belirtir.

Belirttiğiniz paket kimliği 0x7f'den büyük veya 0x7f'ye eşit olmalıdır --allow-reserved-package-id

--allow-reserved-package-id

Ayrılmış paket kimliğinin kullanımına izin verir.

Ayrılmış paket kimlikleri, normalde paylaşılan kütüphaneler ve 0x02 ile 0x7e (bu değerler dahil) aralığındadır. Şunu kullanarak: --allow-reserved-package-id kullanıyorsanız aralığında olmalıdır.

Bu seçenek yalnızcamin-sdk 26 veya daha düşük.

--java directory R.java öğesinin oluşturulacağı dizini belirtir.
--proguard proguard_options ProGuard kuralları için çıkış dosyasını oluşturur.
--proguard-conditional-keep-rules Ana DEX için ProGuard kuralları için çıkış dosyasını oluşturur.
--no-auto-version Otomatik stil ve düzen SDK sürümü oluşturmayı devre dışı bırakır.
--no-version-vectors Vektör çekilebilirlerinin otomatik olarak sürüm oluşturmayı devre dışı bırakır. Bu işareti yalnızca APK'nızı Vector Drawable ile oluştururken kullanın Kitaplık'a dokunun.
--no-version-transitions Geçiş kaynakları için otomatik sürüm oluşturmayı devre dışı bırakır. Bu işareti yalnızca APK'nızı Geçiş Desteği kitaplığıyla oluştururken kullanın.
--no-resource-deduping Tüm platformlarda aynı değerlere sahip kaynakların otomatik olarak tekilleştirilmesini devre dışı bırakır. uyumlu yapılandırmalar kullanabilirsiniz.
--enable-sparse-encoding İkili arama ağacı kullanarak seyrek girişlerin kodlanmasını etkinleştirir. Bu, kaynak maliyeti dışında APK boyutunun optimizasyonu için yararlıdır getirme performansı sunar.
-z "Önerilen" olarak işaretlenen dizelerin yerelleştirilmesini gerektirir.
-c config Yapılandırmaların virgülle ayrılmış bir listesini sağlar.

Örneğin, destek kitaplığında bağımlılarınız varsa birden fazla dile ait çeviriler içeriyorsa kaynakları filtreleyebilirsiniz İngilizce veya İspanyolca gibi belirli bir dil yapılandırması için uygulanabilir.

Dil yapılandırmasını iki harfli ISO 639-1 ile tanımlamanız gerekir dil kodu (isteğe bağlı olarak iki harfli ISO 3166-1-alpha-2) bölge kodundan önce küçük "r" gelir. Örneğin, en-rUS.

--preferred-density density AAPT2'nin en yakın eşleşen yoğunluğu ve şeridi seçmesine izin verir yardımcı oluyorum.

Uygulamanızda kullanabileceğiniz çeşitli piksel yoğunluğu niteleyicileri vardır. ldpi, hdpi ve xhdpi gibi. Tercih edilen bir yoğunluk belirttiğinizde AAPT2, kaynakta en yakın eşleşen yoğunluğu seçer ve depolar tablosunu oluşturur ve diğer tüm tabloları kaldırır.

--output-to-dir APK içeriğini -o tarafından belirtilen bir dizine verir.

Bu işareti kullanırken hata alırsanız sorunları yeni sürüme geçirerek çözebilirsiniz Android SDK Derleme Araçları 28.0.0 veya daha yüksek.

--min-sdk-version min-sdk-version Şunun için kullanılacak varsayılan minimum SDK sürümünü belirler: AndroidManifest.xml
--target-sdk-version target-sdk-version Şunun için kullanılacak varsayılan hedef SDK sürümünü belirler: AndroidManifest.xml
--version-code version-code Yerleştirilecek sürüm kodunu belirtir Yoksa AndroidManifest.xml.
--version-name version-name Eklenecek sürüm adını belirtir Yoksa AndroidManifest.xml.
--revision-code revision-code Yerleştirilecek düzeltme kodunu belirtir Yoksa AndroidManifest.xml dosyası.
--replace-version --version-code, --version-name veya --revision-code belirtilmişse bu değerler herhangi bir değerin yerini alır zaten manifest dosyasında mevcuttur. Varsayılan olarak, manifest dosyası bu özellikleri tanımlar.
--compile-sdk-version-nacodeme compile-sdk-version-name Yerleştirilecek sürüm kodunu belirtir Yoksa AndroidManifest.xml dosyası.
--compile-sdk-version-name compile-sdk-version-name Eklenecek sürüm adını belirtir Yoksa AndroidManifest.xml dosyası.
--proto-format Protobuf biçiminde derlenmiş kaynaklar oluşturur.

bundletool .

--non-final-ids Nihai olmayan kaynak kimlikleriyle R.java oluşturur. Referanslar uygulamanın kodundaki kimlikler kotlinc veya javac sırasında satır içine alınmıyor derlememiz var.
--emit-ids path Belirtilen yoldaki bir dosyayı kaynak türlerinin adlarını ve daha iyi anlarsınız. --stable-ids ile kullanılmaya uygundur.
--stable-ids outputfilename.ext --emit-ids ile oluşturulan ve Kaynak türü adlarının ve atanan kimliklerinin listesi.

Bu seçenek, şunu silseniz bile atanan kimliklerin sabit kalmasını sağlar: veya bağlantı oluştururken yeni kaynaklar ekleyin.

--custom-package package_name Altında R.java oluşturulacak özel Java paketini belirtir.
--extra-packages package_name Aynı R.java dosyasını, farklı bir paketle oluşturur gösterir.
--add-javadoc-annotation annotation Oluşturulan tüm Java sınıflarına bir JavaDoc ek açıklaması ekler.
--output-text-symbols path R sınıfının kaynak simgelerini içeren bir metin dosyası oluşturur belirtilen dosyada.

Çıkış dosyasının yolunu belirtmeniz gerekir.

--auto-add-overlay <add-resource> etiketi.
--rename-manifest-package manifest-package AndroidManifest.xml dosyasındaki paketi yeniden adlandırır.
--rename-instrumentation-target-package instrumentation- target-package Şu öğe için hedef paketin adını değiştirir: instrumentation değerleridir.

Bu seçenek, --rename-manifest-package

-0 extension

Sıkıştırmak istemediğiniz dosyaların uzantılarını belirtir.

--split path:config[,config[..]] Farklı bir yapılandırma grubu oluşturmak için kaynakları bir yapılandırma grubuna göre böler. APK'nın sürümü.

Çıkış APK'sının yolunu yapılandırmanın üç yolu vardır.

--proguard-main-dex file Ana DEX için oluşturulan ProGuard kurallarının çıkış dosyası.
--proguard-minimal-keep-rules Minimal bir ProGuard saklama kuralı grubu oluşturur.
--no-resource-removal Kaynakların varsayılan olmadan otomatik olarak kaldırılmasını devre dışı bırakır. Bu seçeneği kullanın yalnızca çalışma zamanı kaynak yer paylaşımı paketleri oluştururken geçerlidir.
-x 0x01 paket tanımlayıcısının kullanımını belirten eski işaret.
--product products-list Korunacak ürün adlarının virgülle ayrılmış bir listesini belirtir.
--no-xml-namespaces XML ad alanı önekini ve URI bilgilerini şuradan kaldırır: AndroidManifest.xml dosyası ve XML ikili programları res/*.
--shared-lib Paylaşılan bir Android çalışma zamanı kitaplığı oluşturur.
--static-lib Statik bir Android kitaplığı oluşturur.
--no-static-lib-packages Tüm kitaplık kaynaklarını uygulamanın paketi altında birleştirir.
--no-proguard-location-reference ProGuard kural dosyalarının kaynak dosyaya referans içermesini önler.
--private-symbols package-name package-name, oluşturulurken kullanılacak paket adını belirtir Özel simgeler için R.java. Belirtilmezse herkese açık ve özel semboller uygulamanın paket adını kullanır.
--override-styles-instead-of-overlaying -R kaynakta tanımlanan stillerin önceki tanımların yerini almasına neden olur değerlendirebilirsiniz.
--rename-resources-package package-name Kaynaklar tablosundaki paketi package-name olarak yeniden adlandırır.
--no-compress Hiçbir kaynağı sıkıştırmaz.
--keep-raw-values XML dosyalarındaki ham özellik değerlerini korur.
--no-compress-regex regular-expression regular-expression ile eşleşen uzantıları sıkıştırmaz. Satır sonu için $ simgesini kullanın. Şunu kullanır: büyük/küçük harfe duyarlı ECMAScript normal ifade dil bilgisi.
--warn-manifest-validation Manifest doğrulama hatalarını uyarı olarak değerlendirir.
--exclude-configs qualifier[,qualifier[..]] Yapılandırmaları belirtilen değeri içeren kaynakların değerlerini hariç tutar niteleyicileri ele alalım.
--debug-mode Uygulama düğümüne android:debuggable="true" ekler uygulamanın üretim aşamasında bile hata ayıklaması yapılabilir. cihazlar.
--strict-visibility Farklı görünürlük seviyelerine sahip yer paylaşımlarına izin verilmez.
--exclude-sources Şurada kaynak oluştururken kaynak dosya bilgilerini serileştirmez: Protobuf biçimindedir.
--trace-folder folder Belirtilen folder için systrace JSON iz parçası oluşturur.
--merge-only Kaynak referanslarını doğrulamadan yalnızca kaynakları birleştirir. Bu bayrak yalnızca --static-lib ile birlikte kullanılmalıdır tıklayın.
-h Yardım menüsünü görüntüler.
-v Çıkışın ayrıntı düzeyini artırır.

Döküm

dump, link komutudur.

Döküm söz dizimi

dump kullanımına ilişkin genel söz dizimi aşağıdaki gibidir:

aapt2 dump sub-command filename.apk [options]

Aşağıdaki örnekte, APK:

aapt2 dump resources output.apk

Alt komutların dökümünü al

dump komutuyla aşağıdaki alt komutlardan birini belirtin:

Tablo 4. Alt komutların dökümünü al

Alt komutAçıklama
apc sırasında oluşturulan AAPT2 kapsayıcısının (APC) içeriğini yazdırır derlememiz var.
badging APK'nın manifest dosyasından çıkarılan bilgileri yazdırır.
configurations APK'daki bir kaynak tarafından kullanılan her yapılandırmayı yazdırır.
overlayable APK'nın yer paylaşımlı kaynaklarını yazdırır.
packagename APK'nın paket adını yazdırır.
permissions APK'nın manifest dosyasından çıkarılan izinleri yazdırır.
strings APK'nın kaynak tablo dizesi havuzunun içeriğini yazdırır.
styleparents APK'da kullanılan stillerin üst öğelerini yazdırır.
resources APK'nın kaynak tablosunun içeriğini yazdırır.
xmlstrings Dizeleri, APK'nın derlenmiş XML'sinden yazdırır.
xmltree APK'nın derlenmiş XML ağacının bir ağacını yazdırır.

Döküm seçenekleri

dump ile aşağıdaki seçenekleri kullanın:

Tablo 5. Döküm seçenekleri

OptionAçıklama
--no-values Kaynak gösterilirken değerlerin çıkışını engeller.
--file file Bir dosyayı, APK'dan döküm alınacak bağımsız değişken olarak belirtir.
-v Çıkışın ayrıntı düzeyini artırır.

Fark

İki APK'yı karşılaştırmak ve aralarındaki farkları belirlemek için diff uygulamasını kullanın.

Fark söz dizimi

diff kullanımına ilişkin genel söz dizimi aşağıdaki gibidir:

aapt2 diff first.apk second.apk

diff komutu için seçenek yoktur.

Optimizasyon yapın

optimize, birleştirilmiş kaynaklarda optimizasyonları çalıştırmak için kullanılır ve resources.arsc APK'ya paketlenmeden önce. Bu optimizasyon boyutu ve sayısına bağlı olarak APK boyutunu yaklaşık %1-3 oranında azaltabilir. için iyi bir fırsattır.

Söz dizimini optimize et

optimize kullanımına ilişkin genel söz dizimi aşağıdaki gibidir:

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

Aşağıdaki örnek, input.apk kaynağındaki kaynakları optimize eder ve yeni bir, output.apk içinde optimize edilmiş APK. Normal düz tablo temsilinin yerini alır daha küçük bir ikili arama ağacı sunar. Böylece alma performansı maliyeti:

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

Optimizasyon seçenekleri

optimize ile aşağıdaki seçenekleri kullanabilirsiniz:

Tablo 6. Optimizasyon seçenekleri

OptionAçıklama
-o path Bağlı kaynak APK'sının çıkış yolunu belirtir.

Bu işaret zorunlu bir işarettir çünkü öğenin yolunu belirtmeniz gerekir. bağlı kaynakları barındırabilen çıkış APK'sı oluşturun.

-d directory Bölmeler için çıkış dizini yolunu belirtir.
-x path XML yapılandırma dosyasının yolunu belirtir.
-p Çoklu APK yapılarını yazdırır ve çıkar.
--target-densities density[,density[..]] APK'nın kullandığı ekran yoğunluklarının virgülle ayrılmış listesini belirtir optimize edilir. Şu cihazlarda kullanılmayan tüm kaynaklar: belirtilen yoğunluklar APK'dan kaldırılır.
--resources-config-path path

Şu öğenin listesini içeren resources.cfg dosyasının yolunu belirtir: için gerekli tüm kaynakları ve yönergeleri içerir.

Biçim: type/resource_name#[directive][,directive]

-c config[,config[..]] Dahil edilecek yapılandırmaların virgülle ayrılmış listesini belirtir. Varsayılan tüm yapılandırmanın üç yolu vardır.
--split path:config[,config[..]] Farklı bir yapılandırma grubu oluşturmak için kaynakları bir yapılandırma grubuna göre böler. APK'nın sürümü.

Çıkış APK'sının yolunu yapılandırmanın üç yolu vardır.

--keep-artifacts artifact[,artifact[..]] Saklanacak yapıların virgülle ayrılmış listesini belirtir. Herhangi bir değer belirtilmezse saklanır.
--enable-sparse-encoding İkili arama ağacı kullanarak seyrek girişlerin kodlanmasını etkinleştirir. Bu seçenek, APK boyutunun optimizasyonu açısından yararlıdır ancak performansı gösterir.
--collapse-resource-names Kaynak adlarını, anahtar dizesi havuzunda tek bir değer olacak şekilde daraltır. Kaynaklar, no_collapse yönergesi kullanılarak muaf tutulur: --resources-config-path tarafından belirtilen bir dosya.
--shorten-resource-paths APK içindeki kaynakların yollarını kısaltır.
--resource-path-shortening-map path Eski kaynak yollarının kısaltılmış yollara ait haritasının çıkış yolunu belirtir.
-v Çıkışın ayrıntı düzeyini artırır.
-h Araç yardımını görüntüler.

İzleyicileri üyelere dönüştürün

AAPT compile komutu, varsayılan olarak kaynakları ikili biçimde derler bir uygulamadır. Protobuf biçimi de belirtilebilir --proto-format belirterek AAB'lere uygun olan bir metin girin. convert komutu, iki biçim arasında APK'ları dönüştürür.

Söz dizimini dönüştür

convert için genel söz dizimi aşağıdaki gibidir:

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

Aşağıdaki örnek, input.apk kaynağındaki kaynakları dönüştürür ve yeni bir, output.apk sürümündeki APK, protobuf biçimindeki kaynaklar içeriyor. Her zamankinin yerini alıyor daha küçük boyutlu bir ikili arama ağacıyla düz tablo gösterimi alma performansı pahasına daha küçük bir APK'da kullanılır:

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

Dönüştürme Seçenekleri

convert ile aşağıdaki seçenekleri kullanın:

Tablo 7. Dönüştürme seçenekleri

OptionAçıklama
-o path

Bağlı kaynak APK'sının çıkış yolunu belirtir.

Bu işaret zorunlu bir işarettir çünkü öğenin yolunu belirtmeniz gerekir. bağlı kaynakları barındırabilen çıkış APK'sı oluşturun.

--output-format [proto|binary] Çıktının biçimi. Kabul edilen değerler: proto ve binary. Ayarlanmazsa varsayılan olarak binary olur.
--enable-sparse-encoding İkili arama ağacı kullanarak seyrek girişlerin kodlanmasını etkinleştirir. Bu seçenek, APK boyutunun optimizasyonu açısından yararlıdır ancak performansı gösterir.
--keep-raw-values XML dosyalarındaki ham özellik değerlerini korur.
-v Çıkışın ayrıntı düzeyini artırır.
-h Araç yardımını görüntüler.

Arka plan programı modu

AAPT sürüm 2.19'da, komut vermek için arka plan programı modu kullanıma sunulmuştur. Arka plan programı modu, tek bir AAPT oturumunda birden fazla komut girersiniz.

Arka plan programı söz dizimi

Aşağıdaki komutla arka plan programı modunu başlatın:

aapt2 daemon

Arka plan programı modu çalışmaya başladıktan sonra komut girebilirsiniz. komutu, ayrı bir satırda olmalı ve komutun sonunda boş bir satır içermelidir. Control+D tuşlarına basarak arka plan programı modundan çıkın.

Aşağıdaki compile komutlarını ayrı ayrı kullanabilirsiniz:

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/

Bu komutlar arka plan programı modunda şu şekilde girilebilir:

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

Arka plan programı modu seçenekleri

Arka plan programı modu için tek seçenek systrace JSON oluşturan --trace-folder folder iz parçası, belirtilen folder ile aynı olmalıdır.

Sürüm

version komutuyla kullandığınız AAPT2 sürümünü belirleyin:

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

AAPT2 kullanılırken davranış değişir

AAPT2'den önce Android Öğe Paketleme Aracı'nın varsayılan sürümü AAPT idi. Bu özellik artık kullanımdan kaldırıldı. AAPT2 her ne kadar bu bölümde, yapmanız gereken bazı davranış değişiklikleri bilgi sahibidir.

Android manifestindeki öğe hiyerarşileri

AAPT'nin önceki sürümlerinde, AndroidManifest.xml dosya yoksayıldı veya uyarı aldı. Örneğin, aşağıdaki örneği ele alalım:

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

AAPT'nin önceki sürümleri, yanlış yerleştirilmiş <action> etiketini yoksayar.

AAPT2 ile aşağıdaki hatayı alırsınız:

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

Sorunu çözmek için manifest öğelerinizin doğru şekilde iç içe yerleştirilmiş olduğundan emin olun. Daha fazla bilgi için Uygulama manifestine genel bakış.

Kaynak beyanı

Artık name özelliğinden kaynak türünü belirtemezsiniz. Aşağıdaki örnekte bir attr kaynak öğesi yanlış bir şekilde tanımlanıyor:

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

Bu şekilde bir kaynak türünün tanımlanması, aşağıdaki derleme hatasıyla sonuçlanır:

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

Bu hatayı düzeltmek için type="attr" kullanarak türü açıkça bildirin:

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

Ayrıca, bir <style> öğesi belirtilirken üst öğesi de bir olmalıdır. stil kaynak türü. Aksi takdirde, aşağıdakine benzer bir hata alırsınız:

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

@ kaynak referans simgelerinin yanlış kullanımı

Kaynağı atladığınızda veya yanlış yerleştirdiğinizde AAPT2 yapı hataları bildirir referans sembolleri (@). Örneğin, bir stil özelliği belirterek:

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

Modülü oluştururken AAPT2 aşağıdaki derleme hatasını verir:

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

Ayrıca, bir android ad alanındaki kaynak:

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

Modülü oluştururken AAPT2 aşağıdaki derleme hatasını verir:

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

Kitaplıkların yanlış yapılandırılması

Uygulamanızın, eski dosya adıyla oluşturulmuş üçüncü taraf kitaplığına bağımlılığı varsa Android SDK Derleme Araçları'nın diğer sürümlerini kullanıyorsanız, uygulama çalışma zamanında herhangi bir hata veya uyarı görüntülemeden kilitlenebilir. Bu kilitlenme kitaplığın oluşturulması sırasında R.java alanlarının şunu açıkladı: final. Sonuç olarak, tüm kaynak kimlikleri derslere katılmıştım.

AAPT2, oluşturma sırasında kimlikleri kitaplık kaynaklarına yeniden atayabilmeye dayanır en iyi şekilde yararlanabilirsiniz. Kitaplık, kimliklerin final olduğunu varsayar ve bunları bir çalışma zamanı uyuşmazlığı vardır.

Bu hatayı gidermek için kitaplığın yazarıyla iletişime geçerek kitaplığı yeniden oluşturun sürümünü kullanarak Android SDK Derleme Araçları'nın en son sürümünü kullanmalı ve kitaplığını açar.