AAPT2 (Android Asset Packaging Tool) adalah alat build yang digunakan oleh Android Studio dan Plugin Android Gradle untuk mengompilasi dan memaketkan resource aplikasi Anda. AAPT2 mengurai, mengindeks, dan mengompilasi resource menjadi format biner yang dioptimalkan untuk platform Android.
Plugin Android Gradle 3.0.0 dan yang lebih tinggi mengaktifkan AAPT2 secara default. Anda
biasanya tidak perlu memanggil aapt2
sendiri. Namun, jika lebih memilih untuk menggunakan
sistem build dan terminal milik sendiri daripada Android Studio, Anda dapat menggunakan
AAPT2 dari command line. Anda juga dapat men-debug error build yang terkait dengan AAPT2 dari command line. Untuk melakukannya, temukan AAPT2 sebagai alat mandiri di
Android SDK Build Tools 26.0.2 dan yang lebih tinggi.
Untuk mendownload Android SDK Build Tools dari command line, gunakan
sdkmanager
dan jalankan perintah berikut:
sdkmanager "build-tools;build-tools-version"
Setelah mendownload SDK Build Tools, temukan AAPT2 di
android_sdk/build-tools/version/
.
Karena revisi Android SDK Build Tools tidak sering dirilis, versi AAPT2 yang disertakan dalam SDK Build Tools Anda mungkin bukan yang terbaru. Untuk mendapatkan versi terbaru AAPT2, download AAPT2 dari Maven Google.
Untuk menggunakan AAPT2 dari command line di Linux atau Mac, jalankan perintah aapt2
.
Di Windows, jalankan perintah aapt2.exe
.
AAPT2 mendukung kompilasi resource yang lebih cepat dengan mengaktifkan kompilasi inkremental. Untuk menyelesaikan kompilasi inkremental, pemrosesan resource dipisahkan menjadi dua langkah:
- Compile: mengompilasi file resource ke dalam format biner.
- Link: menggabungkan semua file yang dikompilasi, lalu memaketkannya menjadi satu.
Pembagian ini akan membantu meningkatkan performa untuk build inkremental. Misalnya, jika ada perubahan dalam satu file, Anda hanya perlu menghimpun ulang file tersebut.
Mendownload AAPT2 dari Maven Google
Untuk mendapatkan versi terbaru AAPT2 yang tidak disertakan dalam alat build, download AAPT2 dari repositori Maven Google sebagai berikut:
- Di indeks repositori, buka com.android.tools.build > aapt2.
- Salin nama versi terbaru AAPT2.
Masukkan nama versi yang Anda salin ke URL berikut dan tentukan sistem operasi target Anda: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar
Misalnya, untuk mendownload versi 3.2.0-alpha18-4804415 untuk Windows, gunakan: 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
Buka URL di browser. AAPT2 akan segera didownload.
Buka paket file JAR yang baru saja didownload.
File JAR harus berisi file
aapt2
yang dapat dieksekusi dan beberapa library yang dijadikan dependensi oleh file yang dapat dieksekusi tersebut.
Compile
AAPT2 mendukung kompilasi semua
jenis resource Android, seperti
file drawable dan file XML. Saat Anda memanggil AAPT2 untuk kompilasi, teruskan
satu file resource sebagai input per pemanggilan. AAPT2 kemudian menguraikan file dan menghasilkan file biner perantara dengan ekstensi .flat
.
Ketika Anda meneruskan seluruh direktori, AAPT2 akan mengompilasi ulang semua file dalam direktori tersebut meskipun hanya satu resource yang diubah. Meskipun Anda dapat meneruskan direktori
resource yang berisi lebih dari satu file resource ke AAPT2 menggunakan flag
--dir
, Anda tidak akan mendapatkan manfaat dari kompilasi resource inkremental dengan cara ini.
Jenis file output dapat berbeda berdasarkan input yang Anda berikan untuk kompilasi, seperti ditunjukkan pada tabel berikut:
Input | Output |
---|---|
File resource XML, seperti
String dan
Style,
yang terletak di direktori res/values/
|
Tabel resource dengan *.arsc.flat sebagai ekstensinya.
|
Semua file resource lainnya. |
Semua file selain file pada direktori
Selain itu, semua file PNG dijalankan secara default dan menggunakan ekstensi |
File yang dihasilkan oleh AAPT2 tidak dapat dieksekusi, dan nantinya, Anda harus menyertakan file biner ini sebagai input dalam fase penautan untuk membuat APK. Namun, file APK yang dihasilkan juga bukan file yang dapat dieksekusi dan dapat langsung di-deploy ke perangkat Android, karena tidak berisi file DEX dan tidak ditandatangani.
Sintaksis Compile
Sintaksis umum untuk menggunakan compile
adalah sebagai berikut:
aapt2 compile path-to-input-files [options] -o output-directory/
Dalam contoh berikut, AAPT2 mengompilasi file resource dengan nama values.xml
dan myImage.png
secara terpisah:
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/
Seperti ditunjukkan dalam tabel 1, nama file output bergantung pada nama file input dan nama direktori induknya.
Untuk contoh sebelumnya dengan file strings.xml
sebagai input, aapt2
secara otomatis
menamai file output sebagai values-en_strings.arsc.flat
. Namun, file drawable
yang dikompilasi dan disimpan dalam direktori drawable dinamai drawable_img.png.flat
.
Opsi Compile
Ada beberapa opsi yang dapat Anda gunakan dengan perintah compile
, seperti ditunjukkan
pada tabel 2:
Opsi | Deskripsi |
---|---|
-o path
|
Menentukan jalur output untuk resource yang dikompilasi. Ini adalah flag yang diperlukan karena Anda harus menentukan jalur ke direktori tempat AAPT2 dapat menghasilkan dan menyimpan resource yang dikompilasi. |
--dir directory
|
Menentukan direktori yang akan dipindai untuk mencari resource. Meskipun flag ini dapat digunakan untuk mengompilasi beberapa file resource dengan satu perintah, Anda tidak akan mendapatkan manfaat dari kompilasi inkremental. Oleh karena itu, flag ini tidak boleh digunakan untuk project besar. |
--pseudo-localize
|
Menghasilkan string default dalam versi
yang dilokalkan secara semu, seperti en-XA dan en-XB .
|
--no-crunch
|
Menonaktifkan pemrosesan PNG.
Gunakan opsi ini jika Anda telah memproses file PNG atau jika Anda membuat build debug yang tidak memerlukan pengurangan ukuran file. Mengaktifkan opsi ini akan mempercepat eksekusi, tetapi ukuran file output akan menjadi lebih besar. |
--legacy
|
Memperlakukan error yang diizinkan saat menggunakan versi AAPT yang lebih lama sebagai
peringatan.
Flag ini harus digunakan untuk error waktu kompilasi yang tidak terduga. Untuk mengatasi perubahan perilaku umum yang mungkin terjadi saat menggunakan AAPT2, baca Perubahan perilaku saat menggunakan AAPT2. |
-zip file
|
file adalah file ZIP yang berisi direktori res untuk memindai
resource.
|
-output-text-symbols file
|
Menghasilkan file teks yang berisi simbol resource dalam
|
-preserve-visibility-of-styleables
|
Jika ditentukan, akan menerapkan aturan visibilitas yang sama untuk gaya yang dapat digunakan untuk semua resource lainnya. Jika tidak, semua gaya dapat diubah menjadi publik. |
-visibility [public|private|default|]
|
Menetapkan visibilitas resource yang dikompilasi ke tingkat yang ditentukan. |
-trace-folder folder
|
Menghasilkan fragmen rekaman aktivitas JSON systrace ke |
-source-path path
|
Menetapkan jalur file sumber dari file resource kompilasi ke |
-h
|
Menampilkan bantuan alat. |
-v
|
Mengaktifkan logging panjang. |
Link
Dalam fase penautan, AAPT2 akan menggabungkan semua file perantara yang dihasilkan oleh fase
kompilasi, seperti tabel resource, file XML biner, dan file PNG
yang diproses, kemudian memaketkan file tersebut menjadi satu APK. Selain itu, file
tambahan lainnya, seperti file aturan R.java
dan ProGuard, dapat dibuat
selama fase ini. Namun, APK yang dihasilkan tidak berisi bytecode DEX dan
tidak ditandatangani. Anda tidak dapat men-deploy APK ini ke perangkat.
Jika tidak menggunakan plugin Android Gradle untuk mem-build aplikasi dari command line, Anda dapat menggunakan alat command line lainnya seperti d8 untuk mengompilasi bytecode Java menjadi bytecode DEX danapksigner untuk menandatangani APK.
Sintaksis Link
Sintaksis umum untuk menggunakan link
adalah sebagai berikut:
aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml
Pada contoh berikut, AAPT2 menggabungkan dua file perantara, drawable_Image.flat
dan values_values.arsc.flat
, serta file AndroidManifest.xml
. AAPT2 menautkan hasilnya ke file
android.jar
yang berisi resource yang ditentukan dalam paket 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
Opsi Link
Anda dapat menggunakan opsi berikut dengan perintah link
:
Opsi | Deskripsi |
---|---|
-o path
|
Menentukan jalur output untuk APK resource yang tertaut. Flag ini diperlukan karena Anda harus menentukan jalur untuk APK output yang dapat menyimpan resource yang tertaut. |
--manifest file
|
Menentukan jalur ke file manifes Android yang akan di-build. Flag ini diperlukan karena file manifes menyimpan informasi penting tentang aplikasi Anda, seperti nama paket dan ID. aplikasi |
-I
|
Memberikan jalur ke android di file resource.
|
-A directory
|
Menentukan direktori aset yang akan disertakan dalam APK.
Anda dapat menggunakan direktori ini untuk menyimpan file asli yang belum diproses. Untuk mempelajari lebih lanjut, baca Mengakses file asli. |
-R file
|
Meneruskan satu file .flat ke link , menggunakan semantik overlay tanpa menggunakan tag <add-resource> .
Saat Anda memberikan file resource yang menempatkan file yang sudah ada, resource terakhir yang mengalami konflik akan digunakan. |
--package-id package-id
|
Menentukan ID paket yang akan digunakan untuk aplikasi Anda.
ID paket yang Anda tentukan harus lebih besar atau sama dengan 0x7f,
kecuali digunakan bersama
|
--allow-reserved-package-id
|
Mengizinkan penggunaan ID paket yang sudah dialokasikan. ID paket yang sudah dialokasikan adalah ID yang biasanya ditetapkan ke library bersama dan berada dalam rentang 0x02 hingga 0x7e secara inklusif. Dengan menggunakan
Opsi ini hanya boleh digunakan untuk paket dengan versi |
--java directory
|
Menentukan direktori untuk menghasilkan R.java .
|
--proguard proguard_options
|
Menghasilkan file output untuk aturan ProGuard. |
--proguard-conditional-keep-rules
|
Menghasilkan file output untuk aturan ProGuard bagi DEX utama. |
--no-auto-version
|
Menonaktifkan penetapan versi SDK gaya dan tata letak otomatis. |
--no-version-vectors
|
Menonaktifkan penetapan versi otomatis vektor drawable. Hanya gunakan flag ini ketika mem-build APK dengan Vector Drawable Library. |
--no-version-transitions
|
Menonaktifkan penetapan versi otomatis resource transisi. Gunakan flag ini hanya saat mem-build APK dengan Transition Support Library. |
--no-resource-deduping
|
Menonaktifkan de-duplikasi resource secara otomatis dengan nilai yang identik di seluruh konfigurasi yang kompatibel. |
--enable-sparse-encoding
|
Mengaktifkan encoding entri sparse menggunakan hierarki penelusuran biner. Opsi ini berguna untuk pengoptimalan ukuran APK, tetapi performa pengambilan resource harus dikorbankan. |
-z
|
Mewajibkan pelokalan string yang ditandai sebagai 'disarankan'. |
-c config
|
Memberikan daftar konfigurasi yang dipisahkan koma.
Misalnya, jika Anda memiliki dependensi di support library yang berisi terjemahan untuk berbagai bahasa), Anda dapat memfilter resource untuk konfigurasi bahasa yang ditentukan saja, seperti bahasa Inggris atau Spanyol. Anda harus menentukan konfigurasi bahasa dengan kode bahasa ISO 639-1 dua huruf, yang secara opsional diikuti dengan kode wilayah ISO 3166-1-alpha-2 dua huruf yang diawali dengan huruf kecil 'r'. Misalnya, en-rUS. |
--preferred-density density
|
Mengizinkan AAPT2 memilih kepadatan yang paling cocok dan menghapus
yang lainnya.
Ada beberapa penentu kepadatan piksel yang tersedia untuk digunakan dalam aplikasi, seperti ldpi, hdpi, dan xhdpi. Saat menentukan kepadatan yang diinginkan, AAPT2 akan memilih dan menyimpan kepadatan yang paling cocok dalam tabel resource dan menghapus yang lainnya. |
--output-to-dir
|
Menghasilkan konten APK ke direktori yang ditentukan oleh -o .
Jika mendapatkan error ketika menggunakan flag ini, Anda dapat mengatasinya dengan mengupgrade ke Android SDK Build Tools 28.0.0 atau yang lebih baru. |
--min-sdk-version min-sdk-version
|
Menetapkan versi SDK minimum default yang akan digunakan untuk
AndroidManifest.xml .
|
--target-sdk-version target-sdk-version
|
Menetapkan versi SDK target default yang akan digunakan untuk
AndroidManifest.xml .
|
--version-code version-code
|
Menentukan kode versi yang akan dimasukkan ke
AndroidManifest.xml jika belum ada.
|
--version-name version-name
|
Menentukan nama versi yang akan dimasukkan ke
AndroidManifest.xml jika belum ada.
|
--revision-code revision-code
|
Menentukan kode revisi yang akan dimasukkan ke
file AndroidManifest.xml jika belum ada.
|
--replace-version
|
Jika --version-code , --version-name , atau
--revision-code ditentukan, nilai ini akan menggantikan nilai
apa pun yang sudah ada dalam manifes. Secara default, tidak ada yang berubah jika manifes
sudah menentukan atribut ini.
|
--compile-sdk-version-nacodeme compile-sdk-version-name
|
Menentukan kode versi yang akan dimasukkan ke
file AndroidManifest.xml jika belum ada.
|
--compile-sdk-version-name compile-sdk-version-name
|
Menentukan nama versi yang akan dimasukkan ke
file AndroidManifest.xml jika belum ada.
|
--proto-format
|
Menghasilkan resource yang dikompilasi dalam format Protobuf. Cocok sebagai input ke
|
--non-final-ids
|
Menghasilkan R.java dengan ID resource non-final. Referensi ke
ID dari kode aplikasi tidak akan disisipkan selama kompilasi kotlinc
atau javac .
|
--emit-ids path
|
Memberikan file di jalur yang ditentukan dengan daftar nama jenis resource dan
pemetaan ID-nya. Ini cocok digunakan dengan --stable-ids .
|
--stable-ids outputfilename.ext
|
Menggunakan file yang dihasilkan dengan --emit-ids yang berisi
daftar nama jenis resource dan ID yang ditetapkan kepadanya.
Opsi ini memungkinkan ID yang ditetapkan menjadi tetap stabil meskipun Anda menghapus atau menambahkan resource baru pada saat penautan. |
--custom-package package_name
|
Menentukan paket Java kustom tempat R.java akan dibuat.
|
--extra-packages package_name
|
Membuat file R.java yang sama tetapi dengan nama paket
yang berbeda.
|
--add-javadoc-annotation annotation
|
Menambahkan anotasi JavaDoc ke semua class Java yang dihasilkan. |
--output-text-symbols path
|
Menghasilkan file teks yang berisi simbol resource class R dalam file yang ditentukan.
Anda harus menentukan jalur ke file output. |
--auto-add-overlay
|
Memungkinkan penambahan resource baru dalam overlay tanpa menggunakan
tag <add-resource> .
|
--rename-manifest-package manifest-package
|
Mengganti nama paket dalam file AndroidManifest.xml .
|
--rename-instrumentation-target-package instrumentation-
target-package
|
Mengubah nama paket target untuk
instrumentation .
Opsi ini harus digunakan bersama
|
-0 extension
|
Menentukan ekstensi file yang tidak ingin Anda kompresi. |
--split path:config[,config[..]]
|
Memisahkan resource berdasarkan suatu rangkaian konfigurasi untuk menghasilkan
versi APK yang berbeda.
Anda harus menentukan jalur ke APK output beserta rangkaian konfigurasi. |
--proguard-main-dex file
|
File output untuk aturan ProGuard yang dihasilkan untuk DEX utama. |
--proguard-minimal-keep-rules
|
Menghasilkan sekumpulan aturan penyimpanan ProGuard minimal. |
--no-resource-removal
|
Menonaktifkan penghapusan otomatis resource tanpa setelan default. Gunakan opsi ini hanya saat mem-build paket runtime resource overlay. |
-x
|
Flag lama yang menentukan penggunaan ID paket 0x01. |
--product products-list
|
Menentukan daftar nama produk yang dipisahkan koma yang akan disimpan. |
--no-xml-namespaces
|
Menghapus awalan namespace XML dan informasi URI dari
file AndroidManifest.xml dan biner XML di
res/* .
|
--shared-lib
|
Menghasilkan library Android runtime bersama. |
--static-lib
|
Menghasilkan library Android statis. |
--no-static-lib-packages
|
Menggabungkan semua resource library dalam paket aplikasi. |
--no-proguard-location-reference
|
Mencegah file aturan ProGuard memiliki referensi ke file sumber. |
--private-symbols package-name
|
package-name menentukan nama paket yang akan digunakan saat membuat
R.java untuk simbol pribadi. Jika tidak ditentukan, simbol publik dan
pribadi akan menggunakan nama paket aplikasi.
|
--override-styles-instead-of-overlaying
|
Menyebabkan gaya yang ditentukan dalam resource -R menggantikan definisi sebelumnya
dan bukan menggabungkannya.
|
--rename-resources-package package-name
|
Mengganti nama paket dalam tabel resource menjadi package-name. |
--no-compress
|
Tidak mengompresi resource apa pun. |
--keep-raw-values
|
Mempertahankan nilai atribut raw dalam file XML. |
--no-compress-regex regular-expression
|
Tidak mengompresi ekstensi yang cocok dengan regular-expression.
Gunakan simbol $ untuk akhir baris. Menggunakan
tata bahasa ekspresi reguler ECMAScript yang peka huruf besar/kecil.
|
--warn-manifest-validation
|
Memperlakukan error validasi manifes sebagai peringatan. |
--exclude-configs qualifier[,qualifier[..]]
|
Mengecualikan nilai resource yang konfigurasinya berisi penentu yang ditetapkan. |
--debug-mode
|
Menyisipkan android:debuggable="true" ke node aplikasi manifes, sehingga membuat aplikasi dapat di-debug, bahkan pada perangkat produksi.
|
--strict-visibility
|
Tidak memungkinkan overlay dengan tingkat visibilitas berbeda. |
--exclude-sources
|
Tidak melakukan serialisasi informasi file sumber saat membuat resource dalam format Protobuf. |
--trace-folder folder
|
Menghasilkan fragmen rekaman aktivitas JSON systrace ke folder yang ditentukan.
|
--merge-only
|
Hanya menggabungkan resource tanpa memverifikasi referensi resource. Flag
ini hanya boleh digunakan dengan flag
--static-lib .
|
-h
|
Menampilkan menu bantuan. |
-v
|
Memungkinkan penambahan panjang output. |
Dump
dump
digunakan untuk mencetak informasi tentang APK yang Anda buat menggunakan
perintah link
.
Sintaksis Dump
Sintaksis umum untuk menggunakan dump
adalah sebagai berikut:
aapt2 dump sub-command filename.apk [options]
Contoh berikut mencetak konten dari tabel resource APK yang ditentukan:
aapt2 dump resources output.apk
Sub-perintah Dump
Tentukan salah satu sub-perintah berikut dengan perintah dump
:
Sub-perintah | Deskripsi |
---|---|
apc
|
Mencetak konten AAPT2 Container (APC) yang dibuat selama proses kompilasi. |
badging
|
Mencetak informasi yang diekstraksi dari manifes APK. |
configurations
|
Mencetak setiap konfigurasi yang digunakan oleh resource di APK. |
overlayable
|
Mencetak resource APK yang dapat ditempati overlay. |
packagename
|
Mencetak nama paket APK. |
permissions
|
Mencetak izin yang diekstrak dari manifes APK. |
strings
|
Mencetak konten gabungan string tabel resource APK. |
styleparents
|
Mencetak induk gaya yang digunakan di APK. |
resources
|
Mencetak konten tabel resource APK. |
xmlstrings
|
Mencetak string dari XML yang dikompilasi APK. |
xmltree
|
Mencetak hierarki XML yang dikompilasi APK. |
Opsi Dump
Gunakan opsi berikut dengan dump
:
Opsi | Deskripsi |
---|---|
--no-values
|
Menekan output nilai saat menampilkan resource. |
--file file
|
Menentukan file sebagai argumen yang akan dibuang dari APK. |
-v
|
Menambah panjang output. |
Diff
Gunakan diff
untuk membandingkan dua APK dan mengidentifikasi perbedaan di antara keduanya.
Sintaksis Diff
Sintaksis umum untuk menggunakan diff
adalah sebagai berikut:
aapt2 diff first.apk second.apk
Tidak ada opsi untuk perintah diff
.
Optimize
optimize
digunakan untuk menjalankan pengoptimalan pada resource yang digabungkan dan
resources.arsc
sebelum dikemas ke dalam APK. Pengoptimalan ini
dapat mengurangi ukuran APK sekitar 1-3%, bergantung pada ukuran dan jumlah
resource yang digunakan.
Sintaksis Optimize
Sintaksis umum untuk menggunakan optimize
adalah sebagai berikut:
aapt2 optimize options file[,file[..]]
Contoh berikut mengoptimalkan resource di input.apk
dan membuat APK baru yang
dioptimalkan di output.apk
. Ini menggantikan representasi tabel datar biasa
dengan hierarki penelusuran biner yang lebih ringkas, sehingga menghasilkan APK yang lebih kecil dengan
mengorbankan performa pengambilan:
aapt2 optimize -o output.apk --enable-sparse-encoding input.apk
Opsi Optimize
Anda dapat menggunakan opsi berikut dengan optimize
:
Opsi | Deskripsi |
---|---|
-o path
|
Menentukan jalur output untuk APK resource yang tertaut.
Flag ini diperlukan karena Anda harus menentukan jalur untuk APK output yang dapat menyimpan resource yang tertaut. |
-d directory
|
Menentukan jalur ke direktori output untuk pemisahan. |
-x path
|
Menentukan jalur ke file konfigurasi XML. |
-p
|
Mencetak artefak multi-APK dan keluar. |
--target-densities density[,density[..]]
|
Menentukan daftar yang dipisahkan koma untuk kepadatan layar yang menjadi tujuan pengoptimalan APK. Semua resource yang tidak akan digunakan pada perangkat dengan kepadatan yang diberikan akan dihapus dari APK. |
--resources-config-path path
|
Menentukan jalur ke file Format: type/resource_name#[directive][,directive] |
-c config[,config[..]]
|
Menentukan daftar konfigurasi yang dipisahkan koma yang akan disertakan. Default-nya adalah semua konfigurasi. |
--split path:config[,config[..]]
|
Memisahkan resource berdasarkan suatu rangkaian konfigurasi untuk menghasilkan
versi APK yang berbeda.
Anda harus menentukan jalur ke APK output beserta rangkaian konfigurasi. |
--keep-artifacts artifact[,artifact[..]]
|
Menentukan daftar artefak yang dipisahkan koma yang akan disimpan. Jika tidak ada yang ditentukan, semua artefak akan disimpan. |
--enable-sparse-encoding
|
Mengaktifkan encoding entri sparse menggunakan hierarki penelusuran biner. Opsi ini berguna untuk pengoptimalan ukuran APK, tetapi performa pengambilan resource harus dikorbankan. |
--collapse-resource-names
|
Menciutkan nama resource menjadi satu nilai dalam kumpulan string kunci.
Resource dikecualikan menggunakan perintah no_collapse dalam
file yang ditentukan oleh --resources-config-path .
|
--shorten-resource-paths
|
Mempersingkat jalur resource di dalam APK. |
--resource-path-shortening-map path
|
Menentukan jalur untuk menampilkan peta jalur resource lama ke jalur yang disingkat. |
-v
|
Menambah panjang output. |
-h
|
Menampilkan bantuan alat. |
Convert
Secara default, perintah compile
AAPT mengompilasi resource ke dalam format biner
yang sesuai untuk APK. Anda juga dapat menentukan format protobuf
yang cocok untuk AAB dengan menentukan --proto-format
. Perintah convert
mengonversi APK di antara dua format.
Sintaksis Convert
Sintaksis umum untuk convert
adalah sebagai berikut:
aapt2 convert -o output-file options file[,file[..]]
Contoh berikut mengonversi resource di input.apk
dan membuat APK baru
di output.apk
yang berisi resource format protobuf. Ini menggantikan
representasi tabel datar biasa dengan hierarki penelusuran biner yang lebih ringkas, sehingga menghasilkan
APK yang lebih kecil dengan mengorbankan performa pengambilan:
aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk
Opsi Convert
Gunakan opsi berikut dengan convert
:
Opsi | Deskripsi |
---|---|
-o path
|
Menentukan jalur output untuk APK resource yang tertaut. Flag ini diperlukan karena Anda harus menentukan jalur untuk APK output yang dapat menyimpan resource yang tertaut. |
--output-format [proto|binary]
|
Format output. Nilai yang diterima adalah proto dan
binary . Jika tidak ditetapkan, setelan defaultnya adalah binary .
|
--enable-sparse-encoding
|
Mengaktifkan encoding entri sparse menggunakan hierarki penelusuran biner. Opsi ini berguna untuk pengoptimalan ukuran APK, tetapi performa pengambilan resource harus dikorbankan. |
--keep-raw-values
|
Mempertahankan nilai atribut raw dalam file XML. |
-v
|
Menambah panjang output. |
-h
|
Menampilkan bantuan alat. |
Mode Daemon
AAPT versi 2.19 memperkenalkan mode daemon untuk mengeluarkan perintah. Mode daemon memungkinkan Anda memasukkan beberapa perintah dalam satu sesi AAPT.
Sintaksis Daemon
Mulai mode daemon dengan perintah berikut:
aapt2 daemon
Setelah mode daemon berjalan, Anda dapat memasukkan perintah. Setiap argumen perintah harus berada di baris terpisah, dengan baris kosong di akhir perintah. Keluar dari mode daemon dengan mengetik Control+D.
Pertimbangkan masing-masing perintah compile
berikut:
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/
Perintah ini dapat dimasukkan dalam mode daemon sebagai:
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
Opsi mode Daemon
Satu-satunya opsi untuk mode daemon adalah --trace-folder folder
, yang menghasilkan fragmen rekaman aktivitas JSON systrace
ke folder yang ditentukan.
Versi
Tentukan versi AAPT2 yang Anda gunakan dengan perintah version
:
aapt2 version Android Asset Packaging Tool (aapt) 2.19-8678579
Perubahan perilaku saat menggunakan AAPT2
Sebelum AAPT2, AAPT adalah versi default Android Asset Packaging Tool, yang sekarang tidak digunakan lagi. Meskipun AAPT2 dapat langsung berfungsi dengan project lama, bagian ini menjelaskan beberapa perubahan perilaku yang harus Anda ketahui.
Hierarki elemen dalam manifes Android
Dalam versi AAPT sebelumnya, elemen yang dibuat bertingkat dalam node yang salah pada file AndroidManifest.xml
akan diabaikan atau mengakibatkan munculnya peringatan.
Misalnya, perhatikan contoh berikut:
<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 versi sebelumnya akan mengabaikan tag <action>
yang salah tempat.
Dengan AAPT2, Anda akan menerima error berikut:
AndroidManifest.xml:15: error: unknown element <action> found.
Untuk mengatasi masalah ini, pastikan elemen manifes dibuat bertingkat dengan benar. Untuk mengetahui informasi selengkapnya, baca ringkasan Manifes Aplikasi.
Deklarasi resource
Anda tidak lagi dapat menunjukkan jenis resource dari atribut name
.
Contoh berikut salah mendeklarasikan item resource attr
:
<style name="childStyle" parent="parentStyle"> <item name="attr/my_attr">@color/pink</item> </style>
Mendeklarasikan jenis resource dengan cara ini akan mengakibatkan error build seperti berikut:
Error: style attribute 'attr/attr/my_attr (aka my.package:attr/attr/my_attr)' not found.
Untuk mengatasi error ini, deklarasikan jenis menggunakan type="attr"
secara eksplisit:
<style name="childStyle" parent="parentStyle"> <item type="attr" name="my_attr">@color/pink</item> </style>
Selain itu, saat mendeklarasikan elemen <style>
, induknya juga harus berupa
jenis resource gaya. Jika tidak, Anda akan mendapatkan error seperti berikut:
Error: (...) invalid resource type 'attr' for parent of style
Penggunaan simbol referensi resource @ yang salah
AAPT2 akan menampilkan error build saat Anda menghilangkan atau salah menempatkan simbol
referensi resource (@
). Misalnya, jika Anda menghilangkan simbol saat
menentukan atribut gaya:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... <!-- Note the missing '@' symbol when specifying the resource type. --> <item name="colorPrimary">color/colorPrimary</item> </style>
Saat membuat modul, AAPT2 akan menampilkan error build seperti berikut:
ERROR: expected color but got (raw string) color/colorPrimary
Selain itu, jika Anda salah menyertakan simbol saat mengakses
resource dari namespace android
:
... <!-- When referencing resources from the 'android' namespace, omit the '@' symbol. --> <item name="@android:windowEnterAnimation"/>
Saat membuat modul, AAPT2 akan menampilkan error build seperti berikut:
Error: style attribute '@android:attr/windowEnterAnimation' not found
Konfigurasi library yang salah
Jika aplikasi Anda memiliki dependensi di library pihak ketiga yang dibuat menggunakan
versi lama Android SDK Build Tools,
aplikasi mungkin akan berhenti bekerja pada runtime tanpa menampilkan error atau peringatan apa pun. Error ini
mungkin terjadi karena selama pembuatan library, kolom R.java
dideklarasikan sebagai final
. Akibatnya, semua ID resource disisipkan dalam
class library.
AAPT2 bergantung pada kemampuan untuk menetapkan ulang ID ke resource library saat mem-build
aplikasi Anda. Jika library mengasumsikan ID adalah final
dan menyisipkannya di
DEX library, akan terjadi ketidakcocokan runtime.
Untuk mengatasi error ini, hubungi pembuat library untuk mem-build ulang library menggunakan versi terbaru Android SDK Build Tools dan memublikasikannya lagi.