AAPT2 (Android Öğe Paketleme Aracı), Android Studio ve Android Gradle Eklentisi'nin uygulamanızın kaynaklarını derlemek ve paketlemek için kullandığı bir derleme aracıdır. AAPT2, kaynakları Android platformu için optimize edilmiş bir ikili biçimde ayrıştırır, dizine ekler ve derler.
Android Gradle Plugin 3.0.0 ve sonraki sürümler AAPT2'yi varsayılan olarak etkinleştirir. Genellikle aapt2
yöntemini sizin çağırmanız gerekmez. Bununla birlikte, Android Studio yerine terminalinizi ve kendi derleme sisteminizi kullanmayı tercih ederseniz komut satırından AAPT2'yi kullanabilirsiniz. Ayrıca, AAPT2 ile ilgili derleme hatalarını komut satırından ayıklayabilirsiniz. Bunun için AAPT2'yi, Android SDK Derleme Araçları 26.0.2 ve sonraki sürümlerinde bağımsız bir araç olarak bulun.
Komut satırından Android SDK Derleme Araçları'nı indirmek için sdkmanager
aracını kullanın ve aşağıdaki komutu çalıştırın:
sdkmanager "build-tools;build-tools-version"
SDK Derleme Araçları'nı indirdikten sonra android_sdk/build-tools/version/
konumunda AAPT2'yi bulun.
Android SDK Derleme Araçlarının düzeltmeleri sık sık yayınlanmadığından SDK Derleme Araçlarınıza dahil olan AAPT2 sürümü en yeni sürüm olmayabilir. AAPT2'nin en son sürümünü edinmek için Google Maven'den AAPT2'yi indirin.
Linux veya Mac'te komut satırından AAPT2'yi kullanmak için aapt2
komutunu çalıştırın.
Windows'da aapt2.exe
komutunu çalıştırın.
AAPT2, artımlı derlemeye olanak tanıyarak kaynakların daha hızlı derlenmesini destekler. Kaynak işleme, artımlı derlemeyi gerçekleştirmek için iki adıma ayrılır:
- Derle: Kaynak dosyaları ikili biçimlerde derler.
- Bağlantı: Derlenen tüm dosyaları birleştirir ve tek bir pakette paketler.
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'yi indirin
Derleme araçlarında paketlenmeyen en yeni AAPT2 sürümünü edinmek için Google'ın Maven deposundan aşağıdaki şekilde AAPT2'yi indirin:
- Depo dizininde com.android.tools.build > aapt2 bölümüne gidin.
- AAPT2'nin en son sürümünün adını kopyalayın.
Kopyaladığınız sürüm adını aşağıdaki URL'ye ekleyip hedef işletim sisteminizi belirtin: 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 için şu adresi kullanın: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18-4804415/aapt2-3.2.580-alpha18-jar
Bir tarayıcıda URL'ye gidin. AAPT2 kısa süre içinde indirilmeye başlayacak.
Az önce indirdiğiniz JAR dosyasının paketini açın.
JAR dosyası, yürütülebilir
aapt2
dosyası ve yürütülebilir dosyanın bağlı olduğu bazı kitaplıklar içermelidir.
Derle
AAPT2, çizimler ve XML dosyaları gibi tüm Android kaynak türlerinin derlenmesini destekler. Derleme için AAPT2'yi çağırdığınızda, her çağrı için giriş olarak tek bir kaynak dosyası iletin. AAPT2 daha sonra dosyayı ayrıştırır ve .flat
uzantısına sahip ara bir ikili dosya oluşturur.
AAPT2, dizinlerin tamamını geçirirken yalnızca tek bir kaynak değişmiş olsa bile dizindeki tüm dosyaları yeniden derler. --dir
işaretini kullanarak birden fazla kaynak dosyası içeren kaynak dizinlerini AAPT2'ye iletebilirsiniz. Ancak bu şekilde, artımlı kaynak derlemenin avantajlarından yararlanamazsınız.
Çıkış dosyası türleri, aşağıdaki tabloda gösterildiği gibi, derleme için sağladığınız girdilere göre farklılık gösterebilir:
Giriş | Çıkış |
---|---|
res/values/ dizininde yer alan String ve Style gibi XML kaynak dosyaları
|
Uzantısı *.arsc.flat olan kaynak tablosu.
|
Diğer tüm kaynak dosyalar. |
Ayrıca, tüm PNG dosyaları varsayılan olarak sıkıştırılır ve |
AAPT2 çıkışları yürütülebilir dosyalar değildir ve daha sonra, APK oluşturmak için bu ikili dosyaları bağlantı aşamasında giriş olarak eklemeniz gerekir. Ancak, oluşturulan APK dosyası DEX dosyası içermediği ve imzalanmadığı için hemen bir Android cihaza dağıtabileceğiniz yürütülebilir bir dosya değildir.
Söz dizimi derleme
compile
kullanımı için genel söz dizimi şöyledir:
aapt2 compile path-to-input-files [options] -o output-directory/
Aşağıdaki örnekte AAPT2, values.xml
ve myImage.png
adlı kaynak dosyalarını ayrı ayrı derler:
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/
Tablo 1'de gösterildiği gibi, çıkış dosyasının adı, girilen dosya adına ve üst dizininin adına bağlıdır.
Giriş olarak strings.xml
dosyasının bulunduğu önceki örnekte aapt2
, çıkış dosyasını otomatik olarak values-en_strings.arsc.flat
şeklinde adlandırır. Ancak, çekilebilir dizinde saklanan derlenmiş çekilebilir dosyanın adı drawable_img.png.flat
şeklindedir.
Derleme seçenekleri
Tablo 2'de gösterildiği gibi, compile
komutuyla kullanabileceğiniz birkaç seçenek vardır:
Option | Açıklama |
---|---|
-o path
|
Derlenen kaynaklar için çıkış yolunu belirtir. AAPT2'nin derlenen kaynakları üretip depolayabileceği bir dizine giden yol belirtmeniz gerektiğinden bu, zorunlu bir işarettir. |
--dir directory
|
Kaynaklar için taranacak dizini belirtir. Bu işareti tek bir komutla birden fazla kaynak dosyasını derlemek için kullanabilirsiniz, ancak 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
|
en-XA ve en-XB gibi varsayılan dizelerin sözde yerelleştirilmiş sürümlerini oluşturur.
|
--no-crunch
|
PNG işlemeyi devre dışı bırakır.
PNG dosyalarını zaten işlediyseniz veya dosya boyutunun küçültülmesini gerektirmeyen hata ayıklama derlemeleri oluşturuyorsanız bu seçeneği kullanın. Bu seçenek etkinleştirildiğinde yürütme işlemi daha hızlı yapılır ancak çıkış dosyasının boyutu artar. |
--legacy
|
AAPT'nin önceki sürümlerini uyarı olarak kullanırken izin verilen hataları
ele alır.
Bu işaret, beklenmedik derleme zamanı hataları için kullanılmalıdır. AAPT2 kullanılırken oluşabilecek bilinen davranış değişikliklerini çözmek için AAPT2 kullanılırken davranış değişiklikleri başlıklı makaleyi okuyun. |
-zip file
|
file, kaynakların taranacak res dizinini içeren bir ZIP dosyasıdır.
|
-output-text-symbols file
|
Belirtilen |
-preserve-visibility-of-styleables
|
Belirtilirse diğer tüm kaynaklarda kullanılan stil verilebilir öğeler için de aynı görünürlük kurallarını uygular. Aksi takdirde, tüm 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 systrace JSON iz parçası oluşturur.
|
-source-path path
|
Derlenen kaynak dosyasının kaynak dosyası yolunu |
-h
|
Araçlar yardımını gösterir. |
-v
|
Ayrıntılı günlük kaydını etkinleştirir. |
Bağlantı
Bağlantı aşamasında AAPT2, derleme aşamasının oluşturduğu tüm ara dosyaları (ör. kaynak tabloları, ikili XML dosyaları ve işlenen PNG dosyaları) birleştirir ve daha sonra dosyaları tek bir APK'da paketler. Bu aşamada, R.java
ve ProGuard kural dosyaları gibi diğer yardımcı dosyalar da oluşturulabilir. Ancak, oluşturulan APK DEX bayt kodu içermez ve imzasızdır. Bu APK'yı bir cihaza dağıtamazsınız.
Uygulamanızı komut satırından oluşturmak için Android Gradle eklentisini kullanmıyorsanız APK'nızı imzalamak için Java bayt kodunu DEX bayt kodu olarak derlemek üzere d8 ve apksigner gibi diğer komut satırı araçlarını kullanabilirsiniz.
Bağlantı söz dizimi
link
kullanımı için 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 dosya olan drawable_Image.flat
ve values_values.arsc.flat
ile AndroidManifest.xml
dosyasını birleştirir. AAPT2, sonucu android
paketinde tanımlanan kaynakları barındıran android.jar
dosyasına bağlar:
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
Bağlantı seçenekleri
link
komutuyla aşağıdaki seçenekleri kullanabilirsiniz:
Option | Açıklama |
---|---|
-o path
|
Bağlı kaynak APK'sı için çıkış yolunu belirtir. Bağlı kaynakları barındırabilecek çıkış APK'sının yolunu belirtmeniz gerektiğinden bu, zorunlu bir işarettir. |
--manifest file
|
Derlenecek Android manifest dosyasının yolunu belirtir. Manifest dosyası, paket adı ve uygulama kimliği gibi uygulamanızla ilgili önemli bilgileri içerdiğinden bu zorunlu bir işarettir. |
-I
|
Platformun android ad alanına sahip özellikler kullanıyorsanız bu işaret zorunludur.
|
-A directory
|
APK'ya dahil edilecek bir öğe dizinini belirtir.
Bu dizini, orijinal, işlenmemiş dosyaları depolamak için kullanabilirsiniz. Daha fazla bilgi edinmek için Orijinal dosyalara erişme bölümünü okuyun. |
-R file
|
<add-resource> etiketini kullanmadan overlay semantiği kullanarak tek bir .flat dosyasını link öğesine geçirir.
Mevcut bir dosyanın yer aldığı bir kaynak dosyası sağladığınızda, belirtilen son çakışan kaynak kullanılır. |
--package-id package-id
|
Uygulamanız için kullanılacak paket kimliğini belirtir.
Belirttiğiniz paket kimliği, |
--allow-reserved-package-id
|
Ayrılmış paket kimliğinin kullanılmasına izin verir. Ayrılmış paket kimlikleri, normalde paylaşılan kitaplıklara atanan ve 0x02 ile 0x7e dahil olmak üzere 0x7e aralığındaki kimliklerdir. Bu seçenek yalnızca |
--java directory
|
R.java dosyasının oluşturulacağı dizini belirtir.
|
--proguard proguard_options
|
ProGuard kuralları için çıkış dosyası 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 çekilebilir öğelerinin otomatik olarak sürümlenmesini devre dışı bırakır. Bu işareti yalnızca APK'nızı Vektör Çekilebilir Kitaplığı ile derlerken kullanın. |
--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ı Transition Support kitaplığıyla oluştururken kullanın. |
--no-resource-deduping
|
Uyumlu yapılandırmalarda aynı değerlere sahip kaynakların otomatik olarak tekilleştirilmesini devre dışı bırakır. |
--enable-sparse-encoding
|
İkili arama ağacı kullanarak seyrek girişlerin kodlanmasını etkinleştirir. Bu, APK boyutunun optimizasyonu için faydalıdır ancak kaynak alma performansından ödün vermelidir. |
-z
|
"suggested" (önerilen) olarak işaretlenmiş dizelerin yerelleştirilmesini gerektirir. |
-c config
|
Yapılandırmaların virgülle ayrılmış bir listesini sağlar.
Örneğin, birden fazla dil için çeviri içeren destek kitaplığında bağımlılıklarınız varsa kaynakları yalnızca belirli bir dil yapılandırması (ör. İngilizce veya İspanyolca) için filtreleyebilirsiniz. Dil yapılandırmasını iki harfli ISO 639-1 dil koduyla ve isteğe bağlı olarak ardından küçük harfle başlayan "r" harfini izleyen iki harfli ISO 3166-1-alpha-2 bölge koduyla tanımlamanız gerekir. Örneğin, en-rUS. |
--preferred-density density
|
AAPT2'nin, en yakın eşleşen yoğunluğu seçmesine ve diğerlerinin tümünü çıkarmasına olanak tanır.
Uygulamanızda kullanabileceğiniz ldpi, hdpi ve xhdpi gibi çeşitli piksel yoğunluğu niteleyicileri vardır. Tercih edilen bir yoğunluk belirttiğinizde AAPT2, kaynak tablosunda en yakın eşleşen yoğunluğu seçip depolar ve diğer tüm yoğunluğu kaldırır. |
--output-to-dir
|
APK içeriklerini -o tarafından belirtilen bir dizine çıkarır.
Bu işareti kullanırken hatalarla karşılaşırsanız bunları Android SDK Derleme Araçları 28.0.0 veya sonraki bir sürüme yükselterek çözebilirsiniz. |
--min-sdk-version min-sdk-version
|
AndroidManifest.xml için kullanılacak varsayılan minimum SDK sürümünü belirler.
|
--target-sdk-version target-sdk-version
|
AndroidManifest.xml için kullanılacak varsayılan hedef SDK sürümünü ayarlar.
|
--version-code version-code
|
Yoksa AndroidManifest.xml içine eklenecek sürüm kodunu belirtir.
|
--version-name version-name
|
Herhangi bir sürüm yoksa AndroidManifest.xml öğesine eklenecek sürüm adını belirtir.
|
--revision-code revision-code
|
Yoksa AndroidManifest.xml dosyasına eklenecek düzeltme kodunu belirtir.
|
--replace-version
|
--version-code , --version-name veya --revision-code belirtilirse bu değerler, manifestte halihazırda bulunan tüm değerlerin yerine geçer. Varsayılan olarak, manifest bu özellikleri zaten tanımlıyorsa hiçbir şey değişmez.
|
--compile-sdk-version-nacodeme compile-sdk-version-name
|
Yoksa AndroidManifest.xml dosyasına eklenecek sürüm kodunu belirtir.
|
--compile-sdk-version-name compile-sdk-version-name
|
Yoksa AndroidManifest.xml dosyasına eklenecek sürüm adını belirtir.
|
--proto-format
|
Protobuf biçiminde derlenmiş kaynaklar oluşturur.
Android App Bundle oluşturma işlemi için
|
--non-final-ids
|
Nihai olmayan kaynak kimlikleriyle R.java oluşturur. kotlinc veya javac derlemesi sırasında, uygulamanın kodundan alınan kimliklere yapılan referanslar satır içine alınmaz.
|
--emit-ids path
|
Belirtilen yolda, kaynak türlerinin adları ve kimlik eşlemeleriyle birlikte bir dosya yayınlar. Bu, --stable-ids ile kullanıma uygundur.
|
--stable-ids outputfilename.ext
|
--emit-ids ile oluşturulan ve kaynak türlerinin adlarını ve atanmış kimliklerinin listesini içeren dosyayı tüketir.
Bu seçenek, atanırken atanan kimliklerin, silinmesi veya yeni kaynaklar eklemeniz durumunda bile sabit kalmasını sağlar. |
--custom-package package_name
|
R.java oluşturulacak özel Java paketini belirtir.
|
--extra-packages package_name
|
Aynı R.java dosyasını farklı paket adlarıyla oluşturur.
|
--add-javadoc-annotation annotation
|
Oluşturulan tüm Java sınıflarına bir JavaDoc ek açıklaması ekler. |
--output-text-symbols path
|
Belirtilen dosyada R sınıfının kaynak simgelerini içeren bir metin dosyası oluşturur.
Çıkış dosyasının yolunu belirtmelisiniz. |
--auto-add-overlay
|
<add-resource> etiketi kullanılmadan yer paylaşımlarına yeni kaynaklar eklenmesine olanak tanır.
|
--rename-manifest-package manifest-package
|
Paketi AndroidManifest.xml dosyasında yeniden adlandırır.
|
--rename-instrumentation-target-package instrumentation-
target-package
|
instrumentation için hedef paketin adını değiştirir.
Bu seçenek, |
-0 extension
|
Sıkıştırmak istemediğiniz dosyaların uzantılarını belirtir. |
--split path:config[,config[..]]
|
APK'nın farklı bir sürümünü oluşturmak için kaynakları bir dizi yapılandırmaya göre böler.
Çıkış APK'sının yolunu yapılandırma grubuyla birlikte belirtmeniz gerekir. |
--proguard-main-dex file
|
Ana DEX için oluşturulan ProGuard kuralları için çıkış dosyası. |
--proguard-minimal-keep-rules
|
Minimal ProGuard saklama kuralları grubu oluşturur. |
--no-resource-removal
|
Kaynakların otomatik olarak kaldırılmasını varsayılan ayar olmadan devre dışı bırakır. Bu seçeneği yalnızca çalışma zamanı kaynak yer paylaşımı paketleri oluştururken kullanın. |
-x
|
0x01 paket kimliğinin kullanımını belirten eski işaret. |
--product products-list
|
Saklanacak ürün adlarının virgülle ayrılmış listesini belirtir. |
--no-xml-namespaces
|
res/* içindeki AndroidManifest.xml dosyası ve XML ikili programlarından XML ad alanı önekini ve URI bilgilerini kaldırır.
|
--shared-lib
|
Paylaşılan bir Android çalışma zamanı kitaplığı oluşturur. |
--static-lib
|
Statik bir Android kitaplığı oluşturur. |
--no-static-lib-packages
|
Uygulamanın paketi altındaki tüm kitaplık kaynaklarını birleştirir. |
--no-proguard-location-reference
|
ProGuard kural dosyalarının kaynak dosyaya referans içermesini engeller. |
--private-symbols package-name
|
package-name, özel simgeler için R.java oluşturulurken kullanılacak paket adını belirtir. Belirtilmezse herkese açık ve özel simgeler uygulamanın paket adını kullanır.
|
--override-styles-instead-of-overlaying
|
-R kaynaklarında tanımlanan stillerin, birleştirilmek yerine önceki tanımları değiştirmesine neden olur.
|
--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. Büyük/küçük harfe duyarlı bir ECMAScript normal ifade dil bilgisi kullanır.
|
--warn-manifest-validation
|
Manifest doğrulama hatalarını uyarı olarak değerlendirir. |
--exclude-configs qualifier[,qualifier[..]]
|
Yapılandırmaları belirtilen niteleyicileri içeren kaynakların değerlerini hariç tutar. |
--debug-mode
|
Manifest'in uygulama düğümüne android:debuggable="true" ekler. Böylece uygulama, üretim cihazlarında bile hata ayıklaması yapılabilir.
|
--strict-visibility
|
Farklı görünürlük seviyelerine sahip yer paylaşımlarına izin verilmez. |
--exclude-sources
|
Protokol buf biçiminde kaynaklar oluştururken kaynak dosya bilgilerini serileştirmez. |
--trace-folder folder
|
Belirtilen folder öğesine systrace JSON iz parçasını oluşturur.
|
--merge-only
|
Kaynak referanslarını doğrulamadan yalnızca kaynakları birleştirir. Bu işaret yalnızca --static-lib işaretiyle birlikte kullanılmalıdır.
|
-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
komutunu kullanarak oluşturduğunuz APK hakkında bilgileri yazdırmak için kullanılır.
Döküm söz dizimi
dump
kullanımı için genel söz dizimi aşağıdaki gibidir:
aapt2 dump sub-command filename.apk [options]
Aşağıdaki örnekte, belirtilen APK'nın kaynak tablosundaki içerik yazdırılmaktadır:
aapt2 dump resources output.apk
Alt komutların dökümünü al
dump
komutuyla aşağıdaki alt komutlardan birini belirtin:
Alt komut | Açıklama |
---|---|
apc
|
Derleme sırasında oluşturulan AAPT2 Container'ının (APC) içeriğini yazdırır. |
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 tablosu dize 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
|
APK'nın derlenmiş XML'den dizeleri yazdırır. |
xmltree
|
APK'nın derlenmiş XML'sinin bir ağacını yazdırır. |
Döküm seçenekleri
dump
ile aşağıdaki seçenekleri kullanın:
Option | Açıklama |
---|---|
--no-values
|
Kaynağı görüntülerken değerlerin çıkışını gizler. |
--file file
|
APK'dan döküm alınacak bağımsız değişken olarak bir dosyayı belirtir. |
-v
|
Çıkışın ayrıntı düzeyini artırır. |
Fark
İki APK'yı karşılaştırmak ve bunlar arasındaki farkları belirlemek için diff
uygulamasını kullanın.
Fark söz dizimi
diff
kullanımı için genel söz dizimi aşağıdaki gibidir:
aapt2 diff first.apk second.apk
diff
komutu için herhangi bir seçenek yok.
Optimizasyon yapın
optimize
, birleştirilen kaynaklarda ve APK'ya paketlenmeden önce resources.arsc
üzerinde optimizasyonlar çalıştırmak için kullanılır. Bu optimizasyon, kullanılan kaynakların boyutuna ve sayısına bağlı olarak APK boyutunu yaklaşık %1-3 oranında azaltabilir.
Söz dizimini optimize et
optimize
kullanımı için genel söz dizimi aşağıdaki gibidir:
aapt2 optimize options file[,file[..]]
Aşağıdaki örnek, input.apk
kaynaklarını optimize eder ve output.apk
konumunda optimize edilmiş yeni bir APK oluşturur. Normal düz tablo gösterimini daha kompakt bir ikili arama ağacıyla değiştirir ve böylece alma performansı maliyetiyle daha küçük bir APK elde edilir:
aapt2 optimize -o output.apk --enable-sparse-encoding input.apk
Optimizasyon seçenekleri
optimize
ile aşağıdaki seçenekleri kullanabilirsiniz:
Option | Açıklama |
---|---|
-o path
|
Bağlı kaynak APK'sı için çıkış yolunu belirtir.
Bağlı kaynakları barındırabilecek çıkış APK'sının yolunu belirtmeniz gerektiğinden bu, zorunlu bir işarettir. |
-d directory
|
Bölmeler için çıkış dizininin yolunu belirtir. |
-x path
|
XML yapılandırma dosyasının yolunu belirtir. |
-p
|
Çoklu APK yapılarını yazdırıp çıkar. |
--target-densities density[,density[..]]
|
APK'nın optimize edildiği ekran yoğunluklarının virgülle ayrılmış listesini belirtir. Belirtilen yoğunluktaki cihazlarda kullanılamayacak tüm kaynaklar APK'dan kaldırılır. |
--resources-config-path path
|
Her bir kaynağa ait kaynakların ve yönergelerin listesini içeren Biçim: type/resource_name#[directive][,directive] |
-c config[,config[..]]
|
Dahil edilecek yapılandırmaların virgülle ayrılmış listesini belirtir. Varsayılan olarak tüm yapılandırmalar kullanılır. |
--split path:config[,config[..]]
|
APK'nın farklı bir sürümünü oluşturmak için kaynakları bir dizi yapılandırmaya göre böler.
Çıkış APK'sının yolunu yapılandırma grubuyla birlikte belirtmeniz gerekir. |
--keep-artifacts artifact[,artifact[..]]
|
Saklanacak yapıların virgülle ayrılmış listesini belirtir. Hiçbiri belirtilmezse tüm yapılar korunur. |
--enable-sparse-encoding
|
İkili arama ağacı kullanarak seyrek girişlerin kodlanmasını etkinleştirir. Bu seçenek, APK boyutunun optimizasyonu için faydalıdır ancak kaynak alma performansından ödün vermelidir. |
--collapse-resource-names
|
Kaynak adlarını anahtar dizesi havuzundaki tek bir değere daraltır.
Kaynaklar, --resources-config-path tarafından belirtilen bir dosyada no_collapse yönergesi kullanılarak muaf tutulur.
|
--shorten-resource-paths
|
APK içindeki kaynakların yollarını kısaltır. |
--resource-path-shortening-map path
|
Eski kaynak yollarının haritasını kısaltılmış yollara çıkaracak yolu belirtir. |
-v
|
Çıkışın ayrıntı düzeyini artırır. |
-h
|
Araç yardımını gösterir. |
Dönüştür
AAPT compile
komutu, varsayılan olarak kaynakları APK'lara uygun ikili biçimde derler. --proto-format
belirterek AAB'lere uygun olan protobuf biçimini de belirtebilirsiniz. convert
komutu, APK'ları iki biçim arasında dönüştürür.
Söz dizimini dönüştür
convert
için genel söz dizimi şöyledir:
aapt2 convert -o output-file options file[,file[..]]
Aşağıdaki örnek, input.apk
kaynaklarını dönüştürür ve output.apk
içinde proto tampon biçimi kaynakları içeren yeni bir APK oluşturur. Normal düz tablo gösterimini daha kompakt bir ikili arama ağacıyla değiştirir ve böylece alma performansı karşılığında daha küçük bir APK elde edilir:
aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk
Seçenekleri Dönüştürme
convert
ile aşağıdaki seçenekleri kullanın:
Option | Açıklama |
---|---|
-o path
|
Bağlı kaynak APK'sı için çıkış yolunu belirtir. Bağlı kaynakları barındırabilecek çıkış APK'sının yolunu belirtmeniz gerektiğinden bu, zorunlu bir işarettir. |
--output-format [proto|binary]
|
Çıkışın biçimi. proto ve binary değerleri kabul edilir. Ayarlanmadığında 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 için faydalıdır ancak kaynak alma performansından ödün vermelidir. |
--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österir. |
Arka plan programı modu
AAPT sürüm 2.19, komut verme için arka plan modu modunu kullanıma sundu. Arka plan modu, tek bir AAPT oturumunda birden fazla komut girmenize olanak tanır.
Arka plan programı söz dizimi
Aşağıdaki komutla arka plan modunu başlatın:
aapt2 daemon
Arka plan modu çalışmaya başladıktan sonra komut girebilirsiniz. Komutun her bağımsız değişkeni, komutun sonunda boş bir satır olacak şekilde ayrı bir satırda yer almalıdır. Control+D tuşlarına basarak arka plan programı modundan çıkın.
Aşağıdaki bağımsız compile
komutlarını göz önünde bulundurun:
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 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 modu seçenekleri
Arka plan modu için tek seçenek --trace-folder folder
'dir. Bu mod, belirtilen folder öğesine bir systrace
JSON izleme parçası oluşturur.
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 AAPT, Android Öğe Paketleme Aracı'nın varsayılan sürümü olup kullanımdan kaldırılmıştır. AAPT2'nin eski projelerle hemen çalışması gerekse de, bu bölümde farkında olmanız gereken bazı davranış değişiklikleri açıklanmaktadır.
Android manifestindeki öğe hiyerarşileri
AAPT'nin önceki sürümlerinde, AndroidManifest.xml
dosyasında yanlış düğümlere iç içe yerleştirilmiş öğeler yoksayılıyor veya uyarıyla sonuçlanıyordu.
Örneğin, aşağıdaki örneği inceleyin:
<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ştirilen <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 Manifest'e genel bakış konusunu okuyun.
Kaynakların beyanı
Artık name
özelliğinden kaynak türünü belirtemezsiniz.
Aşağıdaki örnekte bir attr
kaynak öğesi yanlış tanımlanmaktadır:
<style name="childStyle" parent="parentStyle"> <item name="attr/my_attr">@color/pink</item> </style>
Bir kaynak türünün bu şekilde bildirilmesi 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ı çözmek için type="attr"
ile 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 bildirilirken üst öğesi de stil kaynak türü olmalıdır. Aksi takdirde, aşağıdakine benzer bir hata alırsınız:
Error: (...) invalid resource type 'attr' for parent of style
@ kaynak referans sembollerinin yanlış kullanımı
AAPT2, kaynak referans simgelerini (@
) çıkardığınızda veya yanlış bir şekilde yerleştirdiğinizde derleme hataları bildirir. Örneğin, bir stil özelliğini belirtirken simgeyi çıkarırsanız:
<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, android
ad alanından bir kaynağa erişirken simgeyi yanlış eklerseniz:
... <!-- 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, Android SDK Derleme Araçları'nın eski sürümleri kullanılarak oluşturulmuş bir üçüncü taraf kitaplığa bağımlılığı varsa çalışma zamanında hiçbir hata veya uyarı görüntülemeden çökebilir. Bu kilitlenme, kitaplığın oluşturulması sırasında R.java
alanlarının final
olarak belirtilmesinden kaynaklanabilir. Sonuç olarak, tüm kaynak kimlikleri kitaplık sınıflarında satır içine alınır.
AAPT2, uygulamanızı oluştururken kimlikleri kitaplık kaynaklarına yeniden atayabilmeye dayanır. Kitaplık, kimliklerin final
olduğunu varsayar ve bunları kitaplık DEX'ine satıra dahil ederse çalışma zamanı uyuşmazlığı vardır.
Bu hatayı düzeltmek için kitaplık yazarıyla iletişime geçerek Android SDK Derleme Araçları'nın en son sürümünü kullanarak kitaplığı yeniden oluşturun ve kitaplığı yeniden yayınlayın.