Cómo publicar una app Flutter en Play Store paso a paso (2026)
Del keystore al primer lanzamiento: firma en build.gradle.kts, versión en pubspec, AAB, API 36, prueba cerrada de 14 días y errores típicos.

Tu app ya corre en el emulador y quieres verla en la tienda. Para publicar una app Flutter en Play Store (o, como muchos lo buscan, subir una app Flutter a Play Store) necesitas cuatro cosas: un nombre de paquete definitivo, una clave de carga configurada en Gradle, un Android App Bundle firmado en release y la app creada en Play Console. Aquà tienes cada paso con los archivos de la plantilla actual de Flutter (build.gradle.kts), los requisitos de Google Play de 2026 y los errores que más frenan la primera subida.
Antes de compilar: revisa tu proyecto
Hay ajustes que conviene hacer antes del primer bundle, porque después cuesta cambiarlos.
1. El applicationId se elige una sola vez
La plantilla crea applicationId = "com.example.tu_app" en android/app/build.gradle.kts, con un TODO para que pongas el tuyo. La documentación de Flutter es clara: una vez subida la app a Play Store, no puedes cambiar el Application ID. Usa un dominio invertido que controles, como com.tuempresa.tuapp. Si lo cambias, actualiza también namespace y mueve MainActivity.kt a la carpeta del nuevo paquete, con su lÃnea package corregida.
2. Manifest: nombre visible y permiso de Internet
En android/app/src/main/AndroidManifest.xml revisa android:label (el nombre bajo el Ãcono) y el permiso de red. La plantilla no incluye INTERNET en el manifest principal: Flutter solo lo permite durante el desarrollo, por eso la app funciona en debug y falla en release. Si usas red, agrégalo:
<uses-permission android:name="android.permission.INTERNET"/>
Aprovecha también para cambiar el Ãcono por defecto, con el paquete flutter_launcher_icons o a mano en las carpetas mipmap-.
3. Versión y nivel de API objetivo
La versión vive en el pubspec.yaml:
version: 1.0.0+1
Lo que va antes del + es el versionName (lo que ve el usuario) y el número después del + es el versionCode, el número interno que debe subir en cada versión. También puedes fijarlos al compilar con --build-name y --build-number.
Desde el 31 de agosto de 2026, las apps nuevas y las actualizaciones deben apuntar a Android 16 (nivel de API 36) o superior; se puede pedir una extensión hasta el 1 de noviembre de 2026. En la versión estable actual de Flutter, flutter.targetSdkVersion ya vale 36. RevÃsalo si reemplazaste targetSdk = flutter.targetSdkVersion por un número fijo o usas un Flutter antiguo.
4. Páginas de memoria de 16 KB
Google Play exige que las apps que apuntan a API 35 o superior admitan páginas de memoria de 16 KB en dispositivos de 64 bits, y desde el 1 de febrero de 2027 no podrás lanzar actualizaciones que no lo cumplan. El motor de Flutter ya es compatible y la versión estable usa NDK r28, que alinea a 16 KB por defecto. El riesgo está en los plugins con código nativo: mantenlos al dÃa y atiende cualquier aviso de compatibilidad en Play Console.
Crea la clave de carga (upload keystore)
Google Play usa dos claves: tú firmas el bundle con tu clave de carga y Google firma los APK que descargan los usuarios con la clave de firma de la app, que custodia con la firma de apps de Play (las apps nuevas se inscriben automáticamente). La diferencia completa la explicamos en firma de apps de Google Play.
Crea el keystore con el comando de la documentación de Flutter (macOS o Linux):
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA \
-storetype JKS -keysize 2048 -validity 10000 -alias upload
En Windows (PowerShell):
keytool -genkey -v -keystore $env:USERPROFILE\upload-keystore.jks `
-storetype JKS -keyalg RSA -keysize 2048 -validity 10000 `
-alias upload
Si la terminal no encuentra keytool, viene con el Java de Android Studio: ejecuta flutter doctor -v, copia la ruta que aparece tras "Java binary at:" y cambia java por keytool.
Guarda el .jks y sus contraseñas en un gestor de contraseñas y en un respaldo. Nunca lo subas a Git.
Configura key.properties y la firma en Gradle
Crea android/key.properties:
storePassword=<tu-contraseña>
keyPassword=<tu-contraseña>
keyAlias=upload
storeFile=/Users/<usuario>/upload-keystore.jks
En Windows la ruta va con doble barra invertida (C:\\Users\\<usuario>\\upload-keystore.jks). Agrega android/key.properties al .gitignore.
En android/app/build.gradle.kts, carga el archivo antes del bloque android:
import java.util.Properties
import java.io.FileInputStream
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
Y dentro de android, define la firma antes de buildTypes:
signingConfigs {
create("release") {
keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("keyPassword")
storeFile = keystoreProperties.getProperty("storeFile")?.let { file(it) }
storePassword = keystoreProperties.getProperty("storePassword")
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
}
}
Lo clave es reemplazar la lÃnea de la plantilla signingConfig = signingConfigs.getByName("debug") dentro de release. En proyectos antiguos con build.gradle (Groovy) la idea es la misma, con signingConfigs.release. Al terminar, ejecuta flutter clean.
Genera el AAB con flutter build appbundle
flutter build appbundle
El comando compila en release por defecto y deja el bundle en build/app/outputs/bundle/release/, con tu código para armeabi-v7a, arm64-v8a y x86-64. Puedes probarlo con bundletool o subiéndolo a una prueba interna. Más detalles en qué es un AAB.
Publicar app Flutter en Play Store: pasos en Play Console
Con el bundle listo, pasa a Play Console (la cuenta de desarrollador cuesta 25 USD, un solo pago):
- Ve a Página principal > Crear app. Elige idioma, nombre, si es app o juego y si es gratuita o pagada.
- Agrega un correo de contacto, acepta las declaraciones y las Condiciones de la firma de apps de Play, y pulsa Crear app.
- En el Panel, sigue Configura la app: polÃtica de privacidad, seguridad de los datos, clasificación del contenido, público objetivo y demás declaraciones.
- Completa la ficha de Play Store: nombre (30 caracteres), descripción breve (80), descripción completa (4.000), Ãcono, gráfico de funciones y capturas. Si no tienes capturas, créalas gratis con el generador de screenshots para Google Play.
- En Prueba y lanza > Pruebas, crea una versión, sube el
.aab, escribe las notas y pulsa Siguiente. Si aparece un Resumen de errores, resuélvelo: los errores bloquean; las advertencias, no.
Cuentas personales: prueba cerrada obligatoria
Si tu cuenta personal se creó después del 13 de noviembre de 2023, Producción sigue desactivada hasta que hagas una prueba cerrada con al menos 12 verificadores que participen de forma continua durante 14 dÃas. Después solicitas acceso a producción desde el Panel; según Google, esa revisión suele tardar siete dÃas o menos. Cómo conseguir testers y un calendario de 14 dÃas: prueba cerrada de Google Play.
Con el acceso aprobado (o con una cuenta de organización), crea la versión en Prueba y lanza > Producción y pulsa Iniciar lanzamiento. Google advierte que, en algunas cuentas, la revisión puede tardar hasta siete dÃas o más en casos excepcionales.
Errores comunes al subir una app Flutter a Play Store
| Error | Causa probable | Solución |
|---|---|---|
| Play Console dice que el bundle está firmado en modo de depuración | release sigue con signingConfigs.getByName("debug") | Apunta release a tu firma, flutter clean y recompila |
Keystore file ... not found for signing config 'release' | Ruta de storeFile mal escrita (en Windows, sin \\) | Usa la ruta absoluta del .jks |
| Play rechaza el código de versión porque ya se usó | No subiste el número tras el + | Usa version: 1.0.0+2 o --build-number |
| Error de nivel de API objetivo | targetSdk fijo por debajo de 36 | Vuelve a flutter.targetSdkVersion o pon 36 |
| La app no carga datos en producción | Falta INTERNET en el manifest principal | Agrega el permiso y genera otra versión |
Preguntas frecuentes
¿Puedo subir un APK de Flutter en vez de un AAB?
Para apps nuevas, no: desde agosto de 2021 Google Play exige Android App Bundle. El APK (flutter build apk --split-per-abi) sirve para otras tiendas o para instalar a mano.
¿Necesito una Mac para publicar en Play Store?
No. Para Android basta Windows, macOS o Linux con Flutter y Android Studio. La Mac solo es indispensable para compilar la versión de iOS.
¿Qué pasa si pierdo el upload-keystore.jks?
Con la firma de apps de Play, Google puede restablecer tu clave de carga, porque la clave de firma de la app la guarda Google. Aun asÃ, haz respaldo para no depender de ese trámite.
¿Cada actualización necesita un versionCode nuevo?
SÃ. Sube el número tras el + del pubspec.yaml, firma con la misma clave de carga y genera el bundle otra vez.
Prepara tu ficha con AppConsol
El código es la mitad del trabajo; la otra mitad es la ficha. En AppConsol tienes gratis generadores de screenshots, Ãconos, feature graphic, polÃtica de privacidad y términos y condiciones para Google Play y App Store. Entra a AppConsol y deja lista tu app Flutter para su primera publicación.
Sigue aprendiendo

19 de octubre de 2026
Cómo actualizar mi app en Google Play Console paso a paso (2026)

19 de octubre de 2026
Cómo subir una app Flutter a App Store paso a paso (2026)

16 de octubre de 2026
Qué es un AAB (Android App Bundle) y en qué se diferencia de un APK

14 de octubre de 2026
Cuánto tarda en publicarse una app en Play Store y App Store: plazos oficiales

5 de octubre de 2026
Prueba cerrada Google Play: 12 testers, 14 días y acceso a producción