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.

Cómo compilar un paquete de aplicación con una dependencia de paquete de SDK (experimental)

Puedes compilar tu Android App Bundle con una dependencia de paquete del SDK de Android (ASB) desde la línea de comandos y firmarla con jarsigner.

Cada módulo de paquete de aplicación incluye un archivo de búfer de protocolo de módulo (.pb): runtime_enabled_sdk_config.pb. Este archivo contiene la lista de SDK de los que depende un módulo de paquete de aplicación. Para obtener la definición completa de este archivo, consulta el archivo runtime_enabled_sdk_config.proto.

Para compilar un paquete de aplicación con una dependencia de paquete de SDK, sigue los pasos de la sección sobre cómo compilar un paquete de aplicación con bundletool y agrega un archivo runtime_enabled_sdk_config.pb al archivo ZIP de cada módulo de la app con código y recursos compilados.

Estos son algunos campos destacados en el archivo runtime_enabled_sdk_config.pb:

  • Resumen de certificado: Es el resumen SHA-256 del certificado de la clave que se usa para firmar los APK del SDK. Corresponde al certificado del archivo SdkMetadata.pb en formato de archivo del SDK de Android.

  • ID del paquete de recursos: Es el ID del paquete al que se reasignan todos los recursos de este SDK cuando se generan APKs para incorporar el SDK en la app. De esta manera, se habilita la retrocompatibilidad.

Un SDK solo puede aparecer en un módulo. Si varios módulos dependen del mismo SDK, se debe anular la duplicación de la dependencia, y esta se debe mover al módulo básico. Los diferentes módulos no pueden depender de las diferentes versiones del SDK.

Cómo generar APKs a partir de un paquete de aplicación con una dependencia de paquete de SDK (experimental)

Para generar APKs desde tu paquete de aplicación, sigue los pasos de la sección sobre cómo generar un conjunto de APKs desde tu paquete de aplicación o la sección sobre cómo generar un conjunto de APKs específico del dispositivo y proporciona el comando bundletool build-apks con los SDK de los que depende la app. Estos SDK se pueden proporcionar en formato de paquete de SDK o de archivo de SDK.

Puedes proporcionar los SDK como paquetes de SDK si agregas la marca --sdk-bundles de la siguiente manera:

bundletool build-apks --bundle=app.aab --sdk-bundles=sdk1.asb,sdk2.asb \
    --output=app.apks

Puedes proporcionar los SDK como archivos de SDK si agregas la marca --sdk-archives de la siguiente manera:

bundletool build-apks --bundle=app.aab --sdk-archives=sdk1.asar,sdk2.asar \
    --output=app.apks
Cómo generar APKs a partir de un paquete de aplicación con una dependencia de paquete de SDK para dispositivos que no admiten la biblioteca de SDK

Los dispositivos anteriores a Android 13 no admiten la instalación de bibliotecas de SDK ni su ejecución en el entorno de ejecución de SDK. Bundletool oculta la complejidad de retrocompatibilidad y genera múltiples variantes de tu conjunto de APK a partir del mismo paquete de aplicación cuando ejecutas bundletool build-apks con la opción --sdk-bundles o --sdk-archives. Las diversas variantes se orientan a dispositivos con diferentes capacidades:

  • Existe una variante para dispositivos más nuevos, en la que el SDK se instala como un paquete independiente de la app y los APK de la app no incluyen ningún contenido de SDK.
  • Hay una o más variantes para dispositivos más antiguos, en las que los APKs del SDK se agregan al conjunto de APK de la app como divisiones adicionales de APK. Los APKs del SDK pertenecen al paquete de la app. En este caso, el entorno de ejecución del SDK se emula en el tiempo de ejecución de la app en el dispositivo.

Así como generas APKs para paquetes de aplicaciones sin dependencias de SDK, bundletool extract-apks y bundletool install-apks muestran un conjunto filtrado de APKs de la mejor variante para el dispositivo conectado o para la configuración del dispositivo proporcionada.

En casos de uso avanzados en los que solo te interesa generar divisiones de APK a partir de un archivo SDK para una app específica en dispositivos más antiguos, usa el comando bundletool build-sdk-apks-for-app de la siguiente manera:

bundletool build-sdk-apks-for-app --app-properties=app-properties.json \
    --sdk-archive=sdk.asar --output=sdk.apks

El archivo app-properties debe contener los campos descritos en el archivo runtime_enabled_sdk_config.proto. El archivo app-properties se verá de la siguiente manera:

{
  "package_name": "com.my.app",
  "version_code": 1234,
  "min_sdk_version": 21,
  "resources_package_id": 0x7e
}

El comando bundletool build-sdk-apks-for-app genera el subconjunto de APKs de la app que corresponde al contenido del SDK debajo del nombre del paquete de la app. Puedes combinar estos APKs con otros que contengan el contenido de la app. Por ejemplo, si las compilas por separado y de forma incremental y se instalan juntas en un dispositivo que no admite el entorno de ejecución de SDK.

Cómo compilar y probar un paquete de SDK (experimental)

Puedes usar bundletool a fin de compilar un ASB y probar la generación de los archivos necesarios para la instalación y la distribución.

Cómo compilar un paquete de SDK

Puedes compilar tu ASB desde la línea de comandos y firmarla con jarsigner.

Para compilar un paquete de SDK, sigue estos pasos:

  1. Genera el manifiesto y los recursos del paquete del SDK en formato proto, siguiendo los mismos pasos que para un paquete de aplicación.

  2. Empaqueta el código compilado y los recursos del SDK en un archivo ZIP base, como lo harías con un módulo de la app.

  3. Genera un archivo SdkModulesConfig.pb.json y un archivo SdkBundleConfig.pb.json que coincidan con el formato que se describe en la especificación del paquete del SDK de Android.

  4. Compila tu ASB con el comando bundletool build-sdk-bundle de la siguiente manera:

bundletool build-sdk-bundle --sdk-bundle-config=SdkBundleConfig.pb.json \
    --sdk-modules-config=SdkModulesConfig.pb.json \
    --modules=base.zip --output=sdk.asb

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

Tabla 3: Opciones para el comando bundletool build-sdk-bundle

Marca Descripción
--modules (Obligatorio) Es el archivo de módulo desde el que quieres compilar el ASB final.
--output (Obligatorio) Es la ruta de acceso en la que deseas que se compile el ASB.
--sdk-modules-config (Obligatorio) Es la ruta de acceso a un archivo JSON que describe la configuración de los módulos del SDK. Si quieres obtener información para dar formato al archivo JSON, consulta la especificación del paquete del SDK de Android.
--sdk-bundle-config Es la ruta de acceso a un archivo JSON que describe la configuración del paquete de SDK. Si quieres obtener información para dar formato al archivo JSON, consulta la especificación del paquete del SDK de Android.
--metadata-file Es el archivo en el que se incluyen los metadatos para el ASB. El formato del valor de la marca es <bundle-path>:<physical-file>, en el que <bundle-path> denota la ubicación del archivo dentro del directorio de metadatos del paquete de SDK y <physical-file> es un archivo existente que contiene los datos sin procesar que se almacenarán. La marca se puede repetir.
--overwrite Si se establece, esta opción reemplaza cualquier resultado existente.

Cómo generar APKs a partir de un paquete de SDK

Después de compilar tu ASB, puedes probar un paquete de SDK de forma local si generas sus APKs con el comando bundletool build-sdk-apks, como se muestra en el siguiente código:

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks

Cuando bundletool genera los APKs desde el paquete del SDK, la herramienta incluye los APKs en un contenedor llamado archivo de conjunto de APK, que usa la extensión de archivo .apks. bundletool genera un solo APK independiente del paquete del SDK que se orienta a todas las configuraciones del dispositivo.

Si quieres implementar el ASB en un dispositivo, también debes incluir la información de firma de tu app, como se muestra en el siguiente comando:

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks \
    --ks=keystore.jks \
    --ks-pass=file:/keystore.pwd \
    --ks-key-alias=KeyAlias \
    --key-pass=file:/key.pwd

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

Tabla 4: Opciones para el comando bundletool build-sdk-apks

Marca Descripción
--sdk-bundle (Obligatorio) Es la ruta de acceso al paquete de SDK. Debe tener la extensión .asb.
--output (Obligatorio) De forma predeterminada, es la ruta de acceso en la que deseas crear el archivo de conjunto de APK. De manera alternativa, si usas --output-format=DIRECTORY, esta es la ruta de acceso al directorio donde deseas que se almacenen los APKs generados.
--ks Es la ruta de acceso al almacén de claves que deseas usar para firmar los APKs generados.
--ks-key-alias Es el alias de la clave que se usará en el almacén de claves para firmar los APKs generados.
--key-pass

Es la contraseña de la clave del almacén de claves que se usará para firmar los APKs generados.

Si pasas la contraseña en texto sin formato, debes agregar el prefijo pass: al valor. Por ejemplo, pass:qwerty. Si la contraseña es la primera línea de un archivo, debes agregar el prefijo file: al valor. Por ejemplo, file:/tmp/myPassword.txt.

Si no se configura esta marca, se prueba la contraseña del almacén de claves. Si eso falla, la terminal de la línea de comandos te solicitará una contraseña.

--ks-pass

Es la contraseña del almacén de claves que se usará para firmar los APKs generados.

Si pasas la contraseña en texto sin formato, debes agregar el prefijo pass: al valor. Por ejemplo, pass:qwerty. Si la contraseña es la primera línea de un archivo, debes agregar el prefijo file: al valor. Por ejemplo, file:/tmp/myPassword.txt.

Si no se configura esta marca, la terminal de la línea de comandos te solicitará una contraseña.

--aapt2 Es la ruta de acceso al objeto binario AAPT2 que se usará.
--output-format El formato de salida de los APKs generados. De forma predeterminada, esta opción se establece en APK_SET, que genera los APKs en el archivo de conjunto de APK que se crea. Si se configura en DIRECTORY, da como resultado los APKs en el directorio que especifica --output.
--verbose Si se establece, esta opción imprime información adicional sobre la ejecución del comando en el resultado estándar.
--version-code Es el código de versión del SDK. Este es el código de versión que usa la plataforma de Android para instalar el APK, no la versión del SDK. Esta opción se puede establecer en un valor arbitrario. Si no se configura, se establece de forma predeterminada en 0.
--overwrite Si se establece, esta opción reemplaza cualquier resultado existente.

Cómo implementar, extraer y medir el tamaño de los APKs del SDK

Puedes seguir los mismos pasos que usan las apps para implementar APKs en un dispositivo conectado, extraer APKs específicos del dispositivo de un conjunto de APK existente y medir los tamaños de descarga estimados de los APKs en un conjunto de APK

Cómo generar un archivo SDK a partir de un paquete de SDK

Después de subir tu ASB a tu canal de distribución, por ejemplo, Google Play, el ASB se transforma en un archivo del SDK de Android (.asar) para su distribución a desarrolladores de apps desde Maven. Para obtener más detalles sobre el formato, consulta la sección sobre la especificación del formato de archivo de SDK.

Después de compilar tu ASB, puedes probar la generación de un archivo del SDK de Android de forma local con el comando bundletool build-sdk-asar, como se muestra en el siguiente código.

bundletool build-sdk-asar --sdk-bundle=sdk.asb --output=sdk.asar \
    --apk-signing-key-certificate=keycert.txt

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

Tabla 5: Opciones para el comando bundletool build-sdk-asar

Marca Descripción
--apk-signing-key-certificate (Obligatorio) Es la ruta de acceso al certificado de firma de APK del SDK. Este es el certificado correspondiente a la clave que usaste para firmar los APKs en el comando build-sdk-apks.
--output (Obligatorio) Es la ruta de acceso en la que deseas crear el archivo .asar.
--sdk-bundle (Obligatorio) Es la ruta de acceso al paquete de SDK. Debe tener la extensión .asb.
--overwrite Si se establece, esta opción reemplaza cualquier resultado existente.

Formatos de SDK habilitados para el entorno de ejecución (experimental)

Los SDK habilitados para el entorno de ejecución presentan dos formatos de archivo de Android:

  • El paquete del SDK de Android (.asb), que se usa para publicar el SDK habilitado para el entorno de ejecución en las tiendas de aplicaciones
  • El archivo del SDK de Android (.asar), que se usa para distribuir el SDK habilitado para el entorno de ejecución en Maven

Formato de paquete del SDK de Android

Un paquete de SDK es un formato de publicación para los SDK habilitados para el entorno de ejecución. Contiene todos los recursos y el código del SDK, incluido el código de las bibliotecas de las que depende. No incluye el código ni los recursos de otros SDK habilitados para el entorno de ejecución del que depende el SDK.

Un paquete del SDK de Android (ASB) es un archivo ZIP firmado con la extensión .asb. El código y los recursos del SDK se organizan de manera similar a lo que encontrarías en un APK. Un ASB también contiene varios archivos de configuración que ayudan a generar los APKs instalables.

Figura 1: El contenido de un paquete del SDK de Android

En la siguiente lista, se describen con más detalle algunos de los archivos ASB:

  • SdkBundleConfig.pb: Se trata de un archivo de configuración en formato .proto que contiene la lista de SDK habilitados para el entorno de ejecución de los que depende tu SDK. Para ver la definición completa, consulta el archivo sdk_bundle_config.proto.

  • modules.resm: Se trata de un archivo ZIP que contiene todos los datos necesarios para generar los APK desde el SDK.

  • SdkModulesConfig.pb: Se trata de un archivo de configuración en formato proto. Este archivo contiene el nombre del SDK, la versión y el nombre de clase del punto de entrada del SDK para el framework (SandboxedSdkProvider). Si quieres ver la definición completa, consulta el archivo sdk_modules_config.proto.

  • base/: Se trata del módulo único que contiene el código y los recursos del SDK.

    • manifest/: Se trata del manifiesto del SDK en formato proto.
    • dex/: Se trata del código compilado en formato DEX. Se pueden proporcionar varios archivos DEX.
    • res/, lib/, assets/: Estos directorios son idénticos a los de un APK típico. Las rutas de acceso de estos directorios se conservan cuando se generan los APK del SDK.
    • root/: Este directorio almacena archivos que luego se trasladan al directorio raíz de los APK del SDK. Por ejemplo, puede incluir recursos basados en Java que tu SDK carga con el método Class.getResource(). También se conservan las rutas de acceso dentro de este directorio.
    • BUNDLE-METADATA: Este directorio incluye archivos de metadatos que contienen información útil para herramientas o tiendas de aplicaciones. Estos archivos de metadatos pueden incluir asignaciones de ProGuard y la lista completa de los archivos DEX de tu SDK. Los archivos incluidos en este directorio no están empaquetados en los APK de tu SDK.

Formato de archivo del SDK de Android

Un archivo del SDK de Android es el formato de distribución de un SDK habilitado para el entorno de ejecución en Maven. Es un archivo ZIP con la extensión de archivo .asar. Contiene toda la información que necesitan las herramientas de compilación de apps para generar un Android App Bundle que depende del SDK habilitado para el entorno de ejecución.

Figura 2: El contenido de un paquete de archivos del SDK de Android

En la siguiente lista, se describen con más detalle algunos de los archivos del SDK de Android:

  • SdkMetadata.pb: Se trata de un archivo de configuración en formato proto que contiene el nombre del SDK, la versión y el resumen del certificado de la clave que se usó para firmar los APKs generados para este SDK. Para ver la definición completa, consulta el archivo sdk_metadata.proto.

  • modules.resm: Se trata de un archivo ZIP que contiene todos los datos necesarios para generar los APK desde el SDK. Es lo mismo que el archivo .resm en el paquete del SDK de Android.

  • AndroidManifest.xml: Se trata del archivo de manifiesto del SDK en formato XML de texto.

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.