La diferencia entre un paquete de aplicación y un APK es que no puedes implementar el primero en un dispositivo. Más bien, es un formato de publicación que incluye todo el código compilado y los recursos de tu app en un solo artefacto de compilación. Entonces, después de que subes tu paquete de aplicación firmado, Google Play tiene todo lo que necesita para compilar y firmar los APKs de la app, y entregarlos a los usuarios.
Primeros pasos
La mayoría de los proyectos de apps no requieren mucho esfuerzo para admitir Android App Bundles.
Eso se debe a que el módulo que incluye código y recursos del APK base de tu app es el estándar, que obtienes de forma predeterminada cuando creas un nuevo proyecto de app en Android Studio.
Es decir, el módulo que aplica el complemento application
indicado a continuación a su archivo build.gradle
proporciona el código y los recursos para la funcionalidad base de tu app.
Groovy
// The standard application plugin creates your app's base module. plugins { id 'com.android.application' }
Kotlin
plugins { // The standard application plugin creates your app's base module. id("com.android.application") }
Además de proporcionar la funcionalidad principal de tu app, el módulo básico también incluye muchas de las configuraciones de compilación y entradas del manifiesto que afectan todo el proyecto de la app.
Configuración de compilación del módulo básico
Para la mayoría de los proyectos de apps existentes, no es necesario cambiar nada en la configuración de compilación del módulo básico. Sin embargo, si estás considerando agregar módulos al proyecto de tu app, o bien si ya lanzaste tu app usando varios APKs, debes tener en cuenta algunos aspectos de la configuración de compilación del módulo básico.
Actualizaciones del código de versión y la app
Con Android App Bundles, ya no es necesario que administres códigos de versión para varios APKs que subas a Google Play. En cambio, solo debes administrar un código de versión en el módulo básico de la app, tal como se muestra a continuación:
// In your base module build.gradle file
android {
defaultConfig {
…
// You specify your app’s version code only in the base module.
versionCode 5
versionName "1.0"
}
}
Después de subir el paquete de aplicación, Google Play usa el código de versión del módulo básico para asignar el mismo código de versión a todos los APKs que genera a partir de ese paquete. Es decir, cuando un dispositivo descarga e instala tu app, todos los APK divididos para esa app comparten el mismo código de versión.
Si deseas actualizar tu app con código o recursos nuevos, deberás actualizar el código de versión en el módulo básico de la app y compilar un nuevo paquete de aplicación completo. Cuando subes ese paquete de aplicación a Google Play, se genera un nuevo conjunto de APKs en función del código de versión especificado en el módulo básico. Posteriormente, cuando los usuarios actualizan la app, Google Play entrega versiones actualizadas de todos los APK instalados en el dispositivo. Es decir, se actualizan todos los APKs instalados al nuevo código de versión.
Otros factores que considerar
- Firma de apps: Si incluyes información de firma en los archivos de tu compilación, solo deberías hacerlo en el archivo de configuración de compilación del módulo básico. Para obtener más información, consulta Cómo configurar Gradle para firmar tu app.
- Reducción de código: Si deseas habilitar la reducción de código para todo el proyecto de la app (incluidos sus módulos de funciones), debes hacerlo desde el archivo build.gradle del módulo básico. Es decir, puedes incluir reglas personalizadas de ProGuard en un módulo de funciones, pero se omitirá la propiedad
minifyEnabled
en las configuraciones de compilación de módulos de funciones. - Se omite el bloque
splits
: Cuando compilas un paquete de aplicación, Gradle omite las propiedades del bloqueandroid.splits
. Si deseas controlar qué tipos de APK de configuración admite tu paquete de aplicación, usaandroid.bundle
para inhabilitar tipos de APK de configuración. - Control de versiones de la app: El módulo básico determina el código y el nombre de la versión para todo el proyecto de la app. Si deseas obtener más información, consulta la sección Cómo administrar actualizaciones de apps.
Cómo habilitar o inhabilitar tipos de APK de configuración
De forma predeterminada, cuando se compila un paquete de aplicación, es posible generar APK de configuración para cada conjunto de recursos de idioma, recursos de densidad de pantalla y bibliotecas ABI. Con el bloque android.bundle
en el archivo build.gradle
del módulo básico, como se muestra a continuación, puedes inhabilitar la compatibilidad con uno o más tipos de APK de configuración:
Groovy
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
Kotlin
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
Cómo controlar los cambios de idioma
Google Play determina qué recursos de idioma instalar con la app en función del idioma seleccionado en la configuración del dispositivo del usuario. Por ejemplo, piensa en un usuario que cambia el idioma predeterminado del sistema después de descargar tu app. Si la app admite ese idioma, el dispositivo solicita y descarga los APKs de configuración adicionales para esos recursos de idioma de Google Play.
Para apps que tienen un selector de idioma interno, que permite cambiar su idioma de manera dinámica y es independiente de la configuración del sistema, debes implementar algunos cambios que prevengan las fallas por recursos faltantes. Puedes establecer la propiedad android.bundle.language.enableSplit
en false
, o bien implementar descargas de idiomas on demand usando la biblioteca de Play Core, como se describe en Cómo descargar recursos de idiomas adicionales.