bundletool

Una vez que creaste tu Android App Bundle, deberías probar la manera en que Google Play lo usa para generar los APK y cómo estos se comportan cuando se implementan en un dispositivo. Hay dos maneras de probar el paquete de app: localmente, por medio de la herramienta de línea de comandos bundletool y con Google Play, mediante la carga de tu paquete en Play Console y el uso de un segmento de prueba. En esta página, se explica cómo usar bundletool para probar tu paquete de app de forma local.

bundletool es la herramienta subyacente que Gradle, Android Studio y Google Play usan para compilar un Android App Bundle o convertir un paquete de app en los diversos APK que se implementan en dispositivos. bundletool también está disponible para ti como una herramienta de línea de comandos, a fin de que puedas recrear, inspeccionar y verificar la compilación de los APK de tu app del servidor de Google Play.

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

De forma predeterminada, el IDE no usa paquetes de apps a fin de implementar tu app en un dispositivo local para realizar pruebas. Sin embargo, puedes modificar tu configuración de ejecución o depuración y seleccionar la opción a fin de implementar el APK desde el paquete de app para ver cómo afecta la ejecución de tu app.

Descarga bundletool

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

Cómo generar un conjunto de APK desde tu paquete de app

Cuando bundletool genera los APK desde tu paquete de app, los incluye en un contenedor llamado archivo de conjunto de APK, que usa la extensión de archivo .apks. Para generar un conjunto de APK para todas las configuraciones del dispositivo que tu app admite desde tu paquete de app, usa el 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 APK 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 intenta firmar tus APK 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 tabla que aparece a continuación, se describen con mayor detalle los diversos indicadores y opciones que puedes configurar cuando se usa el comando bundletool build-apks. Solo --bundle y --output son obligatorios; todos los demás indicadores son opcionales.

Indicador Descripción
--bundle=path (Obligatorio) Especifica la ruta de acceso al paquete de app 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 para tu app. Para probar los artefactos de este archivo en un dispositivo, ve a la sección sobre cómo implementar los APK en un dispositivo conectado.
--overwrite Incluye este indicador si deseas sobrescribir cualquier archivo de salida existente con la misma ruta de acceso que especifiques mediante la opción --output. Si no incluyes este indicador 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 manera predeterminada, bundletool incluye su propia versión de AAPT2.
--ks=path Especifica la ruta de acceso al almacén de claves de implementación que se usa para firmar los APK. Este indicador es opcional. Si no lo incluyes, bundletool intentará firmar tus APK 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 estás especificando una contraseña en texto sin formato, califícala con pass:. Si estás pasando la ruta de acceso a un archivo que contiene la contraseña, califícala con el archivo file:. Si especificas un almacén de claves por medio del indicador --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 estás especificando una contraseña en texto sin formato, califícala con pass:. Si estás pasando la ruta de acceso a un archivo que contiene la contraseña, califícala con el archivo file:.

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

--connected-device Indica a bundletool que compile los APK que se orientan a la configuración de un dispositivo conectado. Si no incluyes este indicador, bundletool genera APK para todas las configuraciones del dispositivo que admite tu app.
--device-id=serial-number Si tienes más de un dispositivo conectado, usa este indicador para especificar el ID de serie del dispositivo en el que desees implementar tu app.
--device-spec=spec_json Usa este indicador para proporcionar una ruta de acceso a un archivo .json que especifique la configuración del dispositivo al que desees orientar. Para obtener más información, ve a la sección sobre cómo Crear y usar archivos JSON de especificación de dispositivo.
--mode=universal Configura el modo en universal 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 dinámicas que especifican <dist:fusing dist:include="true"/> en su manifiesto en un APK universal. Para obtener más información, lee sobre el Manifiesto del módulo de funciones dinámicas.

Ten en cuenta que estos APK son más grandes que los optimizados para una configuración del 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 del dispositivo.

Cómo implementar los APK 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 instala el APK base, los APK de funciones dinámicas y los APK 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 una variante de varios APK compatible y la implementa en tu 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 del indicador --apks=/path/to/apks, como se muestra a continuación. (Si tienes varios dispositivos conectados, especifica un dispositivo de destino al agregar el indicador --device-id=serial-id).

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

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

Si prefieres no crear un conjunto de APK para todas las configuraciones del dispositivo que admite tu app, puedes compilar APK que se orienten solo a la configuración de un dispositivo conectado por medio de la opción --connected-device, como se muestra a continuación. (Si tienes varios dispositivos conectados, especifica un dispositivo de destino mediante la inclusión del indicador --device-id=serial-id).

    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 es capaz de 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 donde se encuentra la herramienta. Luego puedes pasarlo a bundletool para generar un conjunto de APK que se oriente solo a la configuración descripta 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, un amigo quiere probar tu app con un dispositivo que no tiene 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 APK en un conjunto de APK

Para medir los tamaños de descarga estimados de los APK 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 mediante los siguientes indicadores:

Indicador 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 de acceso al archivo de especificaciones del dispositivo (de get-device-spec o construido manualmente) para 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 al calcular 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 instantáneamente 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

Para obtener más información sobre cómo usar bundletool, consulta el siguiente recurso.

Codelabs

  • Tu primer 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. Este codelab también explora cómo probar los paquetes de apps con bundletool.