0Pricing
Android Academy · Lección

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, c para 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 assembleRelease

Inspeccionar 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.apks

Eliminar 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ó versionCode y se actualizó versionName.
  • isMinifyEnabled y isShrinkResources están activados para la versión.
  • Se añadieron reglas keep para las bibliotecas que utilizan reflexión.
  • targetSdk cumple 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 release activa R8 mediante isMinifyEnabled y isShrinkResources para 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 versionCode y actualice versionName.
  • Compile con ./gradlew bundleRelease y 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

  1. Preparación de una compilación de lanzamiento
  2. Firma de aplicaciones
  3. Play Console y ficha de la aplicación
  4. Lanzamientos graduales y actualizaciones
← Volver a Android Academy