Model penayangan aplikasi Google Play menggunakan Android App Bundle untuk membuat dan menayangkan APK yang dioptimalkan untuk setiap konfigurasi perangkat pengguna, sehingga pengguna hanya perlu mendownload kode dan resource yang diperlukan untuk menjalankan aplikasi Anda.
Play Feature Delivery menggunakan kemampuan app bundle tingkat lanjut, sehingga memungkinkan fitur tertentu aplikasi Anda untuk dikirim secara kondisional atau didownload secara on demand. Untuk melakukannya, pertama-tama Anda perlu memisahkan fitur ini dari aplikasi dasar ke dalam modul fitur.
Konfigurasi build modul fitur
Saat Anda membuat modul fitur baru menggunakan Android Studio, IDE akan menerapkan plugin Gradle berikut ke file build.gradle
modul.
// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.
plugins {
id 'com.android.dynamic-feature'
}
Banyak properti yang tersedia untuk plugin aplikasi standar juga tersedia untuk modul fitur. Bagian berikut ini menjelaskan properti yang boleh dan tidak boleh Anda sertakan dalam konfigurasi build modul fitur.
Yang tidak disertakan dalam konfigurasi build modul fitur
Karena setiap modul fitur bergantung pada modul dasar, modul fitur ini juga mewarisi konfigurasi tertentu. Jadi, Anda harus menghapus hal berikut dalam file build.gradle
modul fitur:
- Konfigurasi penandatanganan: App bundle ditandatangani menggunakan konfigurasi penandatanganan yang Anda tetapkan dalam modul dasar.
- Properti
minifyEnabled
: Anda dapat mengaktifkan penyingkatan kode untuk seluruh project aplikasi hanya dari konfigurasi build modul dasar. Jadi, Anda harus menghapus properti ini dari modul fitur. Namun, Anda dapat menetapkan aturan ProGuard tambahan untuk setiap modul fitur. versionCode
danversionName
: Saat membuat app bundle, Gradle menggunakan informasi versi aplikasi yang disediakan modul dasar. Anda harus menghapus properti ini dari filebuild.gradle
modul fitur Anda.
Menetapkan hubungan ke modul dasar
Saat membuat modul fitur, Android Studio akan membuatnya terlihat
di modul dasar dengan menambahkan properti android.dynamicFeatures
ke
file build.gradle
modul dasar, seperti yang ditunjukkan di bawah ini:
// In the base module’s build.gradle file.
android {
...
// Specifies feature modules that have a dependency on
// this base module.
dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}
Selain itu, Android Studio menyertakan modul dasar sebagai dependensi modul fitur, seperti yang ditunjukkan di bawah ini:
// In the feature module’s build.gradle file:
...
dependencies {
...
// Declares a dependency on the base module, ':app'.
implementation project(':app')
}
Menentukan aturan ProGuard tambahan
Meski hanya konfigurasi build modul dasar yang dapat mengaktifkan penyingkatan kode untuk project aplikasi, Anda dapat memberikan aturan ProGuard khusus dengan setiap modul fitur menggunakan properti proguardFiles
, seperti ditunjukkan di bawah ini.
android.buildTypes {
release {
// You must use the following property to specify additional ProGuard
// rules for feature modules.
proguardFiles 'proguard-rules-dynamic-features.pro'
}
}
Perhatikan bahwa aturan ProGuard ini akan digabung dengan aturan dari modul lain (termasuk modul dasar) pada waktu build. Jadi, meskipun setiap modul fitur dapat menetapkan sekumpulan aturan baru, aturan tersebut berlaku untuk semua modul dalam project aplikasi.
Men-deploy aplikasi
Saat mengembangkan aplikasi yang mendukung modul fitur, Anda dapat
men-deploy aplikasi Anda ke perangkat yang terhubung seperti biasanya dengan memilih
Run > Run dari panel menu (atau dengan mengklik Run di
toolbar).
Jika project aplikasi Anda menyertakan satu atau beberapa modul fitur, Anda dapat memilih fitur yang akan disertakan saat men-deploy aplikasi dengan mengubah konfigurasi run/debug yang ada sebagai berikut:
- Dari panel menu, pilih Run > Edit Configurations.
- Dari panel kiri dialog Run/Debug Configurations, pilih konfigurasi Android App yang Anda inginkan.
- Di bagian Dynamic features to deploy di tab General, centang kotak di samping setiap modul fitur yang ingin Anda sertakan saat men-deploy aplikasi.
- Klik OK.
Secara default, Android Studio tidak men-deploy aplikasi Anda menggunakan app bundle. Sebaliknya, IDE membuat dan menginstal APK ke perangkat Anda yang dioptimalkan untuk kecepatan deployment, bukan ukuran APK. Untuk mengonfigurasi Android Studio agar dapat membuat dan men-deploy APK dan pengalaman instan dari app bundle, modifikasi konfigurasi run/debug Anda.
Menggunakan modul fitur untuk pengiriman kustom
Manfaat unik dari modul fitur adalah kemampuan untuk menyesuaikan bagaimana dan kapan berbagai fitur aplikasi didownload ke perangkat yang menjalankan Android 5.0 (API level 21) atau yang lebih tinggi. Misalnya, untuk mengurangi ukuran download awal aplikasi, Anda dapat mengonfigurasi fitur tertentu untuk didownload secara on demand atau hanya oleh perangkat yang mendukung kemampuan tertentu, seperti kemampuan mengambil gambar atau mendukung fitur augmented reality.
Meskipun Anda mendapatkan download yang sangat optimal secara default saat mengupload aplikasi Anda sebagai app bundle, opsi pengiriman fitur yang lebih canggih dan dapat disesuaikan memerlukan konfigurasi tambahan dan modularisasi fitur aplikasi Anda menggunakan modul fitur. Artinya, modul fitur menyediakan elemen dasar untuk membuat fitur modular yang dapat Anda konfigurasi untuk didownload sesuai kebutuhan.
Pertimbangkan aplikasi yang memungkinkan pengguna Anda membeli dan menjual barang di marketplace online. Anda dapat memodularisasi masing-masing fungsi aplikasi berikut ke dalam modul fitur yang terpisah:
- Login dan pembuatan akun
- Penjelajahan marketplace
- Penempatan item untuk dijual
- Pemrosesan pembayaran
Tabel di bawah ini menjelaskan berbagai opsi pengiriman yang didukung modul fitur, dana bagaimana opsi tersebut dapat digunakan untuk mengoptimalkan ukuran download awal dari aplikasi marketplace contoh.
Opsi pengiriman | Perilaku | Contoh kasus penggunaan | Memulai |
---|---|---|---|
Pengiriman saat penginstalan | Modul fitur yang tidak mengonfigurasi salah satu opsi pengiriman yang dijelaskan di atas akan didownload saat penginstalan aplikasi, secara default. Ini adalah
perilaku penting karena artinya Anda dapat mengadopsi opsi pengiriman tingkat lanjut
secara bertahap. Misalnya, Anda dapat memanfaatkan modularisasi fitur aplikasi dan mengaktifkan pengiriman on demand hanya setelah Anda sepenuhnya mengimplementasikan download on demand menggunakan Library Play Feature Delivery.
Selain itu, aplikasi Anda dapat meminta untuk meng-uninstal fitur di lain waktu. Jadi, jika Anda memerlukan fitur tertentu saat penginstalan aplikasi, tetapi bukan setelahnya, Anda dapat mengurangi ukuran penginstalan dengan meminta penghapusan fitur dari perangkat. |
Jika aplikasi memiliki aktivitas pelatihan tertentu, seperti panduan interaktif tentang cara membeli dan menjual barang di marketplace, Anda dapat memasukkan fitur tersebut saat penginstalan aplikasi, secara default.
Namun, untuk mengurangi ukuran penginstalan, aplikasi dapat meminta penghapusan fitur setelah pengguna menyelesaikan pelatihan. |
Lakukan modularisasi aplikasi Anda menggunakan modul
fitur yang tidak mengonfigurasi opsi pengiriman lanjutan.
Untuk mempelajari cara mengurangi ukuran aplikasi yang terinstal dengan menghapus modul fitur tertentu yang mungkin tidak diperlukan lagi oleh pengguna, baca Mengelola modul terinstal. |
Pengiriman on demand | Mengizinkan aplikasi Anda meminta dan mendownload modul fitur sesuai kebutuhan. | Jika hanya 20% dari pengguna aplikasi marketplace memposting barang untuk dijual, strategi
yang baik untuk mengurangi ukuran download awal bagi sebagian besar pengguna
adalah menjadikan fungsi pengambilan gambar, termasuk deskripsi
barang, dan penempatan barang yang akan dijual sebagai download
on demand. Artinya, Anda dapat mengonfigurasi modul fitur untuk
fungsi penjualan aplikasi, yang hanya akan didownload saat pengguna menunjukkan
minat menempatkan barang untuk dijual ke marketplace.
Selain itu, jika pengguna berhenti menjual barang setelah periode waktu tertentu, aplikasi dapat mengurangi ukuran penginstalannya dengan meminta untuk meng-uninstal fitur tersebut. |
Buat modul fitur dan konfigurasi pengiriman on demand. Selanjutnya, aplikasi Anda dapat menggunakan Library Play Feature Delivery untuk meminta mendownload modul on demand. |
Pengiriman bersyarat | Memungkinkan Anda menentukan persyaratan perangkat pengguna tertentu, seperti fitur hardware, lokalitas, dan API level minimum untuk menentukan apakah fitur termodularisasi didownload saat penginstalan aplikasi. | Jika aplikasi marketplace memiliki jangkauan global, Anda mungkin perlu mendukung metode pembayaran yang hanya populer di wilayah atau penduduk lokal tertentu. Untuk mengurangi ukuran download aplikasi awal, Anda dapat membuat modul fitur yang terpisah untuk memproses jenis metode pembayaran tertentu dan menginstalnya secara kondisional pada perangkat pengguna berdasarkan lokalitas yang terdaftar. | Buat modul fitur dan konfigurasi pengiriman bersyarat. |
Pengiriman instan | Google Play Instan
memungkinkan pengguna berinteraksi dengan aplikasi Anda tanpa perlu menginstal aplikasi
di perangkat mereka. Sebaliknya, pengguna dapat mencoba aplikasi Anda melalui tombol "Coba
Sekarang" di Google Play Store atau URL yang Anda buat. Format pengiriman konten ini memudahkan Anda meningkatkan interaksi pengguna dengan aplikasi Anda.
Dengan pengiriman instan, Anda dapat menggunakan Google Play Instan untuk mengizinkan pengguna langsung mencoba fitur tertentu dari aplikasi Anda tanpa perlu menginstalnya. |
Pertimbangkan game yang menyertakan beberapa level awal game dalam modul fitur ringan. Anda dapat mengaktifkan secara instan modul tersebut sehingga pengguna dapat langsung mencoba game melalui link URL atau tombol “Coba Sekarang", tanpa menginstal aplikasi. | Buat modul fitur dan
konfigurasi
pengiriman instan. Selanjutnya, aplikasi Anda dapat menggunakan
Library Play Feature Delivery untuk meminta
mendownload modul on demand.
Ingat, modularisasi fitur aplikasi menggunakan modul fitur hanyalah langkah pertama. Untuk mendukung Google Play Instan, ukuran download modul dasar aplikasi Anda dan fitur aktif instan yang diberikan harus memenuhi batasan ukuran yang ketat. Untuk mempelajari lebih lanjut, baca Mengaktifkan pengalaman instan dengan mengurangi ukuran aplikasi atau game. |
Membuat URI untuk resource
Jika Anda ingin mengakses resource yang disimpan di modul fitur menggunakan
URI, berikut cara membuat URI resource modul fitur menggunakan
Uri.Builder()
:
Kotlin
val uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build()
Java
String uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build().toString();
Setiap bagian jalur menuju resource dibuat saat runtime, yang memastikan bahwa namespace yang benar dibuat setelah APK terpisah dimuat.
Sebagai contoh cara pembuatan URI, asumsikan Anda memiliki aplikasi dan modul fitur dengan nama berikut:
- Nama paket aplikasi:
com.example.my_app_package
- Nama paket resource pada fitur:
com.example.my_app_package.my_dynamic_feature
Jika resId
dalam cuplikan kode di atas merujuk pada resource file mentah bernama
“my_video” di modul fitur, kode Uri.Builder()
di atas akan
menampilkan hal berikut:
android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video
URI ini kemudian dapat digunakan oleh aplikasi Anda untuk mengakses resource pada modul fitur.
Untuk memvalidasi jalur di URI, Anda dapat menggunakan APK Analyzer guna memeriksa APK modul fitur dan menentukan nama paketnya:
Gambar 2. Menggunakan APK Analyzer untuk memeriksa nama paket dalam kompilasi file resource.
Pertimbangan untuk modul fitur
Dengan modul fitur, Anda dapat meningkatkan kecepatan build dan kecepatan teknis, serta menyesuaikan pengiriman fitur aplikasi secara ekstensif untuk mengurangi ukuran aplikasi. Namun, ada beberapa batasan dan kasus ekstrem yang perlu diingat saat menggunakan modul fitur:
- Menginstal 50 modul fitur atau lebih pada satu perangkat, melalui pengiriman bersyarat atau on demand, dapat menyebabkan masalah performa. Modul saat penginstalan, yang tidak dikonfigurasi sebagai dapat dilepas, otomatis disertakan dalam modul dasar dan hanya dihitung sebagai satu modul fitur pada setiap perangkat.
- Batasi jumlah modul yang Anda konfigurasi sebagai dapat dilepas untuk pengiriman saat penginstalan menjadi 10 atau kurang. Jika tidak, waktu download dan penginstalan aplikasi akan bertambah.
- Hanya perangkat yang menjalankan Android 5.0 (API level 21) dan dukungan yang lebih tinggi yang dapat mendownload dan menginstal fitur on demand. Agar fitur Anda tersedia untuk Android versi sebelumnya, aktifkan Fusing saat membuat modul fitur.
- Aktifkan SplitCompat, sehingga aplikasi Anda memiliki akses ke modul fitur yang didownload yang dikirimkan secara on demand.
- Modul fitur seharusnya tidak menentukan aktivitas dalam manifesnya dengan
android:exported
yang disetel ketrue
. Ini karena tidak adanya jaminan bahwa perangkat mendownload modul fitur saat aplikasi lain mencoba meluncurkan aktivitas. Selain itu, aplikasi Anda harus mengonfirmasi bahwa fitur telah didownload sebelum mencoba mengakses kode dan resource-nya. Untuk mempelajari lebih lanjut, baca Mengelola modul terinstal. - Karena Play Feature Delivery mengharuskan Anda memublikasikan aplikasi menggunakan app bundle, pastikan Anda mengetahui masalah umum pada app bundle.
Referensi manifes modul fitur
Saat membuat modul fitur baru menggunakan Android Studio, IDE menyertakan sebagian besar atribut manifes yang dibutuhkan modul untuk berperilaku seperti modul fitur. Selain itu, beberapa atribut diinjeksikan oleh sistem build pada waktu kompilasi, jadi Anda tidak perlu menentukan atau memodifikasinya sendiri. Tabel berikut menjelaskan atribut manifes yang penting untuk modul fitur.
Atribut | Deskripsi |
---|---|
<manifest |
Ini adalah blok
<manifest> standar Anda. |
xmlns:dist="http://schemas.android.com/apk/distribution" |
Menentukan namespace XML dist: baru yang dijelaskan lebih lanjut di bawah. |
split="split_name" |
Saat Android Studio mem-build app bundle Anda, atribut ini juga termasuk. Jadi, Anda tidak boleh menyertakan atau memodifikasi
sendiri atribut ini.
Menentukan nama modul, yang ditentukan aplikasi Anda saat meminta modul on demand menggunakan Library Play Feature Delivery. Cara Gradle menentukan nilai untuk atribut ini: Secara default, jika Anda membuat modul fitur menggunakan Android Studio, IDE akan menggunakan apa yang Anda tentukan sebagai Module name untuk mengidentifikasi modul sebagai subproject Gradle dalam file setelan Gradle Anda.
Jika Anda mem-build app bundle, Gradle akan menggunakan elemen terakhir dari
jalur subproject untuk memasukkan atribut manifes dalam manifes
modul tersebut. Misalnya, jika Anda membuat modul fitur baru di
direktori |
android:isFeatureSplit="true | false"> |
Saat Android Studio mem-build app bundle Anda, atribut ini juga termasuk. Jadi, Anda tidak boleh menyertakan
atau memodifikasi atribut ini secara manual.
Menentukan bahwa modul ini adalah modul fitur.
Manifes dalam modul dasar dan APK konfigurasi
menghapus atribut ini atau menyetelnya ke |
<dist:module |
Elemen XML baru ini mendefinisikan atribut yang menentukan cara modul dikemas dan didistribusikan sebagai APK. |
dist:instant="true | false" |
Menentukan apakah modul harus tersedia melalui
Google Play Instan sebagai
pengalaman instan.
Jika aplikasi Anda menyertakan satu atau beberapa modul fitur yang diaktifkan secara instan, Anda juga harus mengaktifkan modul dasar secara instan. Saat menggunakan Android Studio 3.5 atau yang lebih tinggi, IDE melakukan cara ini saat Anda membuat modul fitur yang diaktifkan secara instan. Anda tidak dapat menyetel elemen XML ini ke |
dist:title="@string/feature_name" |
Menentukan judul modul yang ditampilkan kepada pengguna. Misalnya, perangkat dapat menampilkan judul ini ketika meminta konfirmasi download.
Anda perlu menyertakan resource string untuk judul ini dalam file |
<dist:fusing dist:include="true | false" />
|
Menentukan apakah modul akan disertakan dalam multi-APK yang
menargetkan perangkat yang menjalankan Android 4.4 (API level 20) dan lebih rendah.
Selain itu, jika Anda
menggunakan |
<dist:delivery> |
Mengenkapsulasi opsi yang menyesuaikan pengiriman modul, seperti yang ditampilkan di bawah ini. Perlu diingat, setiap modul fitur hanya boleh mengonfigurasi satu jenis opsi pengiriman khusus ini. |
<dist:install-time> |
Menentukan apakah modul harus tersedia pada waktu penginstalan. Ini adalah
perilaku default untuk modul fitur yang tidak menentukan
jenis opsi pengiriman khusus lainnya.
Untuk mempelajari download saat penginstalan lebih lanjut, baca Mengonfigurasi pengiriman saat penginstalan. Node ini juga dapat menentukan kondisi yang membatasi modul ke perangkat yang memenuhi persyaratan tertentu, seperti fitur perangkat, negara pengguna, atau API level minimum. Untuk mempelajari lebih lanjut, baca Mengonfigurasi pengiriman bersyarat. |
<dist:removable dist:value="true | false" /> |
Jika tidak disetel atau disetel ke Jika Default-nya adalah Catatan: Fitur ini hanya tersedia saat menggunakan plugin Android Gradle 4.2 atau saat menggunakan bundletool v1.0 dari command line. |
</dist:install-time> |
|
<dist:on-demand/> |
Menentukan apakah modul harus tersedia sebagai download
on demand. Artinya, modul tidak akan tersedia pada waktu penginstalan, tetapi
aplikasi Anda dapat meminta untuk mendownloadnya nanti.
Untuk mempelajari download on demand lebih lanjut, baca Mengonfigurasi pengiriman on demand. |
</dist:delivery> |
|
<application
|
Jika modul fitur tidak menghasilkan file DEX—artinya, tidak berisi kode yang dikompilasi ke dalam format file DEX—Anda harus melakukan langkah-langkah berikut (jika tidak, Anda dapat mengalami error runtime):
|
Referensi tambahan
Untuk mempelajari lebih lanjut cara menggunakan modul fitur, lihat referensi berikut.
Postingan blog
- Fitur-fitur baru untuk membantu Anda mengembangkan, merilis, dan menumbuhkan bisnis di Google Play
- Update Android App Bundle terbaru termasuk API bahasa tambahan
- Patchwork Plaid, yakni sebuah artikel tentang modularisasi
Video
- Pengiriman yang Dapat Disesuaikan dengan App Bundle dan Berbagi Build Pengujian dengan Mudah
- Alat Baru untuk Mengoptimalkan Ukuran Aplikasi dan Meningkatkan Jumlah Penginstalan di Google Play
Persyaratan layanan dan keamanan data
Dengan mengakses atau menggunakan Library Play Feature Delivery, Anda menyetujui Persyaratan Layanan Software Development Kit Play Core. Harap baca dan pahami semua persyaratan dan kebijakan yang berlaku sebelum mengakses library.
Keamanan Data
Library Play Core adalah antarmuka runtime aplikasi Anda dengan Google Play Store. Dengan demikian, saat menggunakan Play Core di aplikasi, Play Store akan menjalankan prosesnya sendiri yang mencakup penanganan data seperti yang diatur oleh Persyaratan Layanan Google Play. Informasi di bawah ini menjelaskan cara library Play Core menangani data untuk memproses permintaan tertentu dari aplikasi.
API bahasa tambahan
Data yang dikumpulkan selama penggunaan | Daftar bahasa yang terinstal |
Tujuan pengumpulan data | Data yang dikumpulkan akan digunakan untuk menyampaikan berbagai versi bahasa aplikasi dan mempertahankan bahasa yang diinstal setelah aplikasi diupdate. |
Enkripsi data | Data dienkripsi. |
Berbagi data | Data tidak akan ditransfer kepada pihak ketiga mana pun. |
Penghapusan data | Data akan dihapus setelah periode retensi data tetap. |
Play Feature Delivery
Data yang dikumpulkan selama penggunaan |
Metadata perangkat Versi aplikasi |
Tujuan pengumpulan data | Data yang dikumpulkan akan digunakan untuk menyediakan modul yang tepat ke perangkat dan untuk mempertahankan modul yang diinstal setelah update serta pencadangan dan pemulihan. |
Enkripsi data | Data dienkripsi. |
Berbagi data | Data tidak akan ditransfer kepada pihak ketiga mana pun. |
Penghapusan data | Data akan dihapus setelah periode retensi data tetap. |
Meskipun kami berupaya bersikap setransparan mungkin, Anda sepenuhnya bertanggung jawab untuk memutuskan cara merespons formulir bagian keamanan data Google Play terkait praktik pengumpulan, berbagi, dan keamanan data pengguna aplikasi.