Jawaban singkat: ya, Google Play mengizinkan live update untuk code yang 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 tersebut.
Google lebih jelas daripada Apple di sini: pengecualian untuk JavaScript di WebView tertulis langsung dalam kebijakan mereka. Halaman ini mengutipnya, menunjukkan di mana batasnya, dan menjelaskan bagaimana Google menegakkannya.
Ini bukan nasihat hukum. Ini adalah cara kebijakan tersebut dibaca saat ini dan bagaimana ribuan aplikasi menggunakannya di lingkungan produksi.
Apa sebenarnya isi kebijakan Google Play
Aturannya ada di Kebijakan Penyalahgunaan Perangkat dan Jaringan:
Aplikasi yang didistribusikan melalui Google Play tidak boleh memodifikasi, mengganti, atau memperbarui dirinya sendiri menggunakan metode apa pun selain mekanisme pembaruan 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 mesin virtual atau interpreter yang memberikan akses tidak langsung ke API Android (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 dikemas dengan aplikasi) tidak boleh memungkinkan potensi pelanggaran kebijakan Google Play.
Jadi ada dua aturan:
- code native hanya berasal dari Google Play. Tidak ada dex, JAR, atau pustaka native yang diunduh.
- code terinterpretasi bisa berasal dari mana saja, tapi apa yang dilakukannya harus tetap mematuhi semua kebijakan Play.
Lapisan web aplikasi Capacitor adalah JavaScript, HTML, dan CSS yang berjalan di Android WebView, persis contoh yang diberikan Google. Ini masuk 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, teks, dan layar baru di web stack yang sudah ada | Mengganti aplikasi di luar mekanisme update Google Play |
| A/B test dan staged rollout untuk 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 sesuai deskripsi listing |
| Melakukan rollback 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 memiliki targeting versi yang memisahkan bundle yang butuh native code baru dari binary lama.
Cara Google menegakkannya
Google memindai aplikasi untuk mencari executable code yang diunduh dan perilaku yang berubah setelah instalasi. Pengecekan 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 itu 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.
- Pastikan aplikasi konsisten dengan listing Play Store dan formulir Data safety Anda.
- Rilis perubahan native dan peluncuran besar melalui Google Play, dengan staged rollout jika Anda ingin prosesnya bertahap.
Stack mana yang bisa melakukannya di Android?
Bisa tidaknya aplikasi Anda mengirim over-the-air update di Android bergantung pada satu pertanyaan: apakah logika aplikasi Anda diinterpretasikan saat runtime? JavaScript dan code terinterpretasi lainnya: ya. Dex, JAR, dan file native yang diunduh, .so tidak. Framework yang dikompilasi AOT seperti Flutter hanya bisa lewat 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 (di 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, mayoritas buatan sendiri |
| Flutter | Dart dikompilasi AOT menjadi library native | Hanya melalui VM atau interpreter | Shorebird |
| Kotlin / Java Native | dex bytecode di ART | Tidak untuk native code; ya untuk JavaScript di WebView | Remote config, Play Feature Delivery |
| Kotlin / Compose Multiplatform | dex bytecode di ART | Tidak | Remote config, Play Feature Delivery |
| .NET MAUI / Xamarin | runtime .NET plus native libraries yang dikirim dalam APK | Tidak | Hanya remote config |
| Unity / Unreal | C# via IL2CPP atau C++, dikompilasi | Tidak untuk code, ya untuk konten | Asset bundles, Play Asset Delivery, konten script (Lua) |
| Web wrapper / TWA | Website yang dimuat di WebView atau Chrome | Selalu live | Tidak diperlukan |
Capacitor, Ionic, dan Cordova: didukung penuh
UI dan business logic Anda adalah JavaScript yang berjalan di Android WebView—persis contoh yang diberikan kebijakan Google untuk code yang diizinkan. live update menggantikan web bundle; APK, native plugin, dan permission tetap yang Anda publikasikan.
Capgo patuh secara desain karena hanya bisa mengubah web layer. Plugin native baru, izin baru di AndroidManifest.xml dan perubahan dependensi Gradle tetap memerlukan rilis Google Play.
React Native dan Expo: JavaScript bisa, native modules tidak
React Native menjalankan JavaScript bundle di Hermes, yang dianggap sebagai code yang diinterpretasi. Expo Updates dan Microsoft CodePush yang kini sudah pensiun memperbarui bundle tersebut. Tim yang meninggalkan CodePush membutuhkan pengganti. Native module dan upgrade React Native memerlukan rilis baru.
Flutter: hanya melalui VM atau interpreter
Flutter mengompilasi Dart ahead-of-time menjadi libapp.so. Mengunduh versi baru .so secara eksplisit dilarang, jadi Flutter standar tidak bisa memakai live updates. Shorebird menambahkan push code dan menyatakan patuh pada kebijakan Play dengan menjalankan update lewat 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 yang persis dilarang kebijakan tersebut. Alternatif Google sendiri adalah Pengiriman Fitur Play, yang mengunduh modul code melalui Google Play. Jika tidak, code native tidak bisa diubah. Aplikasi Kotlin atau Java yang menjalankan JavaScript di WebView tetap dapat memperbarui code tersebut, karena kebijakan tersebut mengecualikan code yang diinterpretasikan. Logika native lainnya terbatas pada remote config, feature flags, dan server-driven UI.
Unity dan game engine: konten bisa, code tidak
code game dikompilasi. Asset bundle dan Play Asset Delivery menangani konten, dan bahasa scripting yang disematkan seperti Lua diinterpretasikan sebagai code, yang diizinkan kebijakan selama hasilnya mematuhi kebijakan Play.
Web wrapper dan Trusted Web Activities: live secara alami
Trusted Web Activity atau WebView wrapper memuat website Anda, jadi otomatis ter-update setiap kali Anda deploy. Google Play menerima TWA. Offline caching dan native bridge bergantung pada apa yang diimplementasikan wrapper tersebut: TWA dapat menggunakan service worker PWA Anda, dan shell WebView dapat mengekspos JavaScript bridge jika Anda membangunnya. Aplikasi Capacitor yang dibundel membawa web bundle di dalam APK dan menambahkan lapisan plugin yang konsisten untuk live updates.
Apa yang tidak bisa dilakukan stack mana pun di Android
Apa pun framework Anda, live update tidak bisa:
- Mengunduh dex, JAR, APK, atau native
.sofile di luar Google Play - Tambahkan izin Android baru
- Membuat aplikasi melakukan sesuatu yang dilarang kebijakan Google Play
- Mengubah aplikasi menjadi sesuatu yang tidak dijelaskan dalam listing Play Store
Ke mana 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 key
Rilis perbaikan hari ini, bukan setelah review
Live updates Capgo push perubahan JavaScript, HTML, dan CSS ke aplikasi Capacitor Anda dalam hitungan menit, dengan channels, rollback, delta updates, dan end-to-end encryption. Open source dan bisa di-self-host.
bunx @capgo/cli@latest init
Ikuti Mulai Cepat untuk mengirim update pertama Anda.