Salta al contenuto principale
Tutorial

Google consente i Live Updates senza la revisione del Play Store?

Sì. Google Play consente aggiornamenti over-the-air di code interpretato come JavaScript in una WebView, ma vieta il download di file dex, JAR o .so. Ecco la policy esatta e come si applica alle app Capacitor.

Google consente Live Update senza revisione su Play Store? Capgo illustrazione blog

Risposta breve: sì, Google Play consente live update di code interpretato. Puoi spingere nuovo JavaScript, HTML e CSS su un'app Android senza una nuova revisione su Play Store. Non puoi scaricare code nativo come dex, JAR o .so file.

Qui Google è più chiaro di Apple: l'esenzione per JavaScript in un WebView è scritta direttamente nella policy. Questa pagina la cita, mostra dove sta il confine e spiega come Google la applica.

Questa non è una consulenza legale. È l'interpretazione attuale della policy e il modo in cui migliaia di app la utilizzano in produzione.

Cosa dice realmente la policy di Google Play

La regola si trova nella policy Device and Network Abuse:

Un'app distribuita tramite Google Play non può modificare, sostituire o aggiornare se stessa con metodi diversi dal meccanismo di aggiornamento di Google Play. Allo stesso modo, un'app non può scaricare code eseguibile (come file dex, JAR, .so) da fonti diverse da Google Play. Questa restrizione non si applica a code che gira in una macchina virtuale o in un interprete, dove uno dei due fornisce accesso indiretto alle API Android (come JavaScript in una webview o in un browser).

E subito dopo:

App o code di terze parti, come gli SDK, che utilizzano linguaggi interpretati (JavaScript, Python, Lua, ecc.) caricati a runtime (ad esempio, non inclusi nel pacchetto dell'app) non devono consentire potenziali violazioni delle policy di Google Play.

Quindi ci sono due regole:

  1. Il code nativo proviene solo da Google Play. Nessun download di dex, JAR o librerie native.
  2. Il code interpretato può provenire da qualsiasi fonte, ma ciò che esegue deve comunque rispettare ogni policy di Play.

Il web layer di un'app Capacitor è JavaScript, HTML e CSS eseguiti nella WebView di Android, esattamente l'esempio che fa Google. Rientra nell'esenzione.

Dove sta la linea

Consentito con live update Non consentito con live update
Bug fix in JavaScript, HTML o CSS Download di dex, JAR, APK o .so file
Modifiche UI, testi o nuove schermate nel web stack esistente Sostituire l'app al di fuori del meccanismo di aggiornamento di Google Play
A/B test e rollout graduali di code web Rilasciare code che violano le policy di Play (comportamenti ingannevoli, malware, contenuti non conformi)
Aggiornamento di immagini, traduzioni e config Trasformare l'app in qualcosa che non è descritto nella scheda
Fare il rollback di un rilascio errato Aggirare i permessi o la sicurezza di Android

Capgo distribuisce solo la colonna di sinistra. Qualsiasi elemento nativo, come un nuovo plugin Capacitor, un nuovo permesso in AndroidManifest.xml, o una dipendenza Gradle, richiede ancora un nuovo rilascio tramite Google Play. Capgo targeting delle versioni tiene lontani dai vecchi binari i bundle che richiedono nuovi code nativi.

Come Google applica le regole

Google scansiona le app alla ricerca di code eseguibili scaricati e di comportamenti che cambiano dopo l'installazione. I controlli automatici cercano il caricamento di dex o librerie native dall'esterno dell'APK. Il JavaScript in una WebView non li attiva.

Il rischio reale è la seconda regola: se un live update spinge l'app a fare qualcosa vietato dalle policy di Play, è una violazione a prescindere da come è arrivato il code. La policy sul comportamento ingannevole si applica anche alle app la cui funzione cambia dopo la revisione.

In pratica:

  • Usa i live updates per fix e iterazioni sull'app che hai già pubblicato.
  • Mantieni l'app coerente con la scheda del Play Store e il modulo Sicurezza dei dati.
  • Rilascia modifiche native e grandi lanci tramite Google Play, con rollout graduali se li vuoi graduali.

Quali stack possono farlo su Android?

La possibilità di rilasciare aggiornamenti over-the-air su Android dipende da una domanda: la logica dell'app viene interpretata a runtime? JavaScript e gli altri code interpretati: sì. File dex, JAR e nativi scaricati, .so no. I framework compilati AOT come Flutter sono compatibili solo tramite VM o interprete.

Compatibilità live update su Android per stack

Stack Come viene eseguito il code su Android Aggiornamenti live consentiti? Strumenti
Capacitor JavaScript, HTML, CSS nella WebView di Android Sì Capgo
Ionic (su Capacitor) Uguale a Capacitor Sì Capgo
Cordova JavaScript nella WebView di Android Sì Capgo dopo la migrazione a Capacitor, plugin Cordova legacy
React Native / Expo Bundle JavaScript su Hermes Sì, solo JavaScript Expo Updates, alternative self-hosted a CodePush
NativeScript JavaScript su V8 Sì, solo JavaScript Limitata, in gran parte sviluppata internamente
Flutter Dart compilato AOT in una libreria nativa Solo tramite VM o interprete Shorebird
Kotlin / Java nativo Bytecode dex su ART No per code nativo; sì per JavaScript in una WebView Remote config, Play Feature Delivery
Kotlin / Compose Multiplatform Bytecode dex su ART No Remote config, Play Feature Delivery
.NET MAUI / Xamarin Runtime .NET più librerie native incluse nell'APK No Solo remote config
Unity / Unreal C# via IL2CPP o C++, compilati No per code, sì per i contenuti Asset bundle, Play Asset Delivery, contenuti scriptati (Lua)
Web wrapper / TWA Sito caricato in una WebView o Chrome Sempre live Nessuno richiesto

Capacitor, Ionic e Cordova: copertura totale

La tua UI e la business logic sono JavaScript in esecuzione nella WebView di Android, l'esempio esatto che la policy di Google riporta per code consentiti. Un live update sostituisce il web bundle; l'APK, i plugin nativi e i permessi restano quelli pubblicati.

Capgo è conforme by design, perché può modificare solo il layer web. Nuovi plugin nativi, nuovi permessi in AndroidManifest.xml e modifiche alle dipendenze Gradle richiedono comunque una release su Google Play.

React Native ed Expo: JavaScript sì, moduli nativi no

React Native esegue un bundle JavaScript su Hermes, che viene considerato code interpretato. Expo Updates e l'ormai dismesso Microsoft CodePush aggiornano quel bundle. I team che abbandonano CodePush serve un sostituto. I moduli nativi e gli aggiornamenti di React Native richiedono un nuovo rilascio.

Flutter: solo tramite VM o interprete

Flutter compila Dart ahead-of-time in libapp.so. Il download di un nuovo .so è esplicitamente vietato, quindi Flutter standard non può usare live updates. Shorebird aggiunge code push e afferma di rispettare la policy di Play eseguendo gli aggiornamenti tramite la macchina virtuale Dart. Leggi di più in live updates per app Flutter.

Kotlin nativo, Java e Kotlin Multiplatform: nessun aggiornamento code

Caricare file dex o JAR scaricati con DexClassLoader è esattamente il comportamento che la policy vieta. L'alternativa di Google è Consegna delle funzionalità in tempo reale, che scarica i moduli code tramite Google Play. Altrimenti, il code nativo non può cambiare. Un'app Kotlin o Java che ospita JavaScript in una WebView può comunque aggiornare quel code, poiché la policy esenta il code interpretato. Il resto della logica nativa è limitato a remote config, feature flag e server-driven UI.

Unity e motori di gioco: contenuti sì, code no

Il code del gioco è compilato. Asset bundle e Play Asset Delivery gestiscono i contenuti, mentre i linguaggi di scripting embedded come Lua sono code interpretati, cosa che la policy permette purché il risultato rispetti le regole di Play.

Web wrapper e Trusted Web Activities: live per natura

Una Trusted Web Activity o un wrapper WebView carica il tuo sito, quindi si aggiorna a ogni deploy. Google Play accetta le TWA. La cache offline e i bridge nativi dipendono da cosa implementa il wrapper: una TWA può usare il service worker della tua PWA, e una shell WebView può esporre bridge JavaScript se li sviluppi. Un'app Capacitor bundleizzata include il web bundle nell'APK e aggiunge un layer di plugin coerente per i live updates.

Cosa nessuno stack può fare su Android

Qualunque sia il tuo framework, un live update non può:

  • Scaricare file dex, JAR, APK o nativi .so al di fuori di Google Play
  • Aggiungere nuovi permessi Android
  • Far fare all'app qualcosa che la policy di Google Play proibisce
  • Trasformare l'app in qualcosa non descritto sulla scheda del Play Store

Cosa fare ora

Rilascia fix oggi, non dopo la revisione

Live updates di Capgo pubblica modifiche JavaScript, HTML e CSS nella tua app Capacitor in pochi minuti, con canali, rollback, delta update e crittografia end-to-end. È open source e può essere self-hosted.

bunx @capgo/cli@latest init

Segui lo standard quickstart per inviare il tuo primo update.

Live updates per le app Capacitor

Quando un bug nel web-layer è live, rilascia la fix tramite Capgo invece di aspettare giorni l'approvazione degli store. Gli utenti ricevono l'update in background, mentre le modifiche native restano nel normale processo di review.

Ultimi articoli dal blog

Capgo ti offre gli insight migliori che ti servono per creare un'app mobile davvero professionale.