Saltar al contenido principal
Tutorial

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

Sí. Google Play permite actualizaciones over-the-air de code interpretado 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? Capgo ilustración del blog

Respuesta corta: sí, Google Play permite actualizaciones en vivo de code interpretado. Puedes enviar nuevo JavaScript, HTML y CSS a una app de Android sin una nueva revisión de 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 hace cumplir.

Esto no es asesoramiento legal. Es cómo está redactada la política hoy 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 a través de Google Play no puede modificarse, reemplazarse ni actualizarse mediante ningún método distinto al mecanismo de actualización de Google Play. Del mismo modo, una app no puede descargar code ejecutable (como archivos dex, JAR o .so) de una fuente distinta a Google Play. Esta restricción no se aplica a code que se ejecuta en una máquina virtual o un intérprete que proporcionen 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, que no se empaquetan con la app) no deben permitir posibles violaciones de las políticas de Google Play.

Así que hay dos reglas:

  1. El code nativo solo proviene de Google Play. Nada de dex, JAR ni librerías nativas descargadas.
  2. El code interpretado puede provenir de cualquier lugar, pero lo que haga debe cumplir todas las políticas de Play.

La capa web de una app de Capacitor es JavaScript, HTML y CSS que se ejecutan en el WebView de Android, el ejemplo exacto que da Google. Encaja en la exención.

Dónde está el límite

Permitido con un live update No permitido con un live update
Correcciones de bugs en tu JavaScript, HTML o CSS Descargar dex, JAR, APK o .so archivos
Cambios de UI, de copy o nuevas pantallas en tu stack web actual Reemplazar la app fuera del mecanismo de actualización de Google Play
Pruebas A/B y despliegues progresivos de web code Publicar code que incumple la política de Play (conducta engañosa, malware, contenido que viola las normas)
Actualizar imágenes, traducciones o config Convertir la app en algo que no describe la ficha
Revertir una versión defectuosa Evitar permisos o seguridad de Android

Capgo solo envía la columna izquierda. Cualquier cosa nativa, como un nuevo plugin de Capacitor, un nuevo permiso en AndroidManifest.xml, o una dependencia de Gradle, aún requiere un nuevo lanzamiento a través de Google Play. Capgo segmentación por versión mantiene los bundles que necesitan nuevo code nativo alejados de los binarios antiguos.

Cómo lo aplica Google

Google escanea las aplicaciones en busca de code ejecutable descargado y de comportamientos que cambian tras la instalación. Las comprobaciones automatizadas buscan la carga de dex o librerías nativas desde fuera del APK. El JavaScript en un WebView no las activa.

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

En la práctica:

  • Usa actualizaciones en vivo para correcciones e iteraciones en la app que publicaste.
  • Mantén la app coherente con tu ficha en Play Store y tu formulario de seguridad de datos.
  • Lanza cambios nativos y grandes versiones a través de Google Play, con rollouts escalonados si quieres que sean graduales.

¿Qué stacks pueden hacerlo en Android?

Si tu app puede enviar actualizaciones over-the-air en Android depende de una pregunta: ¿la lógica de tu app se interpreta en tiempo de ejecución? JavaScript y otros code interpretados, sí. Dex descargado, JAR y nativo .so archivos, no. Los frameworks compilados AOT como Flutter solo califican a través de una VM o intérprete.

Compatibilidad de live update en Android por stack

Stack Cómo funciona 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 legacy de Cordova
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 propio
Flutter Dart compilado AOT a una librería nativa Solo mediante VM o intérprete Shorebird
Kotlin / Java nativo bytecode dex en ART No para code nativo; sí para JavaScript en un 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 configuración 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 Ninguno necesario

Capacitor, Ionic y Cordova: totalmente cubiertos

Tu UI y tu lógica de negocio son JavaScript que se ejecuta en el Android WebView, el ejemplo exacto que la política de Google cita como caso permitido de code. 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, ya que solo puede cambiar la capa web. Los nuevos plugins nativos, los nuevos permisos en AndroidManifest.xml y los cambios en dependencias de Gradle aún requieren una publicación en Google Play.

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

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

Flutter: solo a través de una VM o intérprete

Flutter compila Dart de antemano en libapp.so. Descargar un nuevo .so está explícitamente prohibido, por lo que Flutter estándar no puede usar actualizaciones en vivo. Shorebird añade push de code y afirma que cumple con la política de Play ejecutando las actualizaciones a través de la máquina virtual de Dart. Lee más en actualizaciones en vivo para apps de Flutter.

Kotlin nativo, 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 real, 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 aloje 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 queda limitada a remote config, feature flags y server-driven UI.

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

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

Web wrappers y Trusted Web Activities: en vivo por naturaleza

Una Trusted Web Activity o un wrapper de WebView carga tu sitio web, por lo que se actualiza cada vez que haces deploy. Google Play acepta TWAs. El caching offline y los bridges nativos dependen de lo que implemente ese wrapper: un TWA puede usar el service worker de tu PWA, y un shell de WebView puede exponer bridges de JavaScript si los construyes. Una app Capacitor empaquetada incluye el bundle web 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 archivos dex, JAR, APK o nativos .so fuera de Google Play
  • Añadir nuevos permisos de Android
  • Haz que la app haga algo que la política de Google Play prohíbe
  • Convertir la app en algo que la ficha de Play Store no describe

Próximos pasos

Lanza fixes hoy, no tras la revisión

actualizaciones Live Update de Capgo envía cambios de JavaScript, HTML y CSS a tu app Capacitor en minutos, con canales, rollbacks, actualizaciones delta y cifrado de extremo a extremo. Es open source y puedes autoalojarlo.

bunx @capgo/cli@latest init

Sigue la Inicio rápido para enviar tu primer update.

Live updates para apps Capacitor

Cuando un bug de la capa web está en producción, publica el fix a través de 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 flujo de revisión habitual.

Lo último de nuestro blog

Capgo te da la información clave que necesitas para crear una app móvil realmente profesional.