Pengantar
Play untuk AI di Perangkat menghadirkan manfaat Android App Bundle dan penayangan Google Play ke distribusi model ML kustom sehingga Anda dapat meningkatkan performa model dengan lebih sedikit kompleksitas ekosistem tanpa biaya tambahan. Dengan alat ini, Anda dapat memublikasikan satu artefak ke Play yang berisi kode, aset, dan model ML Anda serta memilih dari sejumlah mode penayangan dan opsi penargetan.
Manfaat
- Upload satu artefak publikasi ke Google Play dan delegasikan hosting, penayangan, update, dan penargetan ke Play tanpa biaya tambahan.
- Kirim model ML Anda pada waktu penginstalan, dimulai segera, atau on-demand.
- Pengiriman saat penginstalan dapat menjamin bahwa model yang sangat besar ada saat aplikasi Anda dibuka. Model Anda akan diinstal sebagai APK.
- Pengiriman dimulai segera terjadi secara otomatis di latar belakang setelah aplikasi Anda diinstal. Pengguna dapat membuka aplikasi Anda sebelum model Anda didownload sepenuhnya. Model Anda akan didownload ke ruang penyimpanan internal aplikasi.
- Pengiriman on-demand memungkinkan Anda meminta model saat runtime, yang berguna jika model hanya diperlukan untuk alur penggunaan tertentu. Model Anda akan didownload ke ruang penyimpanan internal aplikasi Anda.
- Kirimkan varian model ML Anda yang ditargetkan ke perangkat tertentu berdasarkan model perangkat, properti sistem, atau RAM.
- Pastikan update aplikasi tetap kecil dan dioptimalkan dengan patching otomatis Play, yang berarti hanya perbedaan file yang perlu didownload.
Pertimbangan
- Dengan menggunakan Play untuk AI di Perangkat, Anda menyetujui persyaratan dalam Perjanjian Distribusi Developer Google Play dan Persyaratan Layanan Software Development Kit Play Core.
- Developer yang berpartisipasi dalam program akses awal diharapkan dapat mengevaluasi Play untuk AI di Perangkat dan memberikan masukan ke Google Play.
- Model yang didownload oleh Play untuk AI di Perangkat hanya dapat digunakan oleh aplikasi yang mendownload model tersebut. Model tidak boleh ditawarkan ke aplikasi lain, misalnya melalui koneksi layanan.
- Setiap paket AI dapat berukuran hingga 1,5 GB, berdasarkan ukuran download yang dikompresi. Ukuran aplikasi kumulatif maksimum dari versi aplikasi apa pun yang dihasilkan dari app bundle adalah 4 GB.
- Aplikasi yang berukuran lebih dari 1 GB harus menetapkan Level SDK minimum ke 21 atau yang lebih tinggi.
- Selama program akses awal, Play untuk AI di Perangkat dapat berubah sewaktu-waktu.
Cara menggunakan Play untuk AI di Perangkat
Play untuk AI di Perangkat menggunakan paket AI. Anda mengemas model kustom yang siap didistribusikan dalam paket AI di app bundle Anda. Anda dapat memilih apakah paket AI harus dikirimkan pada waktu penginstalan, dimulai segera, atau on demand.
Dengan memaketkan paket AI dengan app bundle, Anda dapat menggunakan semua alat pengujian dan rilis Play yang ada, seperti jalur pengujian dan peluncuran bertahap untuk mengelola distribusi aplikasi dengan model kustom.
Paket AI diupdate bersama dengan biner aplikasi. Jika rilis aplikasi baru Anda tidak membuat perubahan pada paket AI, proses patching otomatis Play akan memastikan pengguna tidak perlu mendownloadnya lagi. Play hanya akan mendownload yang diubah saat mengupdate aplikasi.
Paket AI hanya berisi model. Library Java/Kotlin dan native tidak diizinkan. Jika Anda perlu mengirimkan library atau kode untuk menjalankan model ML, pindahkan ke modul dasar atau modul fitur. Anda dapat mengonfigurasi modul fitur agar memiliki setelan download dan penargetan yang sama dengan paket AI.
Menggunakan LiteRT dan MediaPipe dengan paket AI
Anda dapat menggunakan LiteRT dan MediaPipe dengan paket AI. Paketkan model Anda dalam paket AI, lalu akses menggunakan petunjuk untuk paket waktu penginstalan atau untuk paket fast-follow dan on-demand.
Bacaan lebih lanjut:
- Memulai LiteRT
- Aplikasi contoh menunjukkan cara mengemas model LiteRT dalam paket AI dan memuatkannya saat runtime.
- Ada banyak model LiteRT terlatih yang dapat Anda gunakan dalam paket AI untuk memulai.
- Memulai MediaPipe
- Untuk paket fast-follow dan on demand, Anda dapat menggunakan
AssetCache.java
untuk memuat aset (misalnya.
.binarypb
) menurut jalur filenya. - Untuk paket saat penginstalan, Anda dapat menggunakan AndroidAssetUtil.java.
- Untuk paket fast-follow dan on demand, Anda dapat menggunakan
AssetCache.java
untuk memuat aset (misalnya.
Mulai menggunakan paket AI
Pada tingkat tinggi, berikut cara mulai menggunakan Play untuk AI di Perangkat:
- Berikan ID akun developer Play Anda ke Google Play untuk bergabung ke EAP.
- Paketkan model Anda ke dalam paket AI ke dalam Android App Bundle dan tentukan cara pengiriman paket AI.
- [Opsional] Jika ingin mengirimkan model yang berbeda ke perangkat yang berbeda, Anda dapat mengonfigurasi penargetan perangkat untuk paket AI. Misalnya, Anda dapat mengirimkan paket AI A ke model perangkat tertentu, paket AI B ke perangkat dengan RAM minimal 6 GB, dan semua perangkat lainnya tidak dapat menerima model.
- [Opsional] Jika Anda menggunakan pengiriman on demand atau fast-follow, integrasikan Library Play AI Delivery ke dalam aplikasi untuk mendownload paket AI sesuai kebutuhan.
- Uji dan rilis app bundle Anda ke Google Play.
Berikan ID akun developer Play Anda
Karena fitur ini masih dalam akses awal, akun developer Anda harus diizinkan untuk memiliki akses ke Play untuk AI di Perangkat. Konfirmasi ID akun developer Play dan nama paket aplikasi kepada pengelola partner Google Play atau anggota tim Play untuk AI di Perangkat. Tentukan apakah Anda akan menargetkan model ke perangkat tertentu (ini adalah langkah 3 dari bagian sebelumnya). Saat ini, kami mengundang partner Play tertentu untuk menguji fitur ini.
Memeriksa versi Plugin Android Gradle
Untuk menggunakan paket AI, pastikan versi Plugin Android Gradle (AGP) Anda setidaknya 8.8. Versi ini dikemas dengan Android Studio Ladybug 2.
Mengekstrak model ke dalam paket AI
Android Studio tidak diperlukan untuk langkah-langkah berikut.
- Di direktori level teratas project Anda, buat direktori untuk paket AI. Nama direktori ini digunakan sebagai nama paket AI. Nama paket AI harus diawali dengan huruf dan hanya boleh berisi huruf, angka, dan garis bawah.
Dalam direktori paket AI, buat file
build.gradle
dan tambahkan kode berikut. Pastikan untuk menentukan nama paket AI dan satu jenis pengiriman saja:// In the AI pack's build.gradle file: plugins { id 'com.android.ai-pack' } aiPack { packName = "ai-pack-name" // Directory name for the AI pack dynamicDelivery { deliveryType = "[ install-time | fast-follow | on-demand ]" } }
Dalam file
build.gradle
aplikasi project, tambahkan nama setiap paket AI dalam project Anda seperti yang ditunjukkan di bawah ini:// In the app build.gradle file: android { ... assetPacks = [":ai-pack-name", ":ai-pack2-name"] }
Dalam file
settings.gradle
project, sertakan semua paket AI dalam project Anda seperti yang ditunjukkan di bawah ini:// In the settings.gradle file: include ':app' include ':ai-pack-name' include ':ai-pack2-name'
Di dalam paket AI, buat direktori
src/main/assets/
.Tempatkan model Anda di direktori
src/main/assets
. Anda juga dapat membuat subdirektori di sini. Struktur direktori untuk aplikasi Anda sekarang akan terlihat seperti berikut:build.gradle
settings.gradle
app/
ai-pack-name/build.gradle
ai-pack-name/src/main/assets/your-model-directories
Tambahkan kode untuk memuat dan menjalankan model Anda. Cara melakukannya akan bergantung pada mode pengiriman paket AI Anda. Lihat petunjuk untuk waktu penginstalan dan fast-follow/on-demand di bawah.
[Opsional] Konfigurasi penargetan perangkat untuk mengirimkan model yang berbeda ke perangkat yang berbeda.
Buat Android App Bundle menggunakan Gradle. Dalam app bundle yang dihasilkan, direktori level root kini menyertakan hal berikut:
ai-pack-name/manifest/AndroidManifest.xml
: Mengonfigurasi mode pengiriman dan ID paket AIai-pack-name/assets/your-model-directories
: Direktori yang berisi semua aset yang dikirim sebagai bagian dari paket AI
Gradle menghasilkan manifes untuk setiap paket AI dan menghasilkan direktori
assets/
untuk Anda.
Mengonfigurasi pengiriman saat penginstalan
Paket AI yang dikonfigurasi sebagai waktu penginstalan akan segera tersedia saat aplikasi diluncurkan. Gunakan Java AssetManager API untuk mengakses paket AI yang ditayangkan dalam mode ini:
import android.content.res.AssetManager; ... Context context = createPackageContext("com.example.app", 0); AssetManager assetManager = context.getAssets(); InputStream is = assetManager.open("model-name");
Mengonfigurasi pengiriman fast-follow dan sesuai permintaan
Untuk mendownload paket AI dengan pengiriman fast-follow atau sesuai permintaan, gunakan Library Play AI Delivery.
Mendeklarasikan dependensi pada Library Play AI Delivery
Dalam file build.gradle
aplikasi, deklarasikan dependensi pada Library Pengiriman
Play AI:
dependencies {
...
implementation "com.google.android.play:ai-delivery:0.1.1-alpha01"
}
Memeriksa status
Setiap paket AI disimpan dalam folder terpisah dalam penyimpanan internal aplikasi. Gunakan metode getPackLocation()
untuk menentukan folder utama paket AI. Metode ini akan menampilkan nilai berikut:
Nilai yang ditampilkan | Status |
---|---|
Objek AiPackLocation yang valid |
Folder utama paket AI siap untuk akses langsung di assetsPath() |
null |
Paket AI tidak dikenal atau paket AI tidak tersedia |
Mendapatkan informasi download tentang paket AI
Gunakan metode
getPackStates()
untuk menentukan ukuran download dan apakah paket sudah
didownload.
Task<AiPackStates> getPackStates(List<String> packNames)
getPackStates()
adalah metode asinkron yang menampilkan Task<AiPackStates>
.
Metode
packStates()
dari objek AiPackStates
akan menampilkan Map<String, AiPackState>
. Peta
ini berisi status setiap paket AI yang diminta, yang terkunci berdasarkan namanya:
Map<String, AiPackState> AiPackStates#packStates()
Permintaan akhir ditunjukkan oleh hal berikut:
final String aiPackName = "myAiPackName"; aiPackManager .getPackStates(Collections.singletonList(aiPackName)) .addOnCompleteListener(new OnCompleteListener<AiPackStates>() { @Override public void onComplete(Task<AiPackStates> task) { AiPackStates aiPackStates; try { aiPackStates = task.getResult(); AiPackState aiPackState = aiPackStates.packStates().get(aiPackName); } catch (RuntimeExecutionException e) { Log.d("MainActivity", e.getMessage()); return; });
Metode
AiPackState
berikut memberikan ukuran paket AI, jumlah yang didownload sejauh ini (jika
diminta), dan jumlah yang telah ditransfer ke aplikasi:
Untuk mendapatkan status paket AI, gunakan metode
status()
, yang menampilkan status sebagai bilangan bulat yang sesuai dengan kolom
konstan di class
AiPackStatus
. Paket AI yang belum diinstal akan menampilkan status
AiPackStatus.NOT_INSTALLED
.
Jika permintaan gagal, gunakan
metode errorCode()
,
yang nilai return-nya sesuai dengan bidang
konstan di class
AiPackErrorCode
.
Instal
Gunakan metode
fetch()
untuk mendownload paket AI untuk pertama kalinya atau meminta update paket
AI yang perlu diselesaikan:
Task<AiPackStates> fetch(List<String> packNames)
Metode ini menampilkan objek AiPackStates
yang berisi daftar paket serta status dan ukuran download awal.
Jika paket AI yang diminta melalui fetch()
sudah didownload, status download akan ditampilkan dan tidak ada download tambahan yang dimulai.
Memantau status download
Anda harus mengimplementasikan
AiPackStateUpdateListener
untuk melacak progres penginstalan paket AI. Update status dikelompokkan
per paket untuk mendukung pelacakan status setiap paket AI. Anda dapat mulai menggunakan paket AI yang tersedia sebelum semua download permintaan Anda lainnya selesai.
void registerListener(AiPackStateUpdateListener listener) void unregisterListener(AiPackStateUpdateListener listener)
Hasil download berukuran besar
Jika hasil download lebih besar dari 200 MB dan pengguna tidak menggunakan Wi-Fi, download tidak akan dimulai sebelum pengguna memberikan izin secara eksplisit untuk melanjutkan download dengan menggunakan koneksi data seluler. Demikian pula, jika hasil download berukuran besar dan pengguna terputus dari Wi-Fi, download akan dijeda dan izin eksplisit diperlukan untuk melanjutkan proses melalui koneksi data seluler. Paket yang dijeda berstatus WAITING_FOR_WIFI
. Untuk memicu alur UI yang meminta pengguna memberikan persetujuan, gunakan metode showConfirmationDialog()
.
Perhatikan jika aplikasi tidak memanggil metode ini, download akan dijeda dan akan dilanjutkan secara otomatis hanya saat pengguna kembali berada dalam koneksi Wi-Fi.
Konfirmasi pengguna yang diperlukan
Jika paket memiliki status REQUIRES_USER_CONFIRMATION
, download tidak akan
lanjut sampai pengguna menyetujui dialog yang ditampilkan dengan
showConfirmationDialog()
.
Status ini dapat terjadi jika aplikasi tidak dikenali oleh Play—misalnya, jika
aplikasi di-sideload. Perhatikan bahwa memanggil
showConfirmationDialog()
dalam hal ini akan menyebabkan aplikasi diupdate. Setelah update, Anda harus
meminta paket AI lagi.
Berikut adalah contoh penerapan pemroses:
AiPackStateUpdateListener aiPackStateUpdateListener = new AiPackStateUpdateListener() { private final ActivityResultLauncher<IntentSenderRequest> activityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartIntentSenderForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { if (result.getResultCode() == RESULT_OK) { Log.d(TAG, "Confirmation dialog has been accepted."); } else if (result.getResultCode() == RESULT_CANCELED) { Log.d(TAG, "Confirmation dialog has been denied by the user."); } } }); @Override public void onStateUpdate(AiPackState aiPackState) { switch (aiPackState.status()) { case AiPackStatus.PENDING: Log.i(TAG, "Pending"); break; case AiPackStatus.DOWNLOADING: long downloaded = aiPackState.bytesDownloaded(); long totalSize = aiPackState.totalBytesToDownload(); double percent = 100.0 * downloaded / totalSize; Log.i(TAG, "PercentDone=" + String.format("%.2f", percent)); break; case AiPackStatus.TRANSFERRING: // 100% downloaded and assets are being transferred. // Notify user to wait until transfer is complete. break; case AiPackStatus.COMPLETED: // AI pack is ready to use. Run the model. break; case AiPackStatus.FAILED: // Request failed. Notify user. Log.e(TAG, aiPackState.errorCode()); break; case AiPackStatus.CANCELED: // Request canceled. Notify user. break; case AiPackStatus.WAITING_FOR_WIFI: case AiPackStatus.REQUIRES_USER_CONFIRMATION: if (!confirmationDialogShown) { aiPackManager.showConfirmationDialog(activityResultLauncher); confirmationDialogShown = true; } break; case AiPackStatus.NOT_INSTALLED: // AI pack is not downloaded yet. break; case AiPackStatus.UNKNOWN: Log.wtf(TAG, "AI pack status unknown") break; } } }
Atau, Anda dapat menggunakan metode getPackStates()
untuk mendapatkan status download saat ini.
AiPackStates
berisi progres download, status download, dan kode error kegagalan.
Mengakses paket AI
Anda dapat mengakses paket AI menggunakan panggilan sistem file setelah permintaan download
mencapai
status
COMPLETED
. Gunakan metode
getPackLocation()
untuk mendapatkan folder utama paket AI.
Paket AI disimpan di direktori assets
dalam direktori utama paket AI.
Anda dapat memperoleh jalur ke direktori assets
dengan menggunakan metode praktis
assetsPath()
.
Gunakan metode berikut untuk memperoleh jalur ke aset tertentu:
private String getAbsoluteAiAssetPath(String aiPack, String relativeAiAssetPath) { AiPackLocation aiPackPath = aiPackManager.getPackLocation(aiPack); if (aiPackPath == null) { // AI pack is not ready return null; } String aiAssetsFolderPath = aiPackPath.assetsPath(); // equivalent to: FilenameUtils.concat(aiPackPath.path(), "assets"); String aiAssetPath = FilenameUtils.concat(aiAssetsFolderPath, relativeAiAssetPath); return aiAssetPath; }
Mengonfigurasi penargetan perangkat
Anda dapat mengikuti petunjuk penargetan perangkat untuk menentukan perangkat atau grup perangkat yang akan menerima paket AI Anda.
Metode Play AI Delivery API lainnya
Berikut ini adalah beberapa metode API tambahan yang mungkin ingin Anda gunakan pada aplikasi.
Membatalkan permintaan
Gunakan
cancel()
untuk membatalkan permintaan paket AI aktif. Perhatikan bahwa permintaan ini adalah operasi dengan upaya terbaik.
Menghapus paket AI
Gunakan
removePack()
untuk menjadwalkan penghapusan paket AI.
Mendapatkan lokasi beberapa paket AI
Gunakan
getPackLocations()
untuk membuat kueri status beberapa paket AI sekaligus, yang menampilkan peta paket
AI dan lokasinya. Peta yang ditampilkan oleh getPackLocations()
berisi
entri untuk setiap paket yang saat ini didownload dan sudah diupdate.
Penargetan perangkat
Penargetan perangkat memberi Anda kontrol yang lebih baik atas bagian app bundle mana yang dikirim ke perangkat tertentu. Misalnya, Anda dapat memastikan bahwa model besar hanya dikirim ke perangkat dengan RAM tinggi atau Anda dapat mengirimkan versi model yang berbeda ke perangkat yang berbeda.
Anda dapat menargetkan properti perangkat seperti:
- Sistem di chip
- Model perangkat
- RAM Perangkat
- Fitur sistem
Ringkasan langkah-langkah yang diperlukan
Langkah-langkah berikut diperlukan untuk mengaktifkan penargetan perangkat:
- Tentukan grup perangkat Anda dalam file XML.
- Tentukan bagian paket yang harus dikirim ke grup perangkat mana.
- [Opsional] Uji konfigurasi Anda secara lokal.
- Upload paket Anda (yang berisi file XML) ke Google Play.
Memeriksa versi Plugin Android Gradle
Untuk menggunakan penargetan perangkat, pastikan versi Plugin Android Gradle (AGP) Anda setidaknya 8.10.0-alpha01. Ini dikemas dengan Android Studio Meerkat 2, yang berada di canary.
Mengaktifkan fitur ini di Plugin Android Gradle
Penargetan perangkat harus diaktifkan secara eksplisit dalam file gradle.properties
Anda:
android.experimental.enableDeviceTargetingConfigApi=true
Membuat file XML konfigurasi penargetan perangkat
File konfigurasi penargetan perangkat adalah file XML tempat Anda menentukan
grup perangkat kustom. Misalnya, Anda dapat menentukan grup perangkat bernama
qti_v79
yang berisi semua perangkat dengan sistem on chip Qualcomm SM8750:
<config:device-targeting-config
xmlns:config="http://schemas.android.com/apk/config">
<config:device-group name="qti_v79">
<config:device-selector>
<config:system-on-chip manufacturer="QTI" model="SM8750"/>
</config:device-selector>
</config:device-group>
</config:device-targeting-config>
Grup perangkat terdiri dari maksimal 5 pemilih perangkat. Perangkat disertakan dalam grup perangkat jika memenuhi salah satu pemilih perangkatnya.
Pemilih perangkat dapat memiliki satu atau beberapa properti perangkat. Perangkat akan dipilih jika cocok dengan semua properti perangkat pemilih.
Jika perangkat cocok dengan beberapa grup, perangkat akan menerima konten untuk grup yang ditentukan terlebih dahulu dalam file XML. Urutan yang Anda tentukan untuk grup dalam file XML adalah urutan prioritas Anda.
Jika tidak cocok dengan grup mana pun, perangkat akan menerima grup "lainnya" default. Grup ini dibuat secara otomatis dan tidak boleh ditentukan secara eksplisit.
Properti perangkat yang tersedia
- device_ram: Persyaratan RAM perangkat
- min_bytes (inklusif): RAM minimum yang diperlukan (dalam byte)
- max_bytes (eksklusif): RAM maksimum yang diperlukan (dalam byte)
- included_device_ids: Model perangkat yang akan disertakan dalam pemilih ini
(maks. 10.000 device_ids per grup). Properti ini terpenuhi jika
perangkat cocok dengan device_id apa pun dalam daftar.
- build_brand: Produsen perangkat
- build_device: Kode model perangkat
- excluded_device_ids: Model perangkat yang akan dikecualikan dalam pemilih ini
(maks. 10.000 device_ids per grup). Properti ini terpenuhi jika
perangkat tidak cocok dengan device_id dalam daftar.
- build_brand: Produsen perangkat
- build_device: Kode model perangkat
required_system_features: Fitur yang diperlukan perangkat agar disertakan oleh pemilih ini (maks. 100 fitur per grup). Perangkat harus memiliki semua fitur sistem dalam daftar ini untuk memenuhi properti ini.
Referensi fitur sistem
- name: Fitur sistem
forbidden_system_features: Fitur yang tidak boleh disertakan oleh pemilih ini (maks. 100 fitur per grup). Jika perangkat memiliki salah satu fitur sistem dalam daftar ini, perangkat tidak memenuhi properti ini.
Referensi fitur sistem
- name: Fitur sistem
system-on-chip: Sistem di chip yang akan disertakan dalam pemilih ini. Perangkat harus memiliki chip dalam daftar ini untuk memenuhi properti ini.
- manufacturer: Produsen sistem di chip
- model: Model sistem dalam chip
Berikut adalah contoh yang menunjukkan semua kemungkinan properti perangkat:
<config:device-targeting-config
xmlns:config="http://schemas.android.com/apk/config">
<config:device-group name="myCustomGroup1">
<config:device-selector ram-min-bytes="8000000000">
<config:included-device-id brand="google" device="redfin"/>
<config:included-device-id brand="google" device="sailfish"/>
<config:included-device-id brand="good-brand"/>
<config:excluded-device-id brand="google" device="caiman"/>
<config:system-on-chip manufacturer="Sinclair" model="ZX80"/>
<config:system-on-chip manufacturer="Commodore" model="C64"/>
</config:device-selector>
<config:device-selector ram-min-bytes="16000000000"/>
</config:device-group>
<config:device-group name="myCustomGroup2">
<config:device-selector ram-min-bytes="4000000000" ram-max-bytes="8000000000">
<config:required-system-feature name="android.hardware.bluetooth"/>
<config:required-system-feature name="android.hardware.location"/>
<config:forbidden-system-feature name="android.hardware.camera"/>
<config:forbidden-system-feature name="mindcontrol.laser"/>
</config:device-selector>
</config:device-group>
</config:device-targeting-config>
Kode model perangkat dan produsen perangkat resmi
Anda dapat menemukan pemformatan yang benar untuk produsen dan kode model perangkat menggunakan Katalog Perangkat di Konsol Google Play, dengan salah satu dari opsi berikut:
Memeriksa setiap perangkat menggunakan Katalog Perangkat, dan menemukan produsen dan kode model di lokasi seperti yang ditunjukkan pada contoh di bawah ini (Untuk Google Pixel 4a, produsennya adalah "Google" dan kode modelnya adalah "sunfish")'
Mendownload CSV perangkat yang didukung, dan menggunakan Produsen dan Kode Model untuk masing-masing kolom build_brand dan build_device.
Menyertakan file konfigurasi penargetan perangkat dalam app bundle
Tambahkan kode berikut ke file build.gradle
modul utama Anda:
android {
...
bundle {
deviceTargetingConfig = file('device_targeting_config.xml')
deviceGroup {
enableSplit = true // split bundle by #group
defaultGroup = "other" // group used for standalone APKs
}
}
...
}
device_targeting_config.xml
adalah jalur file konfigurasi Anda yang relatif terhadap
modul utama. Tindakan ini memastikan bahwa file konfigurasi dikemas dengan
app bundle Anda.
Klausa deviceGroup
memastikan bahwa APK yang dihasilkan dari app bundle Anda
dibagi menurut grup perangkat.
Menggunakan penargetan perangkat untuk paket AI
Anda dapat mempertahankan ukuran yang dioptimalkan di perangkat dengan hanya mengirimkan model besar ke perangkat yang dapat menjalankannya.
Bagi paket AI menurut grup perangkat dengan mengambil direktori paket AI yang ada yang dibuat pada langkah terakhir, dan menambahkan postfix ke folder yang sesuai (seperti yang dijelaskan di bawah) dengan #group_myCustomGroup1, #group_myCustomGroup2, dsb. Saat menggunakan paket AI di aplikasi, Anda tidak perlu menangani folder dengan postfix (dengan kata lain, postfix akan otomatis dihapus selama proses build).
Setelah langkah sebelumnya, tampilannya mungkin seperti ini:
...
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup1/
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup2/
...
Dalam contoh ini, Anda akan mereferensikan ai-pack-name/assets/image-classifier/
tanpa postfix apa pun.
Perangkat di myCustomGroup1
akan menerima semua aset di
image-classifier#group_myCustomGroup1/
, sedangkan perangkat di myCustomGroup2
akan
menerima semua aset di image-classifier#group_myCustomGroup2/
.
Perangkat yang bukan milik myCustomGroup1
atau myCustomGroup2
akan
menerima paket ai-pack-name
kosong.
Hal ini karena perangkat yang tidak cocok dengan grup perangkat mana pun akan menerima
varian default paket AI Anda. Hal ini mencakup apa pun yang tidak ada di dalam
direktori dengan #group_suffix
.
Setelah mendownload paket AI, Anda dapat memeriksa apakah model Anda ada dengan menggunakan AssetManager untuk paket saat penginstalan atau AiPackManager untuk paket fast-follow dan on demand. Contoh untuk melakukannya ditampilkan untuk semua mode pengiriman di aplikasi contoh.
Menggunakan penargetan perangkat untuk modul fitur
Anda juga dapat menggunakan penargetan perangkat untuk modul fitur. Daripada membagi modul fitur menurut grup perangkat, Anda menentukan apakah seluruh modul harus dikirim berdasarkan keanggotaan grup perangkat.
Untuk mengirimkan modul fitur ke perangkat yang termasuk dalam myCustomGroup1
atau
myCustomGroup2
, ubah AndroidManifest.xml
-nya:
<manifest ...>
...
<dist:module dist:title="...">
<dist:delivery>
<dist:install-time>
<dist:conditions>
<dist:device-groups>
<dist:device-group dist:name="myCustomGroup1"/>
<dist:device-group dist:name="myCustomGroup2"/>
</dist:device-groups>
...
</dist:conditions>
</dist:install-time>
</dist:delivery>
</dist:module>
...
</manifest>
Menguji secara lokal
Sebelum membuat rilis untuk app bundle baru, Anda dapat menguji secara lokal dengan Fitur Berbagi Aplikasi Internal atau Bundletool.
Sharing Aplikasi Internal
Berbagi Aplikasi Internal memungkinkan Anda menggunakan app bundle untuk membuat URL dengan cepat yang dapat Anda ketuk di perangkat lokal untuk menginstal persis apa yang akan diinstal Google Play untuk perangkat tersebut jika versi aplikasi tersebut aktif di jalur pengujian atau produksi.
Lihat petunjuk berbagi aplikasi secara internal.
Bundletool
Atau, Anda dapat membuat APK menggunakan
bundletool
(1.18.0 atau yang lebih baru) dan melakukan sideload
ke perangkat Anda. Ikuti langkah-langkah berikut untuk menguji aplikasi secara lokal menggunakan
bundletool:
Build app bundle Anda dengan Android Studio atau bundletool.
Buat APK dengan tanda
--local-testing
:java -jar bundletool-all.jar build-apks --bundle=path/to/your/bundle.aab \ --output=output.apks --local-testing
Hubungkan perangkat dan jalankan
bundletool
untuk melakukan sideload APK:# Example without Device Targeting Configuration java -jar bundletool.jar install-apks --apks=output.apks
# Example with Device Targeting Configuration (you must specify which groups the connected device belongs to) java -jar bundletool.jar install-apks --apks=output.apks --device-groups=myCustomGroup1,myCustomGroup2
Batasan pengujian lokal dengan bundletool
Berikut adalah batasan pengujian lokal dengan bundletool:
- Paket
fast-follow
berperilaku sebagai paketon-demand
. Artinya, paket tidak akan diambil secara otomatis saat aplikasi di-sideload. Developer perlu memintanya secara manual saat aplikasi dimulai; ini tidak memerlukan perubahan kode apa pun di aplikasi Anda. - Paket diambil dari penyimpanan eksternal, bukan dari Play, sehingga Anda tidak dapat menguji perilaku kode jika terjadi error jaringan.
- Pengujian lokal tidak mencakup skenario tunggu untuk Wi-Fi.
- Pembaruan tidak didukung. Sebelum menginstal versi baru build, uninstal versi sebelumnya secara manual.
Memastikan APK yang benar sedang diinstal
Gunakan metode berikut untuk memastikan hanya APK yang benar yang diinstal di perangkat
adb shell pm path {packageName}
Anda akan melihat yang seperti:
package:{...}/base.apk
package:{...}/split_config.en.apk
package:{...}/split_config.xxhdpi.apk
package:{...}/split_main_ai-pack-name.apk
package:{...}/split_main_ai-pack-name.config.group_myCustomGroup1.apk
Perhatikan bahwa Anda hanya akan melihat APK dalam daftar ini, yang dibuat dari modul fitur dan paket AI waktu penginstalan. Paket AI on demand dan fast-follow tidak diinstal sebagai APK.
Menguji dan merilis di Google Play
Sebaiknya uji aplikasi Anda secara menyeluruh di Google Play dengan jalur pengujian internal.
Setelah melakukannya, Anda dapat merilis update aplikasi secara bertahap ke produksi dengan peluncuran bertahap.
Contoh aplikasi yang menggunakan Play untuk AI di Perangkat
Hubungi partner manager Google Play Anda untuk mendapatkan akses ke aplikasi contoh kami.
Contoh ini menunjukkan cara menggunakan setiap mode penayangan serta konfigurasi penargetan perangkat. Lihat bagian pengujian lokal untuk memulai.
Berikan masukan
Peserta dalam program akses awal harus melaporkan masalah dan memberikan masukan. Anda dapat menghubungi partner manager Google Play atau menghubungi tim Play untuk AI di Perangkat.
Konten terkait
Pelajari Android App Bundle lebih lanjut dan baca referensi untuk AI Delivery SDK.