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.

La mayoría de los proyectos de apps no requieren mucho esfuerzo para compilar paquetes de aplicaciones que admitan la entrega de APK optimizados. Por ejemplo, si ya organizas el código y los recursos de tu app según convenciones establecidas, simplemente compila paquetes Android App Bundle firmados con Android Studio o con la línea de comandos y súbelos a Google Play. La entrega de APK optimizados se convertirá en un beneficio automático.

Cuando usas el formato de paquete de aplicación para publicar tu app, también puedes aprovechar Play Feature Delivery, que te permite agregar módulos de funciones al proyecto de tu app. Esos módulos contienen funciones y recursos que puedes optar por no incluir cuando los usuarios descarguen e instalen tu app por primera vez. Si tu app usa la biblioteca de Play Core, 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.

Los desarrolladores de juegos que publican sus apps con paquetes de aplicaciones pueden usar Play Asset Delivery: la solución de Google Play para entregar grandes cantidades de recursos de juego que ofrece a los desarrolladores métodos de entrega flexibles y un alto rendimiento.

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.

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.

Cómo comenzar

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.

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.

Para compilar paquetes de aplicaciones, sigue estos pasos:

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

  2. Agrega compatibilidad con Play Feature 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.

  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 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 Play Asset 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 con la biblioteca de Play Core

Si tu app incluye módulos de funciones, necesita usar la biblioteca de Play Core para solicitar, supervisar y administrar descargas de módulos de funciones. 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 un módulo de función (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 ese 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.
  • Procura convertir funciones que solo algunos usuarios utilizan en módulos de funciones que tu app pueda 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.

Errores conocidos

A continuación, se indican los problemas conocidos que se presentan cuando compilas o entregas tu app con Android App Bundles. 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 que inhabilites esas herramientas cuando compiles un paquete de aplicación.
  • En el manifiesto de un módulo de funciones, no debes hacer referencia a recursos que no existan en el módulo base. Eso 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, esta no se selecciona automáticamente para los módulos de funciones que dependen del módulo base. Por lo tanto, es posible que se produzca un error cuando se compile 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 que entran en conflicto con las de los módulos base (u otros). Por ejemplo, puedes configurar buildTypes.release.debuggable = true en el módulo base y establecerlo en false en un módulo de funciones. Esos 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 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.
  • Para la descarga de módulos de funciones, 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, 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 (nivel de API 20) y versiones anteriores.

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, 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 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 de una app siempre se encuentra en un directorio base del paquete de aplicación. Sin embargo, el directorio de cada módulo de funciones 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.
  • 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 elementos se alojan en Google Play y se entregan desde allí. A fin de obtener más información para agregar paquetes de elementos a tu paquete de aplicación, consulta la descripción general de Play 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.

Descripción general de los APK divididos

Un componente fundamental a la hora de entregar aplicaciones optimizadas es el mecanismo de APK dividido disponible en Android 5.0 (nivel de API 21) y versiones posteriores. Los APK divididos son muy similares a los APK normales: incluyen el código de bytes DEX compilado, los recursos y un manifiesto de Android. Sin embargo, la plataforma Android puede tratar varios APK divididos instalados como una sola app. Por lo tanto, puedes instalar varios APK divididos que tengan acceso a código y recursos comunes, y aparezcan como una misma app instalada en el dispositivo.

El beneficio de los APK divididos es la capacidad de dividir un APK monolítico, es decir, un APK que incluye código y recursos para todas las funciones y configuraciones de dispositivos compatibles con la app, en paquetes independientes más pequeños que se instalan en el dispositivo de un usuario según sea necesario.

Por ejemplo, un APK dividido puede incluir el código y los recursos para una función adicional que solo algunos de los usuarios necesitan, mientras que otro APK dividido incluye recursos para solo un idioma específico o una densidad de pantalla particular. Cada uno de estos APK divididos se descarga e instala cuando el usuario lo solicita o el dispositivo lo requiere.

A continuación, se describen los diferentes tipos de APK que se pueden instalar juntos en un dispositivo para formar la experiencia de app completa. En las demás secciones de esta página, aprenderás a configurar tu proyecto de app para admitir estos APK.

  • APK de base: Este APK contiene código y recursos a los que pueden acceder todos los demás APK divididos y proporciona la funcionalidad básica de la app. Cuando un usuario solicita descargar tu app, este APK se descarga y se instala primero. Esto se debe a que solo el manifiesto del APK de base contiene una declaración completa de los servicios, los proveedores de contenido, los permisos, los requisitos de versión de la plataforma y las dependencias de las funciones del sistema de la app. Google Play genera el APK de base para la app a partir del módulo de app (o base) de tu proyecto. Si te interesa reducir el tamaño de descarga inicial de la app, es importante tener en cuenta que todo el código y los recursos incluidos en este módulo se incluyen en el APK de base de la app.
  • APK de configuración: Cada uno de estos APK incluye bibliotecas nativas y recursos para una densidad de pantalla, una arquitectura de CPU o un idioma específicos. Cuando un usuario descarga la app, el dispositivo descarga e instala solo los APK de configuración correspondientes para su dispositivo. Cada APK de configuración depende de un APK de base o de un APK de módulo de función. Es decir, se descargan y se instalan junto con el APK al que proporcionan código y recursos. A diferencia de los módulos de base y de funciones, no es necesario crear un módulo independiente para los APK de configuración. Si usas las prácticas estándar para organizar recursos alternativos y específicos para cada configuración en tus módulos de base y de funciones, Google Play generará automáticamente los APK de configuración.
  • APK del módulo de funciones: cada uno de estos APK contiene código y recursos para una función de la app que se modulariza mediante módulos de funciones. Puedes personalizar cómo y cuándo se descarga esa función en un dispositivo. Por ejemplo, se puede usar la biblioteca de Play Core para instalar las funciones a pedido después de instalar el APK de base en el dispositivo a fin de brindar funcionalidad adicional al usuario. Por ejemplo, piensa en una app de chat que descarga e instala la funcionalidad para capturar y enviar fotos únicamente cuando el usuario solicita usarla. Dado que los módulos de funciones pueden no estar disponibles en el momento de la instalación, debes incluir el código y los recursos comunes en el APK de base. Eso significa que el módulo de función debe suponer que solo el código y los recursos del APK de base estarán disponibles durante la instalación. Google Play genera los APK de módulos de funciones para tu app a partir de los módulos de funciones del proyecto.

Otro ejemplo sería una app con tres módulos de funciones y compatibilidad con diversas configuraciones de dispositivos. A continuación, en la figura 1, se ilustra un ejemplo de árbol de dependencias para los diversos APK de la app. Allí se ve que el APK de base forma la cabeza del árbol, y todos los demás APK dependen del APK de base. (Si quieres saber cómo se representan los módulos para esos APK en un Android App Bundle, consulta El formato Android App Bundle).

El APK de base forma la cabeza del árbol, y los APK de funciones dependen de él. Los APK de configuración, que incluyen código y recursos específicos según la configuración del dispositivo para el APK de base y cada APK de módulos de funciones, forman los nodos de hoja del árbol de dependencias.

Figura 1: Árbol de dependencias para una app entregada con APK divididos

Recuerda que no necesitas crear estos APK, ya que Google Play lo hace automáticamente usando un único paquete de aplicación firmado que creas con Android Studio. Para obtener más información sobre el formato del paquete de aplicación y cómo crear uno, consulta Cómo compilar, implementar y subir Android App Bundles.

Dispositivos con Android 4.4 (API nivel 19) y versiones anteriores

Puesto que los dispositivos con Android 4.4 (API nivel 19) y versiones anteriores no admiten la descarga e instalación de APK divididos, Google Play entrega a esos dispositivos un solo APK, llamado APK múltiple, optimizado para la configuración del dispositivo. Es decir, los APK múltiples representan la experiencia de app completa, pero no incluyen código o recursos innecesarios, como los usados para otras densidades de pantalla y arquitecturas de CPU.

Sin embargo, sí incluyen recursos para todos los idiomas que admite la app. De esta forma, por ejemplo, los usuarios pueden cambiar la configuración de idioma preferida de la app sin tener que descargar un APK múltiple diferente.

Los APK múltiples no permiten descargar más adelante módulos de funciones a pedido. Para incluir un módulo de función en este APK, debes inhabilitar On-demand o habilitar Fusing cuando crees el módulo de funciones.

Ten en cuenta que, con los paquetes de aplicación, no necesitas compilar, firmar, subir y administrar APK para cada configuración de dispositivo compatible con tu app. Solo debes compilar y cargar un paquete de aplicación para toda la app, y Google Play se encarga del resto. Entonces, independientemente de si tienes pensado o no admitir dispositivos con Android 4.4 o versiones anteriores, Google Play proporciona un mecanismo de entrega flexible tanto para ti como para los usuarios.

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 y, luego, instala módulos de funciones a pedido

Entradas de blog

Videos