bundletool

bundletool es la herramienta subyacente que Android Studio, el complemento de Android para Gradle y Google Play usan para compilar un Android App Bundle. bundletool puede convertir un paquete de aplicación en los diversos APKs que se implementan en dispositivos.

Los paquetes del SDK de Android (ASB) y sus APKs se compilan con bundletool. También está disponible como herramienta de línea de comandos, por lo que puedes compilar paquetes de aplicación y de SDK por tu cuenta y volver a crear la compilación del servidor de Google Play de los APKs de tu app o los APKs de tu SDK habilitado para el entorno de ejecución.

Descargar bundletool

Si aún no lo hiciste, descarga bundletool del repositorio de GitHub.

Cómo compilar y probar un paquete de aplicación

Puedes usar Android Studio o la herramienta de línea de comandos de bundletool para compilar tu Android App Bundle y probar la generación de APKs desde este paquete de aplicación.

Cómo compilar un paquete de aplicación

Usa Android Studio y el complemento de Android para Gradle para compilar y firmar un Android App Bundle. Sin embargo, si no es posible usar el IDE (por ejemplo, porque estás usando un servidor de compilación continua), también puedes compilar el paquete de tu aplicación desde la línea de comandos y firmarlo con jarsigner.

Para obtener más información para compilar paquetes de aplicación con bundletool, consulta Cómo compilar un paquete de aplicación con bundletool.

Cómo generar un conjunto de APKs desde tu paquete de aplicación

Una vez que hayas creado tu Android App Bundle, deberás probar cómo lo usa Google Play para generar los APKs y cómo se comportan estos cuando se implementan en un dispositivo.

Existen dos maneras de probar tu paquete de aplicación:

  • Usa la herramienta de línea de comandos de bundletool de forma local.
  • Usa un segmento de pruebas para subir el paquete a Play Console mediante Google Play.

En esta sección, se explica cómo usar bundletool para probar de forma local el paquete de tu aplicación.

Cuando bundletool genera los APKs desde el paquete de aplicación, se incluyen los APKs generados en un contenedor llamado archivo de conjunto de APK, que usa la extensión de archivo .apks. A fin de generar un conjunto de APK para todas las configuraciones del dispositivo que admite tu app desde el paquete correspondiente, usa el comando bundletool build-apks, como se muestra a continuación:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Si quieres implementar los APKs en un dispositivo, también deberás incluir la información de firma de tu app, como se muestra en el siguiente comando. Si no especificas la información de firma, bundletool intentará firmar tus APKs por ti con una clave de depuración.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

En la siguiente tabla, se describen con mayor detalle las diversas marcas y opciones que puedes configurar con el comando bundletool build-apks:

Tabla 1: Opciones para el comando bundletool build-apks

Marca Descripción
--bundle=path (Obligatorio) Especifica la ruta de acceso al paquete de aplicación que compilaste con Android Studio. Para obtener más información, lee Cómo compilar tu proyecto.
--output=path (Obligatorio) Especifica el nombre del archivo .apks de salida, que contiene todos los artefactos APK de tu app. Para probar los artefactos de este archivo en un dispositivo, sigue los pasos de la sección sobre cómo implementar APKs en un dispositivo conectado.
--overwrite Reemplaza cualquier archivo de salida existente por la ruta de acceso que especifiques mediante la opción --output. Si no incluyes esta marca y el archivo de salida ya existe, obtendrás un error de compilación.
--aapt2=path Especifica una ruta de acceso a AAPT2 personalizada. De forma predeterminada, bundletool incluye su propia versión de AAPT2.
--ks=path (Opcional) Especifica la ruta de acceso al almacén de claves de implementación que se usa para firmar los APKs. Si no incluyes esta marca, bundletool intentará firmar tus APKs con una clave de firma de depuración.
--ks-pass=pass:password
o
--ks-pass=file:/path/to/file
Especifica la contraseña de tu almacén de claves. Si especificas una contraseña en texto sin formato, califícala con pass:. Si pasas la ruta de acceso a un archivo que contiene la contraseña, califícala con file:. Si especificas un almacén de claves con la marca --ks sin especificar --ks-pass, bundletool te solicitará una contraseña desde la línea de comandos.
--ks-key-alias=alias Especifica el alias de la clave de firma que deseas usar.
--key-pass=pass:password
o
--key-pass=file:/path/to/file
Especifica la contraseña para la clave de firma. Si especificas una contraseña en texto sin formato, califícala con pass:. Si pasas la ruta de acceso a un archivo que contiene la contraseña, califícala con file:.

Si esta contraseña es idéntica a la del almacén de claves en sí, puedes omitir esta marca.

--connected-device Indícale a bundletool que compile los APK que se orientan a la configuración de un dispositivo conectado. Si no incluyes esta marca, bundletool generará APK para todas las configuraciones del dispositivo que admite tu app.
--device-id=serial-number Si tienes más de un dispositivo conectado, usa esta marca para especificar el ID de serie del dispositivo en el que desees implementar tu app.
--device-spec=spec_json Proporciona una ruta de acceso a un archivo .json que especifique la configuración del dispositivo al que deseas apuntar. Para obtener más información, consulta la sección sobre Cómo crear y usar archivos JSON de especificación de dispositivo.
--mode=universal Establece el modo en universal. Usa esta opción si deseas que bundletool compile un solo APK que incluya todos los recursos y el código de tu app, de manera que el APK sea compatible con todas las configuraciones del dispositivo compatibles con tu app.

Nota: bundletool incluye solo módulos de funciones que especifican <dist:fusing dist:include="true"/> en su manifiesto, en un APK universal. Si deseas obtener más información, lee sobre el manifiesto del módulo de funciones.

Ten en cuenta que estos APKs son más grandes que los optimizados para una configuración de un dispositivo en particular. Sin embargo, son más fáciles de compartir con verificadores internos que, por ejemplo, quieran probar tu app en varias configuraciones de dispositivos.

--local-testing Habilita tu paquete de aplicación para pruebas locales. Las pruebas locales permiten realizar ciclos de prueba iterativos y rápidos sin necesidad de subirlos a los servidores de Google Play.

Para ver un ejemplo de cómo probar la instalación del módulo con la marca --local-testing, consulta Cómo realizar pruebas locales de instalaciones de módulos.

Cómo implementar APKs en un dispositivo conectado

Una vez que generes un conjunto de APK, bundletool puede implementar la combinación correcta de APK de ese conjunto en un dispositivo conectado.

Por ejemplo, si tienes un dispositivo conectado que ejecuta Android 5.0 (nivel de API 21) o versiones posteriores, bundletool envía el APK base, los APKs del módulo de funciones y los APKs de configuración necesarios para ejecutar tu app en ese dispositivo. De manera alternativa, si tu dispositivo conectado ejecuta Android 4.4 (nivel de API 20) o versiones anteriores, bundletool busca un APK múltiple compatible para implementarlo en el dispositivo.

Para implementar tu app desde un conjunto de APK, usa el comando install-apks y especifica la ruta de acceso del conjunto de APK por medio de la marca --apks=/path/to/apks, como se muestra en el siguiente comando. Si tienes varios dispositivos conectados, debes agregar la marca --device-id=serial-id para especificar el dispositivo de destino.

bundletool install-apks --apks=/MyApp/my_app.apks

Cómo generar un conjunto de APK específicos del dispositivo

Si no quieres compilar un conjunto de APKs para todas las configuraciones del dispositivo que admite tu app, puedes compilar APKs que se orienten solo a la configuración de un dispositivo conectado por medio de la opción --connected-device, como se muestra en el siguiente comando. Si tienes varios dispositivos conectados, debes incluir la marca --device-id=serial-id para especificar el dispositivo de destino.

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Cómo generar y usar archivos JSON de especificación de dispositivo

bundletool puede generar un conjunto de APK que se oriente a una configuración del dispositivo especificada por un archivo JSON. Para generar primero un archivo JSON para un dispositivo conectado, ejecuta el siguiente comando:

bundletool get-device-spec --output=/tmp/device-spec.json

bundletool crea un archivo JSON para tu dispositivo en el directorio de la herramienta. Luego, puedes pasar el archivo a bundletool para generar un conjunto de APKs que se oriente solo a la configuración descrita en ese archivo JSON de la siguiente manera:

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Cómo crear manualmente una especificación de dispositivo JSON

Si no tienes acceso al dispositivo para el que deseas crear un conjunto de APK específico (por ejemplo, si quieres probar tu app con un dispositivo que no tienes a mano), puedes crear manualmente un archivo JSON con el siguiente formato:

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

Luego puedes pasar este JSON al comando bundle extract-apks, como se describe en la sección anterior.

Cómo extraer los APK específicos del dispositivo de un conjunto de APK existente

Si tienes un conjunto de APK existente y quieres extraer de él un subconjunto de APK que se orienten a una configuración del dispositivo específica, puedes usar el comando extract-apks y establecer una especificación de dispositivo JSON, de la siguiente manera:

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json

Cómo medir los tamaños de descarga estimados de los APKs en un conjunto de APKs

Para medir los tamaños de descarga estimados de los APKs en un conjunto de APK de la manera en que se publicarían comprimidos por medio de la conexión, usa el comando get-size total:

bundletool get-size total --apks=/MyApp/my_app.apks

Puedes modificar el comportamiento del comando get-size total con las siguientes marcas:

Tabla 2: Opciones para el comando get-size total

Marca Descripción
--apks=path (Obligatorio) Especifica la ruta de acceso al archivo de conjunto de APK existente del cual se mide el tamaño de descarga.
--device-spec=path Especifica la ruta al archivo de especificaciones del dispositivo (de get-device-spec o construido manualmente) que se debe usar para la coincidencia. Puedes especificar una ruta de acceso parcial para evaluar un conjunto de configuraciones.
--dimensions=dimensions Especifica las dimensiones que se usan cuando se calculan las estimaciones de tamaño. Acepta una lista separada por comas de: SDK, ABI, SCREEN_DENSITY y LANGUAGE. Para medir en todas las dimensiones, especifica ALL.
--instant Mide el tamaño de descarga de los APK habilitados de manera instantánea, en lugar de los APK instalables. De manera predeterminada, bundletool mide los tamaños de descarga de los APK instalables.
--modules=modules Especifica una lista de módulos separados por comas en el conjunto de APK para tener en cuenta en la medición. El comando bundletool incluye automáticamente los módulos dependientes para el conjunto especificado. De manera predeterminada, el comando mide el tamaño de descarga de todos los módulos instalados durante la primera descarga.

Recursos adicionales

Si quieres obtener más información para usar bundletool, mira Paquetes de aplicación: prueba de paquetes con bundletool y Play Console.