bundletool

Setelah membuat Android App Bundle, Anda perlu menguji bagaimana Google Play akan menggunakannya untuk menghasilkan APK dan bagaimana APK tersebut berperilaku saat diterapkan ke perangkat. Ada dua cara yang perlu dipertimbangkan untuk menguji app bundle: secara lokal menggunakan fitur command line bundletool, serta melalui Google Play dengan mengupload bundel ke Konsol Play dan menggunakan track pengujian. Halaman ini menjelaskan cara menggunakan bundletool untuk menguji app bundle secara lokal.

bundletool adalah fitur dasar yang digunakan oleh Gradle, Android Studio, dan Google Play untuk membuat Android App Bundle atau mengonversi app bundle menjadi berbagai APK yang diterapkan ke perangkat. bundletool juga tersedia sebagai fitur command line sehingga Anda dapat membuat ulang, memeriksa, dan memverifikasi build sisi server Google Play untuk APK Anda.

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

Secara default, IDE tidak menggunakan app bundle untuk menerapkan aplikasi Anda ke perangkat lokal untuk pengujian. Namun, Anda dapat mengubah konfigurasi run/debug dan memilih opsi untuk menerapkan APK dari app bundle untuk melihat pengaruhnya terhadap eksekusi aplikasi Anda.

Mendownload bundletool

Jika belum mendownload bundletool, silakan download dari repositori GitHub.

Menghasilkan satu rangkaian APK dari app bundle Anda

Saat bundletool menghasilkan APK dari app bundle Anda, fitur tersebut akan menyertakannya dalam penampung yang disebut arsip kumpulan APK, yang menggunakan ekstensi file .apks. Untuk menghasilkan APK yang ditetapkan bagi semua konfigurasi perangkat yang didukung oleh aplikasi Anda dari app bundle, gunakan perintah bundletool build-apks, seperti yang ditunjukkan di bawah ini.

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

Jika ingin menerapkan APK ke perangkat, Anda juga harus menyertakan informasi penandatanganan aplikasi seperti yang ditunjukkan dalam perintah di bawah ini. Jika informasi penandatanganan tidak ditentukan, bundletool akan mencoba menandatangani sendiri APK Anda dengan kunci debug.

    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 di bawah ini menjelaskan berbagai penanda dan opsi yang dapat diatur saat menggunakan perintah bundletool build-apks secara lebih mendetail. Hanya --bundle dan --output yang diperlukan; semua penanda lainnya bersifat opsional.

Penanda Deskripsi
--bundle=path (Diperlukan) Menentukan lokasi app bundle yang dibuat menggunakan Android Studio. Untuk mempelajari lebih lanjut, baca Membuat project Anda.
--output=path (Diperlukan) Menentukan nama file `.apks` output, yang memuat semua artefak APK untuk aplikasi Anda. Untuk menguji artefak dalam file ini di sebuah perangkat, buka bagian tentang cara menerapkan APK ke perangkat yang terhubung.
--overwrite Sertakan penanda ini jika Anda ingin menimpa file output yang sudah ada dengan lokasi yang telah ditentukan menggunakan opsi --output. Jika penanda ini tidak disertakan dan file output sudah ada, Anda akan mendapatkan error build.
--aapt2=path Menentukan lokasi khusus ke AAPT2. Secara default, bundletool menyertakan versinya sendiri untuk AAPT2.
--ks=path Menentukan lokasi keystore penerapan yang digunakan untuk menandatangani APK. Penanda ini bersifat opsional. Jika 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 sandi ditentukan menggunakan teks biasa, kualifikasikan sandi dengan pass:. Jika Anda memberikan lokasi file yang berisi sandi, kualifikasikan dengan file:. Jika menentukan keystore menggunakan penanda --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 sandi ditentukan menggunakan teks biasa, kualifikasikan sandi dengan pass:. Jika Anda memberikan lokasi file yang berisi sandi, kualifikasikan dengan file:.

Jika sandi ini sama dengan sandi untuk keystore, Anda boleh tidak menggunakan penanda ini.

--connected-device Instruksikan bundletool untuk mem-build APK yang menargetkan konfigurasi perangkat yang terhubung. Jika Anda tidak menyertakan penanda ini, bundletool akan menghasilkan APK untuk semua konfigurasi perangkat yang didukung oleh aplikasi Anda.
--device-id=serial-number Jika ada lebih dari satu perangkat yang terhubung, gunakan penanda ini untuk menentukan ID serial perangkat tempat Anda ingin menerapkan aplikasi.
--device-spec=spec_json Gunakan penanda ini untuk memberikan lokasi ke file .json yang menentukan konfigurasi perangkat yang ingin ditargetkan. Untuk mempelajari lebih lanjut, buka bagian tentang cara Membuat dan menggunakan file JSON spesifikasi perangkat.
--mode=universal Atur mode ke universal jika Anda ingin bundletool hanya mem-build satu APK yang mencakup 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 dinamis yang menentukan <dist:fusing dist:include="true"/> dalam manifesnya pada APK universal. Untuk mempelajari lebih lanjut, baca tentang Manifes modul fitur Dinamis.

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

Menerapkan APK ke perangkat yang terhubung

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

Misalnya, jika ada perangkat terhubung yang menjalankan Android 5.0 (API level 21) atau lebih tinggi, bundletool akan mendorong APK dasar, APK fitur dinamis, 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 mencari multi-APK yang kompatibel dan menerapkannya ke perangkat.

Untuk menerapkan aplikasi dari rangkaian APK, gunakan perintah install-apks dan tentukan lokasi rangkaian APK menggunakan penanda --apks=/path/to/apks seperti yang ditunjukkan di bawah ini. (Jika ada beberapa perangkat yang terhubung, tentukan perangkat target dengan menambahkan penanda --device-id=serial-id.)

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

Membuat rangkaian APK khusus perangkat

Jika lebih memilih untuk tidak mem-build rangkaian APK untuk semua konfigurasi perangkat yang didukung oleh aplikasi Anda, Anda dapat mem-build APK yang hanya menargetkan konfigurasi perangkat terhubung menggunakan opsi --connected-device seperti yang ditunjukkan di bawah ini. (Jika ada beberapa perangkat yang terhubung, tentukan perangkat target dengan menyertakan penanda --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 mampu menghasilkan 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 akan membuat file JSON untuk perangkat Anda dalam direktori tempat fitur tersebut berada. Anda kemudian dapat meneruskannya ke bundletool untuk menghasilkan 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, seorang teman 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 JSON ini ke perintah bundle extract-apks, seperti yang dijelaskan di bagian sebelumnya.

Mengekstrak APK khusus perangkat dari APK yang sudah ada

Jika sudah memiliki rangkaian APK dan ingin mengekstrak subset APK yang menargetkan konfigurasi perangkat tertentu dari rangkaian tersebut, Anda dapat menggunakan perintah extract-apks dan menentukan JSON spesifikasi perangkat sebagai 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 disajikan 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 penanda berikut:

Penanda Deskripsi
--apks=path (Diperlukan) Menentukan lokasi ke file rangkaian APK yang sudah ada yang ukuran downloadnya diukur.
--device-spec=path Menentukan lokasi ke file spesifikasi perangkat (dari get-device-spec atau dibuat secara manual) yang akan digunakan untuk pencocokan. Anda dapat menentukan lokasi parsial untuk mengevaluasi rangkaian konfigurasi.
--dimensions=dimensions Menentukan dimensi yang digunakan saat menghitung estimasi ukuran. Menerima daftar yang dipisahkan koma bagi: 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 modul dependen apa pun 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, silakan coba resource berikut ini.

Codelab

  • Android App Bundle Pertama Anda, codelab yang membahas prinsip-prinsip dasar Android App Bundle dan memperlihatkan cara cepat untuk mulai membuat milik Anda sendiri menggunakan Android Studio. Codelab ini juga menjelaskan cara menguji app bundle Anda menggunakan bundletool.