Saltar al contenido

Guías de configuración · Expo

Prueba cerrada de Google Play para apps de Expo (EAS)

Para proyectos de Expo compilados con EAS Build: genera un .aab de producción, deja que EAS guarde el keystore, lleva el bundle al canal cerrado y mantén a 12 testers con opt-in durante 14 días. ¿React Native bare sin EAS? Consulta la guía de React Native.

Compilación
eas build -p android --profile production
Código de versión
eas.json → autoIncrement
API objetivo
targetSdkVersion ≥ 36

Compila un app bundle de producción con EAS

  1. Define el nombre de paquete

    En app.json (o app.config.js), configura android.package, por ejemplo com.yourcompany.app. Es definitivo después de la primera subida.

  2. Instala y configura EAS

    Instala la CLI, inicia sesión y crea eas.json con los comandos de abajo. El archivo generado ya trae un perfil production.

  3. Compila

    Lanza el build de producción. El perfil de producción predeterminado crea un Android App Bundle en los servidores de EAS; añade --local para compilar en tu propia máquina.

  4. Descarga el bundle

    Cuando termine el build, descarga el .aab desde la página del build en expo.dev o desde el enlace del terminal.

Terminal
npm install -g eas-cli
eas login
eas build:configure
Terminal
eas build -p android --profile production

No pongas android.buildType en apk en el perfil de producción. Un APK no se puede enviar a Google Play.

Credenciales: deja que EAS guarde la clave de subida

En el primer build de Android, EAS ofrece generar un keystore y lo guarda en los servidores de Expo; los builds posteriores lo reutilizan. Para Google Play, ese keystore es tu clave de subida. Al subir el primer bundle se configura la firma de aplicaciones de Play y Google guarda la clave de firma de la app.

Usa eas credentials para ver el keystore configurado, descargar una copia o sustituirlo. Guarda esa copia en un lugar seguro: la necesitarás si algún día compilas en local o dejas EAS.

Terminal
eas credentials -p android

No generes un keystore nuevo después de la primera subida. Un bundle firmado con otra clave de subida se rechaza hasta que pidas un restablecimiento de la clave de subida en Play Console.

Código de versión y nivel de API objetivo

Play Console rechaza cualquier bundle cuyo versionCode ya se haya usado. Lo más sencillo es que EAS lo gestione en remoto y lo incremente en cada build de producción:

eas.json
{
  "cli": { "appVersionSource": "remote" },
  "build": {
    "production": { "autoIncrement": true }
  },
  "submit": {
    "production": {
      "android": { "track": "alpha", "releaseStatus": "draft" }
    }
  }
}

Con appVersionSource en remote, EAS guarda el código de versión e ignora android.versionCode en la configuración de la app. Si ya subiste builds a mano, ejecuta una vez eas build:version:set para que EAS siga desde tu último número.

Desde el 31 de agosto de 2026, las apps nuevas y las actualizaciones deben apuntar a Android 16 (nivel de API 36). Cada versión del SDK de Expo fija el SDK objetivo por ti, así que la solución fiable es una versión del SDK que apunte a 36. El plugin de configuración expo-build-properties puede sobrescribir targetSdkVersion, pero hazlo solo si tu SDK y tus bibliotecas lo admiten.

Trampas de Expo

  • eas submit va a la prueba interna. Por defecto, eas submit -p android envía el build al canal interno, que no cuenta para la regla de 12 testers. Pon "track": "alpha" (el canal cerrado predeterminado de Google) en el perfil de envío, como arriba, o sube a mano el .aab descargado al canal cerrado.
  • Primeras versiones solo en borrador. Mientras la app no se haya publicado nunca, Google solo acepta versiones en borrador a través de la API. Mantén "releaseStatus": "draft" y termina el lanzamiento en Play Console.
  • Hace falta una cuenta de servicio. eas submit usa una clave de cuenta de servicio de Google que subes a EAS en las credenciales de la app. Sin ella, sube el bundle a mano.
  • Builds de desarrollo. Un build con developmentClient: true espera un servidor de desarrollo. Asegúrate de que los testers reciben el perfil de producción.
  • Variables de entorno que faltan. Los valores de un archivo .env ignorado por git no se suben a EAS Build. Define los valores de producción como variables de entorno de EAS o la release hablará con el backend equivocado.
  • Los cambios nativos necesitan un build nuevo. Los permisos, el nombre de paquete y los plugins de configuración solo llegan a los testers con un build nuevo de EAS, no con una actualización over-the-air.
Terminal
eas submit -p android --profile production

Averigua por qué el build falla a los testers

Un build de producción no se comporta como Expo Go ni como un development build: no hay servidor de desarrollo, el JavaScript está minificado y solo están los módulos nativos que compilaste. Reproduce lo que ven los testers antes de hacer suposiciones.

  1. Ejecuta el modo producción en local

    npx expo start --no-dev --minify ejecuta tu JavaScript como un bundle de release y muestra errores que el modo desarrollo nunca lanza.

  2. Lee los logs nativos

    Conecta el teléfono por USB y ejecuta adb logcat. Los logs nativos suelen revelar la causa cuando una error boundary de JavaScript no atrapa el problema.

  3. Revisa Play Console

    Los fallos de los testers aparecen en Supervisar y mejorar → Android vitals → Fallos y ANR. El informe previo al lanzamiento, que Google genera automáticamente tras una subida, también ejecuta la app en dispositivos de prueba y enumera los fallos que encontró.

  4. Haz legibles los errores de JavaScript

    Con Sentry, EAS Build sube los source maps automáticamente en cuanto SENTRY_AUTH_TOKEN está definido como variable de entorno sensible de EAS. Después de eas update, ejecuta npx sentry-expo-upload-sourcemaps dist para que las actualizaciones también sean legibles.

¿Necesitas depurar lo nativo? npx expo prebuild -p android crea la carpeta android para que puedas conectar el depurador de Android Studio. Bórrala después para que Expo siga gestionando el proyecto.

Play Console en breve: de la prueba cerrada a producción

En cuanto tu bundle de Expo esté compilado y firmado, el resto ocurre en Play Console y funciona igual con cualquier framework. Esta es la lista de comprobación; cada menú y cada pantalla están en la guía completa de Play Console.

  • Termina la configuración de la app en el Panel: política de privacidad, acceso a la app, anuncios, clasificación de contenido, público objetivo, seguridad de los datos y ficha de Play Store.
  • Crea una versión de prueba cerrada en Probar y publicar → Pruebas → Prueba cerrada: elige los países de tus testers, sube el .aab y envíalo a revisión.
  • Añade testers con un Google Group en la pestaña Testers y comparte el enlace de opt-in. Funciona en cuanto el canal muestra Publicado.
  • Mantén al menos 12 testers con opt-in durante 14 días seguidos. Las pruebas internas no cuentan, y quien sale y vuelve empieza sus 14 días de nuevo.
  • Publica al menos una actualización durante la prueba y apunta qué encontraron los testers y qué cambiaste.
  • Solicita acceso a producción desde el Panel y responde las tres secciones sobre tu prueba, tu app y tu preparación. La decisión es de Google; nadie puede garantizar la aprobación.

Cuenta con bajas: recluta más de 12 testers para que una baja no retrase tu calendario. Ver todos los pasos de Play Console.

La guía completa de Play Console

Canal cerrado, Google Group y enlace de opt-in, la regla de 12 testers / 14 días y la solicitud de producción, paso a paso en una sola página.

Abrir los pasos de Play Console

Envía correcciones rápido: builds nuevos y EAS Update

Con el versionado remoto, vuelve a lanzar el build de producción y súbelo o envíalo al canal cerrado; el código de versión sube solo.

Terminal
eas build -p android --profile production

Para correcciones que solo tocan JavaScript, EAS Update puede entregar un bundle nuevo sin volver a enviar la app a la tienda. La política de Google Play sobre uso inadecuado de dispositivos y redes permite actualizar así el código que se ejecuta en un intérprete o una máquina virtual, como JavaScript; no permite descargar código nativo. Usa las actualizaciones para correcciones reales y mantenlas dentro de lo que hace el build revisado.

Terminal
eas update --channel production --message "Fix checkout crash" --environment production
  • Canales. eas update:configure define un channel en los perfiles de build preview y production. Un build solo recibe actualizaciones publicadas en su canal. Desde el SDK 55, --environment es obligatorio.
  • Versión de runtime. Una actualización solo llega a builds con la misma versión de runtime. La política fingerprint la cambia con cualquier cambio que afecte al runtime nativo, así que las actualizaciones incompatibles son muy improbables.
  • Reinicios. Los builds de release descargan la actualización en segundo plano y la aplican tras reiniciar la app. Pide a los testers que cierren y vuelvan a abrir la app, hasta dos veces.
  • Los cambios nativos necesitan un build. Permisos nuevos, config plugins o bibliotecas nativas solo llegan a los testers con un build de producción nuevo en el canal cerrado, que además deja una versión visible en Play Console.

Preguntas frecuentes

¿Los testers deben usar Expo Go?

No. Los testers instalan tu app desde Google Play con el enlace de opt-in, es decir, un build de producción de EAS en el canal cerrado. Expo Go y los development builds son para ti, no para tus 12 testers.

¿Puedo poner antes un build en mi propio teléfono?

Sí. Añade "buildType": "apk" bajo android en un perfil preview y ejecuta eas build -p android --profile preview. Un .aab no se puede instalar directamente; es solo para Google Play.

¿Qué política de versión de runtime elijo?

appVersion es sencilla, pero si cambias código nativo sin subir la versión de la app, builds y actualizaciones dejan de coincidir. fingerprint sigue los cambios nativos automáticamente a cambio de más builds, lo que suele encajar con una prueba cerrada corta.

¿Y si una actualización rompe la app?

Si una actualización llama a código nativo que el build no tiene, expo-updates puede detectar el error y volver a la actualización anterior que funcionaba. También puedes volver a publicar la última actualización estable encima de la mala.

Fuentes

Los detalles técnicos se han comprobado con la documentación oficial de abajo. Los menús y los valores por defecto cambian entre versiones; ante la duda, manda la página oficial.

¿Es tu primera vez con la regla de los 12 testers?

La guía general explica el requisito de Google, cómo avanza día a día una campaña de TestBunny y qué podemos y qué no podemos garantizar.

Leer la guía general

¿Necesitas 12 testers reales durante 14 días?

Añade tu app y tu enlace de prueba cerrada, elige Starter (15 testers) o Pro (25 testers) y sigue la actividad de cada tester día a día en tu panel.

TestBunny no está afiliado a Google. Los testers ganan créditos, nunca dinero. Nadie puede garantizar la decisión de Google sobre el acceso a producción, y nosotros tampoco.