Acerca de los paquetes Android App Bundle

Android App Bundle es un nuevo formato de carga que incluye todo el código compilado y los recursos de tu app, pero delega la generación y firma de APK a Google Play.

El nuevo modelo de entrega de apps de Google Play, llamado Dynamic Delivery, usa tu paquete de aplicación con el fin de generar y entregar APK optimizados para la configuración del dispositivo de cada usuario, por lo que solo se descargan el código y los recursos necesarios para ejecutar tu app. Ya no es necesario compilar, firmar y administrar múltiples APK para admitir diferentes dispositivos, y los usuarios obtienen descargas más pequeñas y optimizadas.

Además, puedes agregar módulos de funciones dinámicas al proyecto de tu app y luego incluirlos en el paquete de aplicación. Estos módulos contienen funciones y elementos que puedes no incluir cuando los usuarios descarguen e instalen tu app por primera vez. Si usa la biblioteca de Play Core, la app puede solicitar más adelante la descarga de los módulos como APK de funciones dinámicas y, mediante Dynamic Delivery, Google Play entregará al dispositivo solamente el código y los recursos para ese módulo.

Mira el siguiente video a fin de obtener una descripción general de por qué deberías usar los paquetes Android App Bundle para subir tu app.

La publicación con los paquetes Android App Bundle también aumenta el límite de tamaño de la app a 150 MB sin tener que usar archivos de expansión del APK. Ten en cuenta que este límite solo se aplica al tamaño de descarga real, no al tamaño de publicación. Por lo tanto, los usuarios pueden descargar apps de hasta 150 MB y, con Dynamic Delivery, todo ese almacenamiento se destina solamente al código y los recursos que necesitan para ejecutar la aplicación. Cuando combinas esto con la compatibilidad con bibliotecas nativas sin comprimir, las apps más grandes, como los juegos, pueden reducir el uso del disco y aumentar la retención de usuarios.

Si utilizas Android Studio 3.2 o versiones posteriores, es muy sencillo admitir Dynamic Delivery en la mayoría de los proyectos de apps y puedes compilar un paquete Android App Bundle con unos pocos clics. Sin embargo, para agregar módulos de funciones dinámicas, se necesita un poco más de esfuerzo y tal vez una refactorización de tu app.

En esta página, se describen los pasos para comenzar a compilar paquetes Android App Bundle y se explican algunos conceptos importantes relacionados con los paquetes de aplicaciones y Dynamic Delivery.

Cómo comenzar

Para compilar paquetes de aplicaciones y brindar compatibilidad con Dynamic Delivery, sigue estos pasos:

  1. Descarga Android Studio 3.2 o versiones posteriores. Es la forma más sencilla de agregar módulos de funciones dinámicas y compilar paquetes de aplicaciones.

  2. Agrega compatibilidad con Dynamic Delivery. Para hacerlo, incluye un módulo base; organiza el código y los recursos de los APK de configuración y, de manera opcional, agrega módulos de funciones dinámicas.

  3. Compila un paquete Android App Bundle con Android Studio. También puedes implementar tu app en un dispositivo conectado desde un paquete de aplicación modificando la configuración de ejecución/depuración y seleccionando la opción para implementar APK desde el paquete de aplicación. Ten en cuenta que, al usar esta opción, los tiempos de compilación se prolongan respecto de la compilación e implementación de un solo APK.

  4. Prueba tu paquete Android App Bundle utilizándolo para generar los APK que implementas en un dispositivo.

  5. Inscríbete en el servicio de firma de apps de Google Play. De lo contrario, no podrás subir tu paquete de aplicación a Play Console.

  6. Publica tu paquete de aplicación en Google Play.

El formato Android App Bundle

El Android App Bundle es un archivo (con la extensión .aab) que subes a Google Play para brindar compatibilidad con Dynamic Delivery.

Los paquetes de aplicaciones son objetos binarios firmados que organizan el código y los recursos de tu app en módulos, como se muestra en la figura 1. El código y los recursos de cada módulo se organizan de manera similar al contenido de un APK, lo que tiene sentido porque cada uno de los módulos puede generarse como un APK independiente. A continuación, Google Play usa el paquete de aplicación para generar los diferentes APK que se entregan a los usuarios, como el APK básico, los APK de funciones dinámicas, los APK de configuración y los APK múltiples (para dispositivos que no admiten APK divididos). Los directorios de color azul, como drawable/, values/ y lib/, representan el código y los recursos que usa Google Play cuando crea APK de configuración para cada módulo.

Los paquetes de aplicaciones organizan tu app en directorios, y cada directorio representa un módulo. Dentro de cada directorio de módulo, el código y los recursos se organizan de manera similar al contenido de un APK típico.

Figura 1: Contenido de un paquete Android App Bundle con un módulo base y dos módulos de funciones dinámicas.

En la siguiente lista, se describen con más detalle algunos de los archivos y directorios del paquete de aplicación:

  • base/, feature1/ y feature2/: Cada uno de estos directorios de nivel superior representa un módulo diferente de tu app. El módulo base para la aplicación siempre se encuentra en un directorio base del paquete de aplicación. Sin embargo, el directorio de cada módulo de funciones dinámicas recibe el nombre que especifica el atributo split en el manifiesto del módulo. Para obtener más información, consulta los detalles sobre el manifiesto del módulo de funciones dinámicas.
  • BUNDLE-METADATA/: Este directorio incluye archivos de metadatos que contienen información útil para herramientas o tiendas de aplicaciones. Los archivos de metadatos pueden incluir asignaciones de ProGuard y la lista completa de los archivos DEX de tu app. Los archivos incluidos en este directorio no están empaquetados en los APK de tu aplicación.
  • Archivos de búfer de protocolo (*.pb) de módulos: Estos archivos proporcionan metadatos que ayudan a describir el contenido de cada módulo de app para las tiendas de aplicaciones, como Google Play. Por ejemplo, BundleConfig.pb proporciona información sobre el paquete, como qué versión de las herramientas de compilación se usó para compilar el paquete de aplicación, y native.pb y resources.pb describen el código y los recursos de cada módulo, lo que resulta útil cuando Google Play optimiza los APK para diferentes configuraciones del dispositivo.
  • manifest/: A diferencia de los APK, los paquetes de aplicaciones almacenan el archivo AndroidManifest.xml de cada módulo en este directorio independiente.
  • dex/: A diferencia de los APK, los paquetes de aplicaciones almacenan los archivos DEX de cada módulo en este directorio independiente.
  • res/, lib/ y assets/: Estos directorios son idénticos a los de un APK típico. Cuando subes el paquete de aplicación, Google Play inspecciona estos directorios y empaqueta solamente los archivos que satisfacen la configuración del dispositivo de destino, sin alterar las rutas de acceso de los archivos.
  • root/: Este directorio almacena archivos que luego se trasladan al directorio raíz de cualquier APK que incluya el módulo en el que se encuentra este directorio. Por ejemplo, el directorio base/root/ de un paquete de aplicación puede incluir recursos basados en Java que tu app carga mediante Class.getResource(). Esos archivos luego se trasladan al directorio raíz del APK base de tu app y al de cada APK múltiple que genera Google Play. Las rutas de acceso dentro de este directorio también se conservan. Es decir, los directorios (y sus subdirectorios) también se trasladan al directorio raíz del APK.

Cómo compilar e implementar paquetes Android App Bundle

Un paquete de aplicación es diferente de un APK en el sentido de que no puedes implementar el primero en un dispositivo. Más bien, es un formato de carga 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 APK de la app y entregarlos a los usuarios a través de Dynamic Delivery.

Si utilizas Android Studio, puedes compilar tu proyecto como un paquete de aplicación firmado con solo unos clics. Si no usas el IDE, puedes compilar un paquete de aplicación desde la línea de comandos. Luego, simplemente, sube tu paquete de aplicación a Play Console para probar o publicar la app con Dynamic Delivery.

Cómo probar tu paquete de aplicación

Después de compilar tu paquete Android App Bundle, debes probar la forma en la que Google Play lo usará para generar APK y cómo se comportarán esos APK cuando se implementen en un dispositivo.

Para probar tu paquete de aplicación, usa cualquiera de los siguientes métodos:

Cómo descargar módulos de funciones dinámicas con la biblioteca de Play Core

Si tu app incluye funciones dinámicas, necesita usar la biblioteca de Play Core para solicitar, supervisar y administrar descargas de módulos de funciones dinámicas. Para obtener más información, consulta el artículo Cómo descargar módulos con la biblioteca de Play Core.

Si quieres ver la biblioteca en acción, prueba la app de muestra de la biblioteca de Play Core.

Nota sobre las Apps instantáneas

En Android Studio 3.2 o versiones posteriores, puedes agregar una experiencia instantánea a un paquete de aplicación siempre que el tamaño de tu app sea lo suficientemente pequeño. Para obtener más información sobre los límites de tamaño de los diferentes tipos de experiencias instantáneas que puedes crear, consulta el artículo Descripción general de Google Play Instant.

Restricción de tamaño de descarga comprimida

Si bien la publicación con paquetes Android App Bundle ayuda a los usuarios a instalar tu app con la descarga más liviana posible, las descargas comprimidas están limitadas a 150 MB. Es decir, cuando un usuario descarga tu app, el tamaño total de los APK comprimidos necesarios para instalarla (por ejemplo, el APK base y los APK de configuración) no debe exceder los 150 MB. Cualquier descarga posterior, como la de una función dinámica (y sus APK de configuración) a pedido, también debe cumplir con la restricción de tamaño de descarga comprimida.

Cuando subes un paquete de aplicación, si Play Console detecta que alguna de las descargas posibles de tu app o sus funciones a pedido superan los 150 MB, se produce un error.

Ten en cuenta que los paquetes Android App Bundle no admiten archivos de expansión del APK (*.obb). Por lo tanto, si encuentras este error al publicar un paquete de aplicación, usa uno de los siguientes recursos para reducir los tamaños de descarga del APK comprimido:

  • Asegúrate de habilitar todos los APK de configuración estableciendo enableSplit = true para cada tipo de APK de configuración. Así se garantiza que los usuarios descarguen solo el código y los recursos que necesitan para ejecutar la app en sus dispositivos.
  • Asegúrate de reducir el tamaño de tu app quitando el código y los recursos no utilizados.
  • Sigue las prácticas recomendadas para reducir aún más el tamaño de la app.
  • Considera convertir funciones que solo utilizan algunos de los usuarios en módulos de funciones dinámicas que tu app puede descargar a pedido más adelante. Ten en cuenta que para ello puede ser necesario refactorizar la app, así que asegúrate de probar primero las otras sugerencias descritas anteriormente.

Problemas conocidos

A continuación se indican ciertos problemas conocidos que se presentan al compilar paquetes Android App Bundle o al entregar apps mediante Dynamic Delivery. Si encuentras problemas que no están incluidos aquí, envía un informe de error.

  • Si usas herramientas que modifican de manera dinámica las tablas de recursos, los APK generados desde paquetes de aplicaciones podrían tener un comportamiento inesperado. Por lo tanto, te recomendamos inhabilitar esas herramientas cuando compiles un paquete de aplicación.
  • En el manifiesto de un módulo de funciones dinámicas, no debes hacer referencia a recursos que no existen en el módulo base. Esto se debe a que, cuando Google Play genera el APK base de tu app, combina los manifiestos de todos los módulos del APK base. Por lo tanto, la vinculación de recursos falla si el manifiesto del APK base hace referencia a recursos que no existen en ese APK.
  • A partir de Android Studio 3.2 Canary 14, cuando cambias la variante de compilación del módulo base de tu app, la variante de compilación correspondiente no se selecciona automáticamente para los módulos de funciones dinámicas que dependen del módulo base. Por lo tanto, es posible que se produzca un error al compilar la app. Simplemente, asegúrate de seleccionar la misma variante de compilación para el módulo base y para otros módulos que dependan de él.
  • Actualmente, es posible establecer propiedades en la configuración de compilación de un módulo de funciones dinámicas que entran en conflicto con las de los módulos base (o de otros módulos). Por ejemplo, puedes configurar buildTypes.release.debuggable = true en el módulo base y establecerlo en false en un módulo de funciones dinámicas. Estos conflictos pueden causar problemas relacionados con la compilación y el tiempo de ejecución. Ten en cuenta que, de forma predeterminada, los módulos de funciones dinámicas heredan algunas configuraciones de compilación del módulo base. Por lo tanto, asegúrate de comprender qué opciones debes mantener y cuáles debes omitir en la configuración de compilación del módulo de funciones dinámicas.
  • Debido a que las instalaciones de apps pueden requerir la descarga de más de un APK (como el APK base y algunos de sus APK de configuración), debes tener cuidado al transferir manualmente los APK de tu app a un dispositivo (lo que también se conoce como sideloading). De lo contrario, tu app puede experimentar problemas de tiempo de ejecución debido a la falta de código y recursos.
  • Actualmente, Google Play incluye todo el código y los recursos de un módulo de funciones dinámicas en un solo APK. En el futuro cercano, en el caso de los dispositivos con Android 5.0 (API nivel 21) y versiones posteriores, la entrega se optimizará para usar APK de configuración.
  • La descarga de módulos de funciones dinámicas requiere que los dispositivos tengan instalada una versión reciente de la app de Play Store. Por lo tanto, si tu app incluye módulos de funciones dinámicas, las descargas para un porcentaje muy pequeño de usuarios pueden recurrir a un solo APK múltiple optimizado, la misma experiencia de descarga que en el caso de dispositivos que ejecutan Android 4.4 (API nivel 20) y versiones anteriores.

Recursos adicionales

Para obtener más información sobre Android App Bundle, consulta los siguientes recursos.

Ejemplos

Codelabs

  • Tu primer paquete Android App Bundle, un codelab que explora los principios básicos de los archivos Android App Bundle y te muestra cómo comenzar rápidamente a compilar el tuyo con Android Studio. En este codelab, también se analiza cómo probar los paquetes de aplicaciones usando bundletool.
  • Módulos a pedido, muy útiles como ayuda para crear una app que descarga e instala funciones dinámicas a pedido.

Entradas de blog

Videos