bundletool

bundletool adalah alat dasar yang digunakan Android Studio, plugin Android Gradle, dan Google Play untuk mem-build Android App Bundle. bundletool dapat mengonversi app bundle menjadi berbagai APK yang di-deploy ke perangkat.

Android SDK Bundle (ASB) dan APK-nya dibuat dengan bundletool. SDK ini juga tersedia sebagai alat command line, sehingga Anda dapat mem-build app bundle dan memaketkan SDK sendiri serta membuat kembali build sisi server Google Play untuk APK aplikasi atau APK SDK yang mendukung runtime.

Download bundletool

Jika belum, download bundletool dari repositori GitHub.

Mem-build dan menguji app bundle

Anda dapat menggunakan Android Studio atau alat command line bundletool untuk mem-build Android App Bundle, lalu menguji pembuatan APK dari app bundle ini.

Mem-build app bundle

Gunakan Android Studio dan plugin Android Gradle untuk mem-build dan menandatangani Android App Bundle. Namun, jika tidak dapat menggunakan IDE (misalnya, karena Anda menggunakan server build berkelanjutan), Anda juga dapat mem-build app bundle dari command line dan menandatanganinya menggunakan jarsigner.

Untuk mengetahui informasi selengkapnya tentang mem-build app bundle dengan bundletool, lihat Mem-build app bundle menggunakan bundletool.

Membuat satu rangkaian APK dari app bundle Anda

Setelah mem-build Android App Bundle, sebaiknya Anda menguji bagaimana Google Play menggunakannya untuk membuat APK dan bagaimana APK tersebut berperilaku saat di-deploy ke sebuah perangkat.

Ada dua cara untuk menguji app bundle:

Bagian ini menjelaskan cara menggunakan bundletool untuk menguji app bundle secara lokal.

Saat bundletool membuat APK dari app bundle Anda, alat tersebut akan menyertakan APK yang dihasilkan dalam penampung yang disebut arsip rangkaian APK, yang menggunakan ekstensi file .apks. Untuk membuat APK yang ditetapkan bagi semua konfigurasi perangkat yang didukung oleh aplikasi Anda dari app bundle, gunakan perintah bundletool build-apks, seperti yang ditunjukkan:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Jika ingin men-deploy APK ke perangkat, Anda juga harus menyertakan informasi penandatanganan aplikasi seperti yang ditunjukkan dalam perintah berikut. Jika Anda tidak menentukan informasi penandatanganan, bundletool akan mencoba menandatangani APK dengan kunci debug untuk Anda.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

Tabel berikut menjelaskan berbagai flag dan opsi yang dapat ditetapkan saat menggunakan perintah bundletool build-apks secara lebih mendetail:

Tabel 1. Opsi untuk perintah bundletool build-apks

Flag Deskripsi
--bundle=path (Wajib) Menentukan jalur app bundle yang di-build menggunakan Android Studio. Untuk mempelajari lebih lanjut, baca Mem-build project Anda.
--output=path (Wajib) Menentukan nama file .apks output, yang berisi semua artefak APK untuk aplikasi Anda. Untuk menguji artefak dalam file ini di perangkat, ikuti langkah-langkah di bagian cara men-deploy APK ke perangkat yang terhubung.
--overwrite Mengganti file output yang ada dengan jalur yang Anda tentukan menggunakan opsi --output. Jika tanda ini tidak disertakan dan file output sudah ada, Anda akan mendapatkan error build.
--aapt2=path Menentukan jalur kustom ke AAPT2. Secara default, bundletool menyertakan versinya sendiri untuk AAPT2.
--ks=path (Opsional) Menentukan jalur ke keystore deployment yang digunakan untuk menandatangani APK. Jika flag ini tidak disertakan, bundletool akan mencoba menandatangani APK Anda dengan kunci penandatanganan debug.
--ks-pass=pass:password
atau
--ks-pass=file:/path/to/file
Menentukan sandi keystore Anda. Jika Anda menentukan sandi dalam teks biasa, kualifikasikan sandi dengan pass:. Jika Anda meneruskan jalur file yang berisi sandi, kualifikasikan dengan file:. Jika Anda menentukan keystore menggunakan tanda --ks tanpa menentukan --ks-pass, bundletool akan meminta sandi dari command line.
--ks-key-alias=alias Menentukan alias dari kunci penandatanganan yang ingin Anda gunakan.
--key-pass=pass:password
atau
--key-pass=file:/path/to/file
Menentukan sandi untuk kunci penandatanganan. Jika Anda menentukan sandi dalam teks biasa, kualifikasikan sandi dengan pass:. Jika Anda meneruskan jalur file yang berisi sandi, kualifikasikan dengan file:.

Jika sandi ini sama dengan sandi untuk keystore, Anda dapat menghilangkan tanda ini.

--connected-device Menginstruksikan bundletool untuk mem-build APK yang menargetkan konfigurasi perangkat yang terhubung. Jika tanda ini tidak disertakan, bundletool akan membuat APK untuk semua konfigurasi perangkat yang didukung oleh aplikasi Anda.
--device-id=serial-number Jika ada lebih dari satu perangkat yang terhubung, gunakan tanda ini untuk menentukan ID serial perangkat tempat Anda ingin men-deploy aplikasi.
--device-spec=spec_json Menyediakan jalur ke file .json yang menentukan konfigurasi perangkat yang ingin Anda targetkan. Untuk mempelajari lebih lanjut, buka bagian tentang cara Membuat dan menggunakan file JSON spesifikasi perangkat.
--mode=universal Menetapkan mode ke universal. Gunakan opsi ini jika Anda ingin bundletool mem-build satu APK yang menyertakan semua kode dan resource aplikasi Anda, sehingga APK tersebut kompatibel dengan semua konfigurasi perangkat yang didukung oleh aplikasi Anda.

Catatan: bundletool hanya menyertakan modul fitur yang menentukan <dist:fusing dist:include="true"/> dalam manifesnya dalam APK universal. Untuk mempelajari lebih lanjut, baca manifes modul fitur.

Ingat bahwa APK ini berukuran lebih besar dari APK yang dioptimalkan untuk konfigurasi perangkat tertentu. Namun, APK ini lebih mudah dibagikan kepada penguji internal yang, misalnya, ingin menguji aplikasi Anda pada beberapa konfigurasi perangkat.

--local-testing Mengaktifkan app bundle untuk pengujian lokal. Pengujian lokal memungkinkan siklus pengujian berulang yang cepat tanpa perlu mengupload ke server Google Play.

Untuk contoh cara menguji penginstalan modul menggunakan flag --local-testing, lihat Menguji penginstalan modul secara lokal.

Men-deploy APK ke perangkat yang terhubung

Setelah Anda membuat satu rangkaian APK, bundletool dapat men-deploy kombinasi APK yang tepat dari rangkaian tersebut ke perangkat yang terhubung.

Misalnya, jika Anda memiliki perangkat terhubung yang menjalankan Android 5.0 (API level 21) atau yang lebih tinggi, bundletool akan mengirim APK dasar, APK modul fitur, dan APK konfigurasi yang diperlukan untuk menjalankan aplikasi Anda di perangkat tersebut. Atau, jika perangkat yang terhubung menjalankan Android 4.4 (API level 20) atau lebih rendah, bundletool akan menelusuri multi-APK yang kompatibel untuk di-deploy ke perangkat.

Untuk men-deploy aplikasi dari rangkaian APK, gunakan perintah install-apks dan tentukan jalur rangkaian APK menggunakan flag --apks=/path/to/apks, seperti yang ditunjukkan dalam perintah berikut. Jika ada beberapa perangkat yang terhubung, tentukan perangkat target dengan menambahkan flag --device-id=serial-id.

bundletool install-apks --apks=/MyApp/my_app.apks

Membuat rangkaian APK khusus perangkat

Jika Anda tidak ingin mem-build rangkaian APK untuk semua konfigurasi perangkat yang didukung oleh aplikasi, Anda dapat mem-build APK yang hanya menargetkan konfigurasi perangkat terhubung menggunakan opsi --connected-device, seperti yang ditunjukkan dalam perintah berikut. Jika ada beberapa perangkat yang terhubung, tentukan perangkat target dengan menambahkan flag --device-id=serial-id.

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Membuat dan menggunakan file JSON spesifikasi perangkat

bundletool dapat membuat rangkaian APK yang menargetkan konfigurasi perangkat yang ditentukan oleh file JSON. Untuk membuat file JSON terlebih dahulu bagi perangkat yang terhubung, jalankan perintah berikut:

bundletool get-device-spec --output=/tmp/device-spec.json

bundletool membuat file JSON untuk perangkat Anda di direktori alat. Kemudian, Anda dapat meneruskan file ke bundletool untuk membuat rangkaian APK yang hanya menargetkan konfigurasi yang dijelaskan dalam file JSON tersebut seperti berikut:

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Membuat JSON spesifikasi perangkat secara manual

Jika tidak memiliki akses ke perangkat yang ingin digunakan untuk mem-build rangkaian APK yang ditargetkan, misalnya jika Anda ingin mencoba aplikasi Anda dengan perangkat yang tidak Anda miliki, Anda dapat membuat file JSON secara manual menggunakan format berikut:

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

Kemudian, Anda dapat meneruskan file JSON ini ke perintah bundle extract-apks, seperti yang dijelaskan di bagian sebelumnya.

Mengekstrak APK khusus perangkat dari APK yang sudah ada

Jika Anda sudah memiliki rangkaian APK dan ingin mengekstraknya untuk subset APK yang menargetkan konfigurasi perangkat tertentu, Anda dapat menggunakan perintah extract-apks dan menentukan JSON spesifikasi perangkat, seperti berikut:

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json

Memperkirakan ukuran download APK dalam rangkaian APK

Untuk memperkirakan ukuran download APK dalam rangkaian APK karena akan disalurkan secara terkompresi melalui jaringan, gunakan perintah get-size total:

bundletool get-size total --apks=/MyApp/my_app.apks

Anda dapat mengubah perilaku perintah get-size total menggunakan tanda berikut:

Tabel 2. Opsi untuk perintah get-size total

Flag Deskripsi
--apks=path (Diperlukan) Menentukan jalur file rangkaian APK yang sudah ada yang ukuran downloadnya diukur.
--device-spec=path Menentukan jalur file spesifikasi perangkat (dari get-device-spec atau dibuat secara manual) yang akan digunakan untuk pencocokan. Anda dapat menentukan jalur parsial untuk mengevaluasi rangkaian konfigurasi.
--dimensions=dimensions Menentukan dimensi yang digunakan saat menghitung estimasi ukuran. Menerima daftar yang dipisahkan koma untuk: SDK, ABI, SCREEN_DENSITY, dan LANGUAGE. Untuk mengukur semua dimensi, tentukan ALL.
--instant Menghitung ukuran download APK yang diaktifkan secara instan dan bukan APK yang dapat diinstal. Secara default, bundletool menghitung ukuran download APK yang dapat diinstal.
--modules=modules Menentukan daftar yang dipisahkan koma bagi modul dalam rangkaian APK untuk dipertimbangkan dalam pengukuran. Perintah bundletool otomatis menyertakan setiap modul dependen untuk rangkaian yang ditentukan. Secara default, perintah ini menghitung ukuran download semua modul yang diinstal selama download pertama.

Referensi lainnya

Untuk mempelajari penggunaan bundletool lebih lanjut, tonton App Bundle: Menguji paket dengan bundletool dan Konsol Play.