Saltar al contenido principal
Tutorial

¿Google permite Live Updates sin revisión de Play Store?

Sí. Google Play permite actualizaciones over-the-air de code interpretados como JavaScript en un WebView, pero prohíbe la descarga de archivos dex, JAR o .so. Esta es la política exacta y cómo se aplica a las apps con Capacitor.

¿Google permite Live Updates sin revisión de Play Store?

Respuesta corta: sí, Google Play permite live updates de code interpretado. Puedes enviar nuevo JavaScript, HTML y CSS a una app de Android sin pasar por una nueva revisión de la Play Store. No puedes descargar code nativo como dex, JAR o .so archivos.

Google es más claro que Apple en esto: la excepción para JavaScript en un WebView está escrita directamente en la política. Esta página la cita, muestra dónde está el límite y explica cómo Google la aplica.

Esto no es asesoría legal. Es la interpretación actual de la política y cómo miles de apps la usan en producción.

Lo que realmente dice la política de Google Play

La regla está en la política de abuso de dispositivos y redes:

Una app distribuida vía Google Play no puede modificarse, reemplazarse o actualizarse mediante ningún método que no sea el mecanismo de actualización de Google Play. Asimismo, una app no puede descargar code ejecutable (como archivos dex, JAR, .so) de una fuente distinta a Google Play. Esta restricción no aplica a code que se ejecute en una máquina virtual o intérprete que proporcione acceso indirecto a las APIs de Android (como JavaScript en un webview o navegador).

Y justo después:

Las apps o code de terceros, como SDKs, con lenguajes interpretados (JavaScript, Python, Lua, etc.) cargados en tiempo de ejecución (por ejemplo, no empaquetados con la app) no deben permitir violaciones potenciales de las políticas de Google Play.

Así que hay dos reglas:

  1. El code nativo solo viene de Google Play. Nada de descargar dex, JAR o librerías nativas.
  2. El code interpretado puede venir de cualquier lugar, pero lo que haga debe cumplir con cada política de Play.

La capa web de una app Capacitor es JavaScript, HTML y CSS ejecutándose en el Android WebView, el ejemplo exacto que da Google. Esto entra en la exención.

Dónde está el límite

Permitido con live update No permitido con live update
Bug fixes en tu JavaScript, HTML, CSS Descargar dex, JAR, APK o .so archivos
Cambios de UI, copy o nuevas pantallas en tu stack web actual Reemplazar la app fuera del mecanismo de actualización de Google Play
A/B tests y rollouts graduales de web code Enviar code que infrinja la política de Play (comportamiento engañoso, malware, contenido prohibido)
Actualizar imágenes, traducciones o config Convertir la app en algo que la ficha no describe
Hacer un rollback de un release fallido Bypasear permisos o seguridad de Android

Capgo solo envía la columna izquierda. Cualquier cambio nativo, como un nuevo plugin Capacitor, un nuevo permiso en AndroidManifest.xml, o una dependencia de Gradle, sigue requiriendo una nueva versión en Google Play. La de Capgo segmentación de versiones mantiene los bundles que requieren nuevo code nativo alejados de binarios antiguos.

Cómo lo aplica Google

Google escanea apps buscando code ejecutables descargados o comportamientos que cambien tras la instalación. Los checks automáticos buscan la carga de dex o librerías nativas fuera del APK. El JavaScript en un WebView no los activa.

El riesgo real es la segunda regla: si un live update hace que la app haga algo prohibido por la política de Play, es una infracción sin importar cómo llegó el code. La política de comportamiento engañoso también aplica a apps cuya función cambia tras la revisión.

En la práctica:

  • Usa live updates para fixes e iteraciones sobre la app que ya publicaste.
  • Mantén la app coherente con tu ficha de Play Store y el formulario de seguridad de datos.
  • Lanza cambios nativos y grandes lanzamientos a través de Google Play, con rollouts escalonados si prefieres que sean graduales.

¿Qué stacks pueden hacerlo en Android?

Que tu app pueda publicar actualizaciones over-the-air en Android depende de una pregunta: ¿la lógica de tu app se interpreta en runtime? JavaScript y otros code interpretados, sí. Archivos dex, JAR y nativos descargados, .so no. Los frameworks compilados con AOT, como Flutter, solo pueden hacerlo mediante una VM o un intérprete.

Compatibilidad de live update en Android según el stack

Stack Cómo se ejecuta el code en Android ¿Se permiten live updates? Herramientas
Capacitor JavaScript, HTML y CSS en el WebView de Android Sí Capgo
Ionic (en Capacitor) Igual que Capacitor Sí Capgo
Cordova JavaScript en el WebView de Android Sí Capgo tras migrar a Capacitor, plugins de Cordova antiguos
React Native / Expo bundle de JavaScript en Hermes Sí, solo JavaScript Expo Updates, alternativas self-hosted a CodePush
NativeScript JavaScript en V8 Sí, solo JavaScript Limitado, mayormente desarrollado internamente
Flutter Dart compilado AOT en una librería nativa Solo mediante VM o intérprete Shorebird
Kotlin / Java nativos bytecode dex en ART No para code nativo; sí para JavaScript en WebView Configuración remota, Play Feature Delivery
Kotlin / Compose Multiplatform bytecode dex en ART No Configuración remota, Play Feature Delivery
.NET MAUI / Xamarin runtime de .NET y librerías nativas incluidas en el APK No Solo config. remota
Unity / Unreal C# vía IL2CPP o C++, compilado No para code, sí para contenido Asset bundles, Play Asset Delivery, contenido con scripts (Lua)
Web wrapper / TWA Sitio web cargado en WebView o Chrome Siempre en vivo Ninguna necesaria

Capacitor, Ionic y Cordova: cobertura total

Tu UI y lógica de negocio es JavaScript ejecutándose en el Android WebView, el ejemplo exacto que la política de Google da para code permitido. Un live update reemplaza el bundle web; el APK, los plugins nativos y los permisos siguen siendo los que publicaste.

Capgo cumple por diseño porque solo puede modificar la capa web. Los nuevos plugins nativos o permisos en AndroidManifest.xml y cambios en dependencias de Gradle requieren una nueva versión en Google Play.

React Native y Expo: JS sí, módulos nativos no

React Native ejecuta un bundle de JavaScript en Hermes, lo que cuenta como code interpretado. Expo Updates y el ya retirado Microsoft CodePush actualizan ese bundle. Los equipos que dejan CodePush necesitan un reemplazo. Los módulos nativos y las actualizaciones de React Native requieren un nuevo release.

Flutter: solo mediante una VM o intérprete

Flutter compila Dart ahead-of-time en libapp.so. Descargar un nuevo .so está explícitamente prohibido, por lo que el Flutter estándar no puede usar live updates. Shorebird añade push de code y afirma que cumple con la política de Play al ejecutar actualizaciones mediante la máquina virtual de Dart. Lee más en live updates para apps de Flutter.

Native Kotlin, Java y Kotlin Multiplatform: sin actualizaciones de code

Cargar archivos dex o JAR descargados con DexClassLoader es exactamente el comportamiento que prohíbe la política. La alternativa del propio Google es Entrega de funciones en tiempo de ejecución, que descarga módulos code a través de Google Play. De lo contrario, el code nativo no puede cambiar. Una app en Kotlin o Java que aloja JavaScript en un WebView aún puede actualizar ese code, ya que la política exime al code interpretado. El resto de la lógica nativa se limita a remote config, feature flags y server-driven UI.

Unity y motores de juego: contenido sí, code no

El code de un juego está compilado. Los asset bundles y Play Asset Delivery gestionan el contenido, y los lenguajes de scripting embebidos como Lua son code interpretado, algo que la política permite siempre que el resultado cumpla las políticas de Play.

Web wrappers y Trusted Web Activities: en vivo por naturaleza

Una Trusted Web Activity o un WebView wrapper carga tu sitio web, así que se actualiza cada vez que haces deploy. Google Play acepta TWAs. La caché offline y los bridges nativos dependen de lo que implemente ese wrapper: una TWA puede usar el service worker de tu PWA, y un shell de WebView puede exponer bridges de JavaScript si los construyes. Una app de Capacitor empaquetada incluye el web bundle en el APK y añade una capa de plugins consistente para live updates.

Lo que ningún stack puede hacer en Android

Sea cual sea tu framework, un live update no puede:

  • Descargar dex, JAR, APK o archivos nativos .so fuera de Google Play
  • Añadir nuevos permisos de Android
  • Hacer que la app haga algo prohibido por Google Play
  • Cambiar la app por algo que no describe su ficha en la Play Store

Próximos pasos

Lanza fixes hoy, no tras una revisión

Live Updates de Capgo envía cambios de JavaScript, HTML y CSS a tu app Capacitor en minutos, con canales, rollbacks, delta updates y cifrado de extremo a extremo. Es open source y puedes self-hostearlo.

bunx @capgo/cli@latest init

Sigue la guía rápida para enviar tu primer update.

Live Updates para apps de Capacitor

Si hay un bug en la capa web, publica el fix con Capgo en lugar de esperar días a la aprobación de la app store. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen el proceso de revisión normal.

Lo último de nuestro blog

Capgo te da los mejores insights para crear una app móvil realmente profesional.