Jawaban singkat: ya, Google Play mengizinkan live updates untuk code yang bersifat interpreted. Anda bisa push JavaScript, HTML, dan CSS baru ke aplikasi Android tanpa review Play Store baru. Anda tidak bisa download native code seperti dex, JAR, atau .so file.
Google lebih jelas dibanding Apple dalam hal ini: pengecualian untuk JavaScript di WebView tertulis langsung di dalam kebijakan mereka. Halaman ini mengutipnya, menunjukkan batasannya, dan menjelaskan cara Google menerapkannya.
Ini bukan saran hukum. Ini adalah interpretasi kebijakan saat ini dan bagaimana ribuan aplikasi menerapkannya di produksi.
Apa isi kebijakan Google Play sebenarnya
Aturannya ada di dalam kebijakan Device and Network Abuse:
Aplikasi yang didistribusikan via Google Play tidak boleh memodifikasi, mengganti, atau memperbarui dirinya sendiri menggunakan metode apa pun selain mekanisme update Google Play. Demikian pula, aplikasi tidak boleh mengunduh code yang dapat dieksekusi (seperti file dex, JAR, .so) dari sumber selain Google Play. Pembatasan ini tidak berlaku untuk code yang berjalan di virtual machine atau interpreter yang memberikan akses tidak langsung ke Android API (seperti JavaScript di webview atau browser).
Dan tepat setelahnya:
Aplikasi atau code pihak ketiga, seperti SDK, dengan bahasa terinterpretasi (JavaScript, Python, Lua, dll.) yang dimuat saat runtime (misalnya, tidak dibundel dalam aplikasi) tidak boleh memungkinkan adanya potensi pelanggaran kebijakan Google Play.
Jadi ada dua aturan:
- code Native hanya boleh berasal dari Google Play. Tidak boleh ada dex, JAR, atau library native yang diunduh.
- code terinterpretasi bisa berasal dari mana saja, tapi fungsinya harus tetap mematuhi setiap kebijakan Play.
Lapisan web pada aplikasi Capacitor adalah JavaScript, HTML, dan CSS yang berjalan di Android WebView, persis seperti contoh dari Google. Ini termasuk dalam pengecualian.
Di mana batasannya
| Diizinkan dengan live update | Tidak diizinkan dengan live update |
|---|---|
| Perbaikan bug pada JavaScript, HTML, CSS Anda | Mengunduh dex, JAR, APK, atau .so file |
| Perubahan UI, perubahan teks, layar baru pada web stack Anda | Mengganti aplikasi di luar mekanisme update Google Play |
| A/B test dan staged rollout pada web code | Mengirim code yang melanggar kebijakan Play (perilaku menipu, malware, konten yang melanggar kebijakan) |
| Update gambar, terjemahan, konfigurasi | Mengubah aplikasi jadi sesuatu yang tidak dijelaskan di listing |
| Melakukan rollback pada rilis yang bermasalah | Melewati izin atau keamanan Android |
Capgo hanya mengirimkan kolom kiri. Segala hal yang bersifat native, seperti plugin Capacitor baru, izin baru di AndroidManifest.xml, atau dependensi Gradle, tetap memerlukan rilis baru melalui Google Play. Capgo Penargetan versi menjauhkan bundle yang membutuhkan native code baru dari binary lama.
Cara Google menegakkannya
Google memindai aplikasi untuk mencari executable code yang diunduh dan perilaku yang berubah setelah instalasi. Pemeriksaan otomatis mencari pemuatan dex atau library native dari luar APK. JavaScript di dalam WebView tidak memicunya.
Risiko sebenarnya ada pada aturan kedua: jika live update membuat aplikasi melakukan sesuatu yang dilarang kebijakan Play, itu pelanggaran terlepas dari bagaimana code tersebut sampai. Kebijakan Perilaku Menipu juga berlaku untuk aplikasi yang fungsinya berubah setelah review.
Dalam praktiknya:
- Gunakan live updates untuk perbaikan dan iterasi pada aplikasi yang sudah Anda publikasikan.
- Jaga konsistensi aplikasi dengan listing Play Store dan formulir Data safety Anda.
- Rilis perubahan native dan peluncuran besar melalui Google Play, dengan peluncuran bertahap jika Anda ingin rilis secara bertahap.
Stack mana yang bisa melakukannya di Android?
Apakah aplikasi Anda bisa melakukan over-the-air updates di Android bergantung pada satu hal: apakah logika aplikasi Anda diinterpretasikan saat runtime? JavaScript dan code terinterpretasi lainnya, ya. File dex, JAR, dan native yang diunduh, .so tidak. Framework dengan AOT-compiled seperti Flutter hanya bisa melalui VM atau interpreter.
Kompatibilitas live update Android berdasarkan stack
| Stack | Cara code berjalan di Android | Live updates diizinkan? | Tooling |
|---|---|---|---|
| Capacitor | JavaScript, HTML, CSS di Android WebView | Ya | Capgo |
| Ionic (pada Capacitor) | Sama dengan Capacitor | Ya | Capgo |
| Cordova | JavaScript di Android WebView | Ya | Capgo setelah migrasi ke Capacitor, plugin Cordova lama |
| React Native / Expo | bundle JavaScript di Hermes | Ya, hanya JavaScript | Expo Updates, alternatif CodePush self-hosted |
| NativeScript | JavaScript di V8 | Ya, hanya JavaScript | Terbatas, sebagian besar buatan sendiri |
| Flutter | Dart dikompilasi AOT menjadi library native | Hanya via VM atau interpreter | Shorebird |
| Native Kotlin / Java | dex bytecode pada ART | Tidak untuk native code; ya untuk JavaScript di WebView | Konfigurasi jarak jauh, Play Feature Delivery |
| Kotlin / Compose Multiplatform | dex bytecode pada ART | Tidak | Konfigurasi jarak jauh, Play Feature Delivery |
| .NET MAUI / Xamarin | Runtime .NET plus library native di dalam APK | Tidak | Hanya remote config |
| Unity / Unreal | C# via IL2CPP atau C++, terkompilasi | Tidak untuk code, ya untuk konten | Asset bundles, Play Asset Delivery, konten skrip (Lua) |
| Web wrapper / TWA | Website yang dimuat di WebView atau Chrome | Selalu live | Tidak butuh |
Capacitor, Ionic dan Cordova: tercover penuh
UI dan business logic Anda adalah JavaScript yang berjalan di Android WebView, contoh persis dari kebijakan Google untuk code yang diizinkan. live update menggantikan web bundle; APK, native plugins, dan permission tetap sama dengan yang Anda publikasikan.
Capgo dirancang agar patuh karena hanya bisa mengubah web layer. Plugin native baru, izin baru di AndroidManifest.xml dan perubahan dependensi Gradle tetap butuh rilis Google Play.
React Native dan Expo: JavaScript bisa, native modules tidak
React Native menjalankan JavaScript bundle di Hermes, yang tergolong code yang diinterpretasikan. Expo Updates dan Microsoft CodePush yang kini sudah pensiun memperbarui bundle tersebut. Tim yang pindah dari CodePush butuh pengganti. Native modules dan upgrade React Native butuh rilis baru.
Flutter: hanya melalui VM atau interpreter
Flutter mengompilasi Dart secara ahead-of-time menjadi libapp.so. Mengunduh versi baru .so dilarang secara eksplisit, jadi Flutter standar tidak bisa pakai live updates. Shorebird menambahkan push code dan menyatakan patuh pada kebijakan Play dengan menjalankan update melalui Dart virtual machine. Baca selengkapnya di live updates untuk aplikasi Flutter.
Native Kotlin, Java dan Kotlin Multiplatform: tidak ada update code
Memuat file dex atau JAR yang diunduh dengan DexClassLoader adalah perilaku tepat yang dilarang kebijakan tersebut. Alternatif dari Google adalah Pengiriman Fitur secara Playful, yang mengunduh modul code melalui Google Play. Jika tidak, code native tidak bisa berubah. Aplikasi Kotlin atau Java yang menjalankan JavaScript di WebView tetap bisa memperbarui code tersebut, karena kebijakan ini mengecualikan code yang bersifat interpreted. Logika native lainnya terbatas pada remote config, feature flags, dan server-driven UI.
Unity dan game engine: konten boleh, code tidak
Game code dikompilasi. Asset bundles dan Play Asset Delivery menangani konten, sementara bahasa scripting seperti Lua bersifat interpreted code, yang diizinkan kebijakan selama hasilnya mematuhi kebijakan Play.
Web wrapper dan Trusted Web Activities: bersifat live secara alami
Trusted Web Activity atau WebView wrapper memuat website Anda, jadi ia akan terupdate setiap kali Anda deploy. Google Play menerima TWA. Offline caching dan native bridge bergantung pada apa yang diimplementasikan wrapper tersebut: TWA dapat menggunakan PWA service worker Anda, dan shell WebView dapat mengekspos JavaScript bridge jika Anda membangunnya. Aplikasi Capacitor yang dibundle menyertakan web bundle di dalam APK dan menambahkan lapisan plugin yang konsisten untuk live updates.
Batasan stack pada Android
Apa pun framework Anda, live update tidak bisa:
- Download dex, JAR, APK, atau file native
.sofile di luar Google Play - Menambah permission Android baru
- Membuat app melakukan hal yang dilarang kebijakan Google Play
- Mengubah app menjadi sesuatu yang tidak sesuai deskripsi Play Store
Langkah selanjutnya
- Jawaban iOS: Apakah Apple mengizinkan live updates tanpa review App Store?
- Checklist kepatuhan: Checklist kepatuhan OTA Google Play
- Strategi rilis: Kepatuhan Google Play: strategi update utama
Rilis perbaikan hari ini, tanpa menunggu review
Capgo live updates push perubahan JavaScript, HTML, dan CSS ke aplikasi Capacitor Anda dalam hitungan menit, lengkap dengan fitur channels, rollbacks, delta updates, dan end-to-end encryption. Bersifat open source dan bisa di-self-host.
bunx @capgo/cli@latest init
Ikuti quickstart untuk mengirim update pertama Anda.