Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Acerca de Android App Bundle

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

Google Play usa tu paquete de aplicación a fin de generar y entregar APK optimizados para la configuración de cada dispositivo, por lo que solo se descargan el código y los recursos necesarios a fin de ejecutar tu app en un dispositivo específico. Ya no es necesario compilar, firmar y administrar varios APK para optimizar la compatibilidad con diferentes dispositivos, y los usuarios obtienen descargas más pequeñas y optimizadas.

Además, puedes agregar módulos de funciones dinámicas a tu proyecto de apps e incluirlos en el paquete de aplicación. Esos módulos contienen funciones y elementos que puedes optar por no incluir cuando los usuarios descarguen e instalen tu app por primera vez. Si usa la biblioteca de Play Core, tu app podrá solicitar más adelante la descarga de esos módulos. Google Play publicará solo el código y los recursos para ese módulo en el dispositivo. Cuando combinas esto con la compatibilidad con bibliotecas nativas sin comprimir, las apps más grandes (como los juegos) pueden reducir los requisitos de almacenamiento y aumentar la retención de usuarios.

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

Con Android App Bundle, la restricción del tamaño de descarga comprimido ahora es de 150 MB. No puedes usar el paquete de aplicación con archivos de expansión de APK.

Si usas Android Studio 3.2 o versiones posteriores, puedes compilar un Android App Bundle con solo unos clics. Sin embargo, para agregar módulos de funciones dinámicas, se necesita más esfuerzo, ya que puede implicar la 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 empezar

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 si modificas la configuración de ejecución y depuración y seleccionas la opción para implementar APK desde el paquete de aplicación. Ten en cuenta que, cuando se usa esta opción, los tiempos de compilación son más prolongados que cuando se compila e implementa un solo APK.

  4. Prueba tu Android App Bundle. Para ello, úsalo a fin de generar los APK que implementas en un dispositivo.

  5. Inscríbete en el programa 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.

Para compilar paquetes de aplicaciones que incluyan paquetes de elementos, consulta Acerca de Dynamic Asset Delivery.

El formato Android App Bundle

Un Android App Bundle es un archivo (con la extensión .aab) que subes a Google Play.

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. Luego, Google Play usa el paquete de aplicación para generar los diferentes APK que se entregan a los usuarios, como el APK base, 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: El contenido de un Android App Bundle con un módulo base, dos módulos de funciones dinámicas y dos paquetes de elementos

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. Si deseas obtener más información, lee sobre el manifiesto del módulo de funciones dinámicas.
  • asset_pack_1/ y asset_pack_2/: En el caso de las apps o los juegos grandes con gráficos complejos, puedes modularizar los elementos en paquetes, que son ideales para los juegos debido a que tienen mayores límites de tamaño. Puedes personalizar el modo y el momento en el que se descarga cada paquete de elementos en un dispositivo según tres modos de publicación: install-time, fast-follow y on-demand. Todos los paquetes de activos se alojan en Google Play y se publican desde allí. Para obtener más información sobre cómo agregar paquetes de elementos a tu paquete de aplicación, consulta la descripción general de Dynamic Asset Delivery.
  • 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 la versión de las herramientas de compilación que se usó para compilar el paquete de aplicación, mientras que 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/: En este directorio se almacenan 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. También se conservan las rutas de acceso dentro de este directorio. 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

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 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, 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 Descarga de 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 del tamaño de descarga comprimido

Publicar con Android App Bundles permite que los usuarios instalen tu app con la menor cantidad posible de descargas y aumenta el límite del tamaño de descarga comprimido 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 superar 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 comprimido. Los paquetes de elementos no tienen incidencia en este límite de tamaño, pero sí tienen otras restricciones de tamaño.

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 cuando publicas un paquete de aplicación, usa uno de los siguientes recursos para reducir los tamaños de descarga del APK comprimido:

  • Asegúrate de establecer enableSplit = true para cada tipo de APK de configuración a fin de habilitar todos los 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 quitar el código y los recursos no utilizados para reducir el tamaño de tu app.
  • 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 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.

Errores conocidos

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

  • Las instalaciones parciales de apps transferidas, es decir, las apps que no se instalaron mediante Google Play Store y no contienen uno o más APK divididos necesarios, fallan en todos los dispositivos certificados por Google y dispositivos que ejecutan Android 10 (API nivel 29) o versiones posteriores. Cuando se descarga tu app a través de Google Play Store, Google se asegura de que todos los componentes necesarios de la app estén instalados.
  • 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.
  • Para la descarga de módulos de funciones dinámicas, es necesario 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, que sirven de ayuda para crear una app que descarga e instala funciones dinámicas a pedido.

Entradas de blog

Videos