Preparación de una compilación de lanzamiento
App Bundles y reducción de código
Preparación de una compilación de lanzamiento es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.
De depuración a lanzamiento
Cada día ejecuta la compilación de debug desde Android Studio. Pero Google Play necesita una compilación de release: más pequeña, más rápida y sin la marca de depuración.
Una compilación de release se diferencia en tres aspectos clave: está firmada con su clave de release, tiene debuggable false y normalmente está reducida para eliminar código y recursos no utilizados.
En esta lección preparará una compilación de release adecuada y generará el archivo que Google Play necesita: un Android App Bundle (.aab).
Tipos de compilación en Gradle
Gradle define dos tipos de compilación de forma predeterminada: debug y release. Se configuran en el archivo build.gradle.kts del módulo.
El bloque release es donde se activan las optimizaciones. Observe isMinifyEnabled y isShrinkResources a continuación: son los interruptores que hacen que la aplicación ocupe menos.
android {
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}AAB frente a APK
Google Play requiere un Android App Bundle (.aab), no un .apk normal.
- Un .apk contiene el código y los recursos para todos los dispositivos: todas las densidades de pantalla, arquitecturas de CPU e idiomas.
- Un .aab se sube a Play, y Play genera un APK pequeño y optimizado para el dispositivo exacto de cada usuario.
El resultado: los usuarios descargan menos y la aplicación ocupa menos al instalarse. Seguirá usando APK para hacer pruebas directamente en un teléfono, pero publicará un AAB.
Qué es R8 / la reducción
Cuando isMinifyEnabled = true, Android Studio ejecuta R8. R8 realiza tres tareas en una sola pasada:
- Reducción: elimina las clases y los métodos que la aplicación nunca llama.
- Ofuscación: cambia el nombre de clases y métodos por nombres cortos como
a,b,cpara ahorrar espacio y dificultar la ingeniería inversa. - Optimización: inserta código y lo reescribe para que se ejecute más rápido.
La reducción de recursos (isShrinkResources = true) elimina además drawables, layouts y strings que no se utilizan.
Conservar reglas con ProGuard
En ocasiones, R8 elimina o cambia el nombre del código al que solo se hace referencia mediante reflexión (por ejemplo, con Gson, Retrofit o la serialización). Puede proteger ese código con reglas keep en proguard-rules.pro.
Una regla keep indica a R8: "no cambies el nombre ni elimines estas clases".
# proguard-rules.pro
# Keep data classes used with Gson reflection
-keep class com.example.app.model.** { *; }
# Keep Retrofit interface methods
-keepattributes Signature
-keepattributes *Annotation*
# Keep Kotlin metadata used by libraries
-keep class kotlin.Metadata { *; }Versionado de su aplicación
Cada versión necesita dos valores de versión en build.gradle.kts:
versionCode— un entero que debe aumentar con cada carga. Play lo utiliza para saber qué compilación es más reciente.versionName— una cadena legible, como"1.4.0", que se muestra a los usuarios.
Si olvida aumentar versionCode, Play rechaza la carga porque está duplicada.
android {
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 35
versionCode = 12
versionName = "1.4.0"
}
}Compilar el bundle en Android Studio
Para crear un bundle de versión firmado desde la interfaz:
- Abra Build → Generate Signed Bundle / APK.
- Elija Android App Bundle.
- Seleccione o cree su almacén de claves y su clave.
- Seleccione la variante de compilación release.
Android Studio ejecuta R8, firma el bundle y coloca el archivo .aab en app/release/. Ese único archivo es el que carga en Play.
Compilar desde la línea de comandos
Para CI/CD o scripts, compile el bundle directamente con Gradle. El nombre de la tarea sigue el patrón bundle<Variant>.
bundleRelease genera el AAB. El archivo se coloca en app/build/outputs/bundle/release/.
# Build a release App Bundle (.aab)
./gradlew bundleRelease
# Output:
# app/build/outputs/bundle/release/app-release.aab
# Build a release APK instead (for direct install/testing)
./gradlew assembleReleaseInspeccionar y probar el AAB
No puede instalar un archivo .aab directamente en un teléfono. Para probar los APK exactos que generaría Play, use bundletool de Google.
Esta herramienta crea APK específicos para cada dispositivo a partir de su bundle y los instala en un dispositivo conectado: es lo más parecido a una descarga real desde Play.
# Generate APKs from the bundle for the connected device
java -jar bundletool.jar build-apks \
--bundle=app-release.aab \
--output=app.apks \
--connected-device
# Install them on the device
java -jar bundletool.jar install-apks --apks=app.apksEliminar el código de depuración de la versión
Una compilación de versión no debe registrar datos confidenciales ni dejar activadas funciones exclusivas de depuración. Use BuildConfig.DEBUG para bifurcar el comportamiento. Su valor es true únicamente en las compilaciones de depuración.
R8 incluso puede eliminar bloques protegidos por una constante false, por lo que esto también reduce el tamaño.
fun setupLogging() {
if (BuildConfig.DEBUG) {
// Verbose logging only in debug builds
Log.d("App", "Debug logging enabled")
Timber.plant(Timber.DebugTree())
} else {
// Release: send to crash reporting only, no console spam
Timber.plant(CrashReportingTree())
}
}Lista de comprobación para una versión lista
Antes de compilar el bundle final, confirme lo siguiente:
- Se aumentó
versionCodey se actualizóversionName. isMinifyEnabledyisShrinkResourcesestán activados para la versión.- Se añadieron reglas keep para las bibliotecas que utilizan reflexión.
targetSdkcumple el requisito actual de Play.- No hay registros exclusivos de depuración ni endpoints de prueba en el código de versión.
- Probó el AAB mediante bundletool en un dispositivo real.
Una vez superadas estas comprobaciones, su archivo .aab estará listo para cargarse.
Comprobación rápida
Ha establecido isMinifyEnabled = true y su aplicación se bloquea en la versión con un error de "class not found" de su analizador JSON, pero funciona correctamente en la depuración. ¿Cuál es la causa más probable?
Resumen: preparar una compilación de versión
Ahora sabe cómo convertir una aplicación de depuración en una compilación lista para publicarse:
- Play requiere un .aab firmado y genera APK por dispositivo a partir de él.
- El tipo de compilación
releaseactiva R8 medianteisMinifyEnabledyisShrinkResourcespara reducir, ofuscar y optimizar el código. - Las reglas keep protegen el código basado en reflexión para que no se elimine.
- Aumente siempre
versionCodey actualiceversionName. - Compile con
./gradlew bundleReleasey pruebe el resultado con bundletool.
A continuación: cómo funciona realmente la firma que hace confiable esta compilación.
Preguntas frecuentes
¿La lección «Preparación de una compilación de lanzamiento» es gratis?
Sí — el texto completo de «Preparación de una compilación de lanzamiento» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Preparación de una compilación de lanzamiento»?
App Bundles y reducción de código Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Android Academy?
No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Preparación de una compilación de lanzamiento»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Android Academy?
Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Preparación de una compilación de lanzamiento
- Firma de aplicaciones
- Play Console y ficha de la aplicación
- Lanzamientos graduales y actualizaciones