Reglas de Android

Denuncia un problema Ver código fuente Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Reglas

android_binary

Ver la fuente de la regla
android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)

Produce archivos de paquete de aplicación para Android (.apk).

Objetivos de salida implícitos

  • name.apk: Es un archivo de paquete de aplicación para Android firmado con claves de depuración y alineado con ZIP. Se puede usar para desarrollar y depurar tu aplicación. No puedes lanzar tu aplicación si está firmada con las claves de depuración.
  • name_unsigned.apk: Una versión sin firmar del archivo anterior que se podría firmar con las claves de lanzamiento antes de publicarlo para el público.
  • name_deploy.jar: Es un archivo Java que contiene el cierre transitivo de este destino.

    El archivo JAR de implementación contiene todas las clases que encontraría un cargador de clases que buscó la ruta de acceso de tiempo de ejecución de este destino de principio a fin.

  • name_proguard.jar: Es un archivo Java que contiene el resultado de ejecutar ProGuard en el name_deploy.jar. Este resultado solo se produce si se especifica el atributo proguard_specs.
  • name_proguard.map: Es el resultado de un archivo de asignación de la ejecución de ProGuard en name_deploy.jar. Este resultado solo se produce si se especifica el atributo proguard_specs y se establece proguard_generate_mapping o shrink_resources.

Ejemplos

Puedes encontrar ejemplos de reglas de Android en el directorio examples/android del árbol de fuentes de Bazel.

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de otras bibliotecas que se vincularán al destino binario. Los tipos de bibliotecas permitidos son: android_library, java_library con restricción android y cc_library que une o produce bibliotecas nativas .so para la plataforma de destino de Android.
srcs

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos de origen que se procesan para crear el destino.

Se compilan los archivos srcs de tipo .java. Para facilitar la lectura, no es conveniente colocar el nombre de un archivo fuente .java generado en el srcs. En su lugar, coloca el nombre de la regla de la que dependes en srcs, como se describe a continuación.

Los archivos srcs de tipo .srcjar se descomprimen y compilan. (Esto es útil si necesitas generar un conjunto de archivos .java con una genrule o una extensión de compilación).

assets

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de recursos que se empaquetarán. Por lo general, es un glob de todos los archivos del directorio assets. También puedes hacer referencia a otras reglas (cualquier regla que genere archivos) o archivos exportados en los otros paquetes, siempre que todos esos archivos estén en el directorio assets_dir del paquete correspondiente.
assets_dir

Cadena; el valor predeterminado es ""

Es la cadena que proporciona la ruta de acceso a los archivos en assets. El par assets y assets_dir describe los recursos empaquetados, y se deben proporcionar ambos atributos o ninguno.
crunch_png

Es un valor booleano; el valor predeterminado es True.

Hacer o no compresión de PNG Esto es independiente del procesamiento de nueve parches, que siempre se realiza. Esta es una solución alternativa obsoleta para un error de aapt que se corrigió en aapt2.
custom_package

Cadena; el valor predeterminado es ""

Es el paquete Java para el que se generarán los códigos fuente Java. De forma predeterminada, el paquete se infiere del directorio en el que se encuentra el archivo BUILD que contiene la regla. Puedes especificar un paquete diferente, pero no se recomienda, ya que puede generar conflictos de classpath con otras bibliotecas que solo se detectarán en el tiempo de ejecución.
debug_key

Etiqueta (Label); el valor predeterminado es "@bazel_tools//tools/android:debug_keystore"

Es el archivo que contiene el almacén de claves de depuración que se usará para firmar el APK de depuración. Por lo general, no quieres usar una clave que no sea la predeterminada, por lo que se debe omitir este atributo.

ADVERTENCIA: No uses tus claves de producción, ya que deben protegerse de forma estricta y no deben mantenerse en el árbol de origen.

debug_signing_keys

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos y almacenes de claves de depuración que se usarán para firmar el APK de depuración. Por lo general, no es conveniente usar claves que no sean la predeterminada, por lo que se debe omitir este atributo.

ADVERTENCIA: No uses tus claves de producción, ya que deben protegerse de forma estricta y no deben mantenerse en el árbol de origen.

debug_signing_lineage_file

Etiqueta (Label); el valor predeterminado es None

Es un archivo que contiene el linaje de firma de debug_signing_keys. Por lo general, no es conveniente usar claves que no sean la predeterminada, por lo que se debe omitir este atributo.

ADVERTENCIA: No uses tus claves de producción, ya que deben protegerse de forma estricta y no deben mantenerse en el árbol de origen.

densities

Es una lista de cadenas. El valor predeterminado es [].

Densidades para filtrar cuando se compila el APK. Esto quitará los recursos de elementos gráficos rasterizados que un dispositivo con las densidades de pantalla especificadas no cargaría para reducir el tamaño del APK. También se agregará al manifiesto una sección de pantallas compatibles correspondiente si aún no contiene una lista de superconjuntos.
dex_shards

Número entero (el valor predeterminado es 1)

Es la cantidad de fragmentos en los que se debe descomponer la indexación. Esto hace que la conversión sea mucho más rápida a costa del tiempo de instalación y de inicio de la app. Cuanto más grande sea el objeto binario, más fragmentos se deben usar. 25 es un buen valor para comenzar a experimentar.

Ten en cuenta que cada fragmento generará al menos un archivo dex en la app final. Por este motivo, no se recomienda establecer este valor en más de 1 para los objetos binarios de lanzamiento.

dexopts

Es una lista de cadenas. El valor predeterminado es [].

Marcas de línea de comandos adicionales para la herramienta dx cuando se genera classes.dex. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.
enable_data_binding

Es un valor booleano; el valor predeterminado es False.

Si es verdadero, esta regla procesa las expresiones de vinculación de datos en los recursos de diseño incluidos a través del atributo resource_files. Sin esta configuración, las expresiones de vinculación de datos producen fallas de compilación.

Para compilar una app para Android con vinculación de datos, también debes hacer lo siguiente:

  1. Establece este atributo para todas las reglas de Android que dependan de forma transitiva de esta. Esto se debe a que los elementos dependientes heredan las expresiones de vinculación de datos de la regla a través de la combinación de recursos. Por lo tanto, también deben compilar con vinculación de datos para analizar esas expresiones.
  2. Agrega una entrada deps = para la biblioteca del entorno de ejecución de vinculación de datos a todos los destinos que establezcan este atributo. La ubicación de esta biblioteca depende de la configuración de tu depósito.
incremental_dexing

Número entero; no configurable; el valor predeterminado es -1

Fuerza que el destino se compile con o sin dexing incremental, anulando los valores predeterminados y la marca --incremental_dexing.
instruments

Etiqueta (Label); el valor predeterminado es None

El objetivo android_binary que se instrumentará.

Si se configura este atributo, este android_binary se tratará como una aplicación de prueba para las pruebas de instrumentación. Luego, un objetivo android_instrumentation_test puede especificar este objetivo en su atributo test_app.

javacopts

Es una lista de cadenas. El valor predeterminado es [].

Son opciones adicionales del compilador para este destino. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.

Estas opciones del compilador se pasan a javac después de las opciones globales del compilador.

key_rotation_min_sdk

Cadena; el valor predeterminado es ""

Establece la versión mínima de la plataforma de Android (nivel de API) para la que se debe usar la clave de firma rotada de un APK para producir su firma. La clave de firma original del APK se usará en todas las versiones anteriores de la plataforma.
main_dex_list

Etiqueta (Label); el valor predeterminado es None

Un archivo de texto contiene una lista de nombres de archivos de clase. Las clases definidas por esos archivos de clase se colocan en el archivo classes.dex principal. p.ej.:
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    
Se debe usar con multidex="manual_main_dex".
main_dex_list_opts

Es una lista de cadenas. El valor predeterminado es [].

Son opciones de línea de comandos para pasar al compilador principal de listas de dex. Usa esta opción para afectar las clases incluidas en la lista de dex principal.
main_dex_proguard_specs

Es una lista de etiquetas. El valor predeterminado es [].

Son archivos que se usarán como especificaciones de Proguard para determinar las clases que se deben conservar en el archivo dex principal. Solo se permite si el atributo multidex está configurado como legacy.
manifest

Etiqueta (Label): Obligatorio

Es el nombre del archivo de manifiesto de Android, que suele ser AndroidManifest.xml. Se debe definir si se definen resource_files o recursos.
manifest_values

Diccionario: Cadena -> Cadena; el valor predeterminado es {}

Es un diccionario de valores que se anularán en el manifiesto.

Cualquier instancia de ${name} en el manifiesto se reemplazará por el valor correspondiente al nombre en este diccionario.

applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion y maxSdkVersion también anularán los atributos correspondientes en el manifiesto y las etiquetas uses-sdk.

Se ignorará packageName y se establecerá desde applicationId si se especifica o desde el paquete en el manifiesto.

Cuando manifest_merger se establece como legacy, solo applicationId, versionCode y versionName tendrán efecto.

multidex

Cadena; el valor predeterminado es "native"

Indica si se debe dividir el código en varios archivos dex.
Valores posibles:
  • native: Divide el código en varios archivos DEX cuando se supera el límite de índice de 64K de DEX. Supone compatibilidad con la plataforma nativa para cargar clases de multidex en el tiempo de ejecución. Solo funciona con Android L y versiones posteriores.
  • legacy: Divide el código en varios archivos DEX cuando se supera el límite de índice de 64K de DEX. Supone que las clases de multidex se cargan a través del código de la aplicación (es decir, no es compatible con la plataforma nativa).
  • manual_main_dex: Divide el código en varios archivos DEX cuando se supera el límite de índice de 64K de DEX. Para especificar el contenido del archivo DEX principal, debes proporcionar una lista de clases en un archivo de texto con el atributo main_dex_list.
  • off: Compila todo el código en un solo archivo dex, incluso si supera el límite de índice.
nocompress_extensions

Es una lista de cadenas. El valor predeterminado es [].

Es una lista de extensiones de archivos que no se deben comprimir en el APK.
package_id

Número entero (el valor predeterminado es 0)

Es el ID del paquete que se asignará a los recursos de este objeto binario.

Consulta el argumento --package-id de AAPT2 para obtener más información. Por lo general, se puede (y se debe) dejar sin definir, lo que genera el valor predeterminado de 127 (0x7F).

plugins

Es una lista de etiquetas. El valor predeterminado es [].

Complementos del compilador de Java para ejecutarse en el tiempo de compilación. Cada java_plugin especificado en el atributo plugins se ejecutará cada vez que se compile este destino. Los recursos que genera el plugin se incluirán en el jar de resultados del destino.
proguard_apply_dictionary

Etiqueta (Label); el valor predeterminado es None

Es un archivo que se usará como asignación para Proguard. Es un archivo de "palabras" separadas por líneas de las que se puede extraer información cuando se cambia el nombre de las clases y los miembros durante la ofuscación.
proguard_apply_mapping

Etiqueta (Label); el valor predeterminado es None

Es un archivo que se usará como asignación para Proguard. Es un archivo de asignación que genera proguard_generate_mapping para que se vuelva a usar y aplicar la misma asignación a una compilación nueva.
proguard_generate_mapping

Booleano; no configurable; el valor predeterminado es False

Indica si se debe generar el archivo de asignación de Proguard. El archivo de asignación se generará solo si se especifica proguard_specs. En este archivo, se mostrará la asignación entre los nombres de clase, método y campo originales y ofuscados.

ADVERTENCIA: Si se usa este atributo, la especificación de Proguard no debe contener -dontobfuscate ni -printmapping.

proguard_specs

Es una lista de etiquetas. El valor predeterminado es [].

Archivos que se usarán como especificación de Proguard. En este archivo, se describirá el conjunto de especificaciones que usará Proguard.
resource_configuration_filters

Es una lista de cadenas. El valor predeterminado es [].

Es una lista de filtros de configuración de recursos, como "en", que limitará los recursos del APK solo a los de la configuración "en". Para habilitar la pseudolocalización, incluye las pseudoconfiguraciones regionales en_XA o ar_XB.
resource_files

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de recursos que se empaquetarán. Por lo general, es un glob de todos los archivos del directorio res.
Aquí también se puede hacer referencia a los archivos generados (de genrules) con Label. La única restricción es que los resultados generados deben estar en el mismo directorio "res" que cualquier otro archivo de recursos que se incluya.
shrink_resources

Número entero (el valor predeterminado es -1)

Indica si se debe realizar la reducción de recursos. Los recursos que no use el objeto binario se quitarán del APK. Esto solo es compatible con las reglas que usan recursos locales (es decir, los atributos manifest y resource_files) y requiere ProGuard. Funciona de la misma manera que el reductor de recursos de Gradle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

Diferencias destacadas:

  • Se quitarán los recursos de values/, así como los recursos basados en archivos.
  • usa strict mode de forma predeterminada.
  • La eliminación de recursos de ID que no se usan solo es compatible con aapt2.
Si se habilita la reducción de recursos, también se generará name_files/resource_shrinker.log, que detallará el análisis y las eliminaciones realizadas.

Valores posibles:

  • shrink_resources = 1: Activa la reducción de recursos de Android.
  • shrink_resources = 0: Desactiva la reducción de recursos de Android.
  • shrink_resources = -1: La reducción se controla con la marca --android_resource_shrinking.

aar_import

Ver la fuente de la regla
aar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)

Esta regla permite el uso de archivos .aar como bibliotecas para las reglas android_library y android_binary.

Ejemplos

    aar_import(
        name = "google-vr-sdk",
        aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar",
    )

    android_binary(
        name = "app",
        manifest = "AndroidManifest.xml",
        srcs = glob(["**.java"]),
        deps = [":google-vr-sdk"],
    )

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

aar

Etiqueta (Label): Obligatorio

Es el archivo .aar que se proporciona a los destinos de Android que dependen de este destino.
exports

Es una lista de etiquetas. El valor predeterminado es [].

Son los destinos que se exportarán a las reglas que dependen de esta regla. Consulta java_library.exports.
srcjar

Etiqueta (Label); el valor predeterminado es None

Un archivo JAR que contiene código fuente para los archivos JAR compilados en el AAR.

android_library

Ver la fuente de la regla
android_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)

Esta regla compila y archiva sus fuentes en un archivo .jar. La biblioteca del entorno de ejecución de Android android.jar se coloca de forma implícita en la ruta de clase de compilación.

Objetivos de salida implícitos

  • libname.jar: Un archivo Java.
  • libname-src.jar: Es un archivo que contiene las fuentes ("jar de origen").
  • name.aar: Un paquete "aar" de Android que contiene el archivo Java y los recursos de este destino. No contiene la clausura transitiva.

Ejemplos

Puedes encontrar ejemplos de reglas de Android en el directorio examples/android del árbol de fuentes de Bazel.

En el siguiente ejemplo, se muestra cómo configurar idl_import_root. Permite que //java/bazel/helloandroid/BUILD contenga lo siguiente:

android_library(
    name = "parcelable",
    srcs = ["MyParcelable.java"], # bazel.helloandroid.MyParcelable

    # MyParcelable.aidl will be used as import for other .aidl
    # files that depend on it, but will not be compiled.
    idl_parcelables = ["MyParcelable.aidl"] # bazel.helloandroid.MyParcelable

    # We don't need to specify idl_import_root since the aidl file
    # which declares bazel.helloandroid.MyParcelable
    # is present at java/bazel/helloandroid/MyParcelable.aidl
    # underneath a java root (java/).
)

android_library(
    name = "foreign_parcelable",
    srcs = ["src/android/helloandroid/OtherParcelable.java"], # android.helloandroid.OtherParcelable
    idl_parcelables = [
        "src/android/helloandroid/OtherParcelable.aidl" # android.helloandroid.OtherParcelable
    ],

    # We need to specify idl_import_root because the aidl file which
    # declares android.helloandroid.OtherParcelable is not positioned
    # at android/helloandroid/OtherParcelable.aidl under a normal java root.
    # Setting idl_import_root to "src" in //java/bazel/helloandroid
    # adds java/bazel/helloandroid/src to the list of roots
    # the aidl compiler will search for imported types.
    idl_import_root = "src",
)

# Here, OtherInterface.aidl has an "import android.helloandroid.CallbackInterface;" statement.
android_library(
    name = "foreign_interface",
    idl_srcs = [
        "src/android/helloandroid/OtherInterface.aidl" # android.helloandroid.OtherInterface
        "src/android/helloandroid/CallbackInterface.aidl" # android.helloandroid.CallbackInterface
    ],

    # As above, idl_srcs which are not correctly positioned under a java root
    # must have idl_import_root set. Otherwise, OtherInterface (or any other
    # interface in a library which depends on this one) will not be able
    # to find CallbackInterface when it is imported.
    idl_import_root = "src",
)

# MyParcelable.aidl is imported by MyInterface.aidl, so the generated
# MyInterface.java requires MyParcelable.class at compile time.
# Depending on :parcelable ensures that aidl compilation of MyInterface.aidl
# specifies the correct import roots and can access MyParcelable.aidl, and
# makes MyParcelable.class available to Java compilation of MyInterface.java
# as usual.
android_library(
    name = "idl",
    idl_srcs = ["MyInterface.aidl"],
    deps = [":parcelable"],
)

# Here, ServiceParcelable uses and thus depends on ParcelableService,
# when it's compiled, but ParcelableService also uses ServiceParcelable,
# which creates a circular dependency.
# As a result, these files must be compiled together, in the same android_library.
android_library(
    name = "circular_dependencies",
    srcs = ["ServiceParcelable.java"],
    idl_srcs = ["ParcelableService.aidl"],
    idl_parcelables = ["ServiceParcelable.aidl"],
)

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de otras bibliotecas con las que se debe vincular. Los tipos de bibliotecas permitidos son: android_library, java_library con restricción android y cc_library que une o produce bibliotecas nativas .so para la plataforma de destino de Android.
srcs

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos .java o .srcjar que se procesan para crear el destino.

Se compilan los archivos srcs de tipo .java. Para facilitar la lectura, no es conveniente colocar el nombre de un archivo fuente .java generado en srcs. En su lugar, coloca el nombre de la regla de la que dependes en srcs, como se describe a continuación.

Los archivos srcs de tipo .srcjar se descomprimen y compilan. (Esto es útil si necesitas generar un conjunto de archivos .java con una genrule o una extensión de compilación).

Si se omite srcs, cualquier dependencia especificada en deps se exporta desde esta regla (consulta Exportaciones de java_library para obtener más información sobre cómo exportar dependencias). Sin embargo, este comportamiento dejará de estar disponible pronto, así que no te bases en él.

assets

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de recursos que se empaquetarán. Por lo general, es un glob de todos los archivos del directorio assets. También puedes hacer referencia a otras reglas (cualquier regla que genere archivos) o archivos exportados en los otros paquetes, siempre que todos esos archivos estén en el directorio assets_dir del paquete correspondiente.
assets_dir

Cadena; el valor predeterminado es ""

Es la cadena que proporciona la ruta de acceso a los archivos en assets. El par assets y assets_dir describe los recursos empaquetados, y se deben proporcionar ambos atributos o ninguno.
custom_package

Cadena; el valor predeterminado es ""

Es el paquete Java para el que se generarán los códigos fuente Java. De forma predeterminada, el paquete se infiere del directorio en el que se encuentra el archivo BUILD que contiene la regla. Puedes especificar un paquete diferente, pero no se recomienda, ya que puede generar conflictos de classpath con otras bibliotecas que solo se detectarán en el tiempo de ejecución.
enable_data_binding

Es un valor booleano; el valor predeterminado es False.

Si es verdadero, esta regla procesa las expresiones de vinculación de datos en los recursos de diseño incluidos a través del atributo resource_files. Sin esta configuración, las expresiones de vinculación de datos producen fallas de compilación.

Para compilar una app para Android con vinculación de datos, también debes hacer lo siguiente:

  1. Establece este atributo para todas las reglas de Android que dependan de forma transitiva de esta. Esto se debe a que los elementos dependientes heredan las expresiones de vinculación de datos de la regla a través de la combinación de recursos. Por lo tanto, también deben compilar con vinculación de datos para analizar esas expresiones.
  2. Agrega una entrada deps = para la biblioteca del entorno de ejecución de vinculación de datos a todos los destinos que establezcan este atributo. La ubicación de esta biblioteca depende de la configuración de tu depósito.
exported_plugins

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de java_plugin (p.ej., procesadores de anotación) que se exportarán a bibliotecas que dependen directamente de esta biblioteca.

La lista especificada de java_plugin se aplicará a cualquier biblioteca que dependa directamente de esta, del mismo modo que si esa biblioteca hubiera declarado explícitamente estas etiquetas en plugins.

exports

Es una lista de etiquetas. El valor predeterminado es [].

El cierre de todas las reglas que se alcanzan a través de los atributos exports se consideran dependencias directas de cualquier regla que dependa directamente del objetivo con exports.

Los exports no son dependencias directas de la regla a la que pertenecen.

exports_manifest

Número entero (el valor predeterminado es 1)

Indica si se deben exportar entradas de manifiesto a destinos android_binary que dependen de este destino. Los atributos uses-permissions nunca se exportan.
idl_import_root

Cadena; el valor predeterminado es ""

Es la ruta de acceso relativa al paquete a la raíz del árbol de paquetes de Java que contiene las fuentes de idl incluidas en esta biblioteca.

Esta ruta de acceso se usará como raíz de importación cuando se procesen fuentes de idl que dependen de esta biblioteca.

Cuando se especifica idl_import_root, idl_parcelables y idl_srcs deben estar en la ruta de acceso especificada por el paquete de Java del objeto que representan en idl_import_root. Cuando no se especifica idl_import_root, idl_parcelables y idl_srcs deben estar en la ruta de acceso que especifica su paquete en una raíz de Java.

Consulta los ejemplos.

idl_parcelables

Es una lista de etiquetas. El valor predeterminado es [].

Es una lista de definiciones de IDL de Android que se deben proporcionar como importaciones. Estos archivos estarán disponibles como importaciones para cualquier objetivo android_library que dependa de esta biblioteca, ya sea directamente o a través de su cierre transitivo, pero no se traducirán a Java ni se compilarán.

Solo se deben incluir los archivos .aidl que correspondan directamente a las fuentes .java en esta biblioteca (p. ej., implementaciones personalizadas de Parcelable). De lo contrario, se debe usar idl_srcs.

Estos archivos deben colocarse de manera adecuada para que el compilador de aidl los encuentre. Consulta la descripción de idl_import_root para obtener información sobre lo que significa.

idl_preprocessed

Es una lista de etiquetas. El valor predeterminado es [].

Es una lista de definiciones de IDL de Android procesadas previamente para proporcionar como importaciones. Estos archivos estarán disponibles como importaciones para cualquier objetivo android_library que dependa de esta biblioteca, ya sea directamente o a través de su cierre transitivo, pero no se traducirán a Java ni se compilarán.

Solo se deben incluir archivos .aidl procesados previamente que correspondan directamente a fuentes .java en esta biblioteca (p. ej., implementaciones personalizadas de Parcelable). De lo contrario, usa idl_srcs para las definiciones de IDL de Android que se deben traducir a interfaces de Java y usa idl_parcelable para los archivos AIDL no procesados previamente.

idl_srcs

Es una lista de etiquetas. El valor predeterminado es [].

Es una lista de definiciones de IDL de Android para traducir a interfaces de Java. Después de que se generen las interfaces de Java, se compilarán junto con el contenido de srcs.

Estos archivos estarán disponibles como importaciones para cualquier objetivo android_library que dependa de esta biblioteca, ya sea directamente o a través de su cierre transitivo.

Estos archivos deben colocarse de manera adecuada para que el compilador de aidl los encuentre. Consulta la descripción de idl_import_root para obtener información sobre lo que significa.

javacopts

Es una lista de cadenas. El valor predeterminado es [].

Son opciones adicionales del compilador para este destino. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.

Estas opciones del compilador se pasan a javac después de las opciones globales del compilador.

manifest

Etiqueta (Label); el valor predeterminado es None

Es el nombre del archivo de manifiesto de Android, que suele ser AndroidManifest.xml. Se debe definir si se definen resource_files o recursos.

Es un valor booleano; el valor predeterminado es False.

Usa esta biblioteca solo para la compilación y no en el tiempo de ejecución. Los resultados de una regla marcada como neverlink no se usarán en la creación de .apk. Resulta útil si el entorno de ejecución proporcionará la biblioteca durante la ejecución.
plugins

Es una lista de etiquetas. El valor predeterminado es [].

Complementos del compilador de Java para ejecutarse en el tiempo de compilación. Cada java_plugin especificado en el atributo plugins se ejecutará cada vez que se compile este destino. Los recursos que genera el plugin se incluirán en el jar de resultados del destino.
proguard_specs

Es una lista de etiquetas. El valor predeterminado es [].

Archivos que se usarán como especificación de Proguard. Estos describirán el conjunto de especificaciones que usará Proguard. Si se especifican, se agregarán a cualquier destino android_binary que dependa de esta biblioteca. Los archivos incluidos aquí solo deben tener reglas idempotentes, como -dontnote, -dontwarn, assumenosideeffects y reglas que comienzan con -keep. Otras opciones solo pueden aparecer en proguard_specs de android_binary para garantizar que las combinaciones no sean tautológicas.
resource_files

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de recursos que se empaquetarán. Por lo general, es un glob de todos los archivos del directorio res.
Aquí también se puede hacer referencia a los archivos generados (de genrules) con Label. La única restricción es que los resultados generados deben estar en el mismo directorio "res" que cualquier otro archivo de recursos que se incluya.

android_instrumentation_test

Ver la fuente de la regla
android_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)

Una regla android_instrumentation_test ejecuta pruebas de instrumentación de Android. Iniciará un emulador, instalará la aplicación que se está probando, la aplicación de prueba y cualquier otra aplicación necesaria, y ejecutará las pruebas definidas en el paquete de prueba.

El atributo test_app especifica el android_binary que contiene la prueba. A su vez, este android_binary especifica la aplicación android_binary en prueba a través de su atributo instruments.

Ejemplo

# java/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_lib",
    srcs = ["Lib.java"],
    manifest = "LibraryManifest.xml",
    resource_files = glob(["res/**"]),
)

# The app under test
android_binary(
    name = "hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_lib"],
)
# javatests/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_test_lib",
    srcs = ["Tests.java"],
    deps = [
      "//java/com/samples/hello_world:hello_world_lib",
      ...  # test dependencies such as Espresso and Mockito
    ],
)

# The test app
android_binary(
    name = "hello_world_test_app",
    instruments = "//java/com/samples/hello_world:hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_test_lib"],
)

android_instrumentation_test(
    name = "hello_world_uiinstrumentation_tests",
    target_device = ":some_target_device",
    test_app = ":hello_world_test_app",
)

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

support_apks

Es una lista de etiquetas. El valor predeterminado es [].

Son otros APKs que se deben instalar en el dispositivo antes de que comience la prueba de instrumentación.
target_device

Etiqueta (Label): Obligatorio

El android_device en el que se debe ejecutar la prueba.

Para ejecutar la prueba en un emulador que ya se está ejecutando o en un dispositivo físico, usa estos argumentos: --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

test_app

Etiqueta (Label): Obligatorio

El objetivo android_binary que contiene las clases de prueba El objetivo android_binary debe especificar qué objetivo está probando a través de su atributo instruments.

android_local_test

Ver la fuente de la regla
android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)

Esta regla es para realizar pruebas de unidades de reglas android_library de forma local (en lugar de en un dispositivo). Funciona con el framework de pruebas de Robolectric de Android. Consulta el sitio de Android Robolectric para obtener detalles sobre cómo escribir pruebas de Robolectric.

Objetivos de salida implícitos

  • name.jar: Es un archivo Java de la prueba.
  • name-src.jar: Es un archivo que contiene las fuentes ("archivo JAR de origen").
  • name_deploy.jar: Es un archivo de implementación de Java adecuado para la implementación (solo se compila si se solicita de forma explícita).

Ejemplos

Para usar Robolectric con android_local_test, agrega el repositorio de Robolectric a tu archivo WORKSPACE:

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-bazel-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
Esto extrae las reglas de maven_jar necesarias para Robolectric. Luego, cada regla android_local_test debe depender de @robolectric//bazel:robolectric. Consulta el siguiente ejemplo.

android_local_test(
    name = "SampleTest",
    srcs = [
        "SampleTest.java",
    ],
    manifest = "LibManifest.xml",
    deps = [
        ":sample_test_lib",
        "@robolectric//bazel:android-all",
    ],
)

android_library(
    name = "sample_test_lib",
    srcs = [
         "Lib.java",
    ],
    resource_files = glob(["res/**"]),
    manifest = "AndroidManifest.xml",
)

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

deps

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de bibliotecas que se probarán, así como las bibliotecas adicionales que se vincularán al destino. Todos los recursos, elementos y archivos de manifiesto declarados en las reglas de Android en el cierre transitivo de este atributo están disponibles en la prueba.

La lista de reglas permitidas en deps son android_library, aar_import, java_import, java_library y java_lite_proto_library.

srcs

Es una lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos de origen que se procesan para crear el destino. Obligatorio, excepto en el caso especial que se describe a continuación.

Se compilan los archivos srcs de tipo .java. Para facilitar la lectura, no es conveniente colocar el nombre de un archivo fuente .java generado en srcs. En su lugar, coloca el nombre de la regla de la que dependes en srcs, como se describe a continuación.

Los archivos srcs de tipo .srcjar se descomprimen y compilan. (Esto es útil si necesitas generar un conjunto de archivos .java con una genrule o una extensión de compilación).

Se ignorarán todos los demás archivos, siempre que haya al menos un archivo del tipo de archivo descrito anteriormente. De lo contrario, se genera un error.

El atributo srcs es obligatorio y no puede estar vacío, a menos que se especifique runtime_deps.

custom_package

Cadena; el valor predeterminado es ""

Es el paquete Java en el que se generará la clase R. De forma predeterminada, el paquete se infiere del directorio en el que se encuentra el archivo BUILD que contiene la regla. Si usas este atributo, es probable que también debas usar test_class.
densities

Es una lista de cadenas. El valor predeterminado es [].

Densidades para filtrar cuando se compila el APK. También se agregará al manifiesto una sección de pantallas compatibles correspondiente si aún no contiene un StarlarkListing superconjunto.
enable_data_binding

Es un valor booleano; el valor predeterminado es False.

Si es verdadero, esta regla procesa las referencias de vinculación de datos que se usan en las dependencias habilitadas para la vinculación de datos que usa esta prueba. Sin este parámetro de configuración, las dependencias de vinculación de datos no tendrán la generación de código a nivel de binario necesaria y pueden producir fallas de compilación.
javacopts

Es una lista de cadenas. El valor predeterminado es [].

Son opciones adicionales del compilador para esta biblioteca. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.

Estas opciones del compilador se pasan a javac después de las opciones globales del compilador.

jvm_flags

Es una lista de cadenas. El valor predeterminado es [].

Es una lista de marcas que se incorporarán en la secuencia de comandos del wrapper generada para ejecutar este objeto binario. Sujeto a la sustitución de $(location) y "Make variable", y tokenización de Bourne shell.

La secuencia de comandos del wrapper para un objeto binario de Java incluye una definición de CLASSPATH (para encontrar todos los archivos JAR dependientes) y llama al intérprete de Java correcto. La línea de comandos que genera la secuencia de comandos del wrapper incluye el nombre de la clase principal seguido de un "$@" para que puedas pasar otros argumentos después del nombre de la clase. Sin embargo, los argumentos que la JVM debe analizar deben especificarse antes del nombre de la clase en la línea de comandos. El contenido de jvm_flags se agrega a la secuencia de comandos del wrapper antes de que se muestre el nombre de la clase.

Ten en cuenta que este atributo no tiene efecto en los resultados de *_deploy.jar.

manifest

Etiqueta (Label); el valor predeterminado es None

Es el nombre del archivo de manifiesto de Android, que suele ser AndroidManifest.xml. Se debe definir si se definen resource_files o recursos, o si alguno de los manifiestos de las bibliotecas en prueba tiene una etiqueta minSdkVersion.
manifest_values

Diccionario: Cadena -> Cadena; el valor predeterminado es {}

Es un diccionario de valores que se anularán en el manifiesto. Cualquier instancia de ${name} en el manifiesto se reemplazará por el valor correspondiente a name en este diccionario. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion y maxSdkVersion también anularán los atributos correspondientes del manifiesto y las etiquetas uses-sdk. Se ignorará packageName y se establecerá desde applicationId si se especifica o desde el paquete en el manifiesto. No es necesario tener un manifiesto en la regla para usar manifest_values.
nocompress_extensions

Es una lista de cadenas. El valor predeterminado es [].

Es una lista de extensiones de archivo que no se deben descomprimir en el APK de recursos.
plugins

Es una lista de etiquetas. El valor predeterminado es [].

Complementos del compilador de Java para ejecutarse en el tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genera el complemento se incluirán en el archivo JAR resultante de esta regla.
resource_configuration_filters

Es una lista de cadenas. El valor predeterminado es [].

Es una lista de filtros de configuración de recursos, como "en", que limitará los recursos del APK solo a los de la configuración "en".
resource_jars

Es una lista de etiquetas. El valor predeterminado es [].

Obsoleto: Usa java_import y deps o runtime_deps en su lugar.
resource_strip_prefix

Cadena; el valor predeterminado es ""

Es el prefijo de ruta que se quitará de los recursos de Java.

Si se especifica, este prefijo de ruta se quita de todos los archivos del atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (el valor predeterminado), la ruta de acceso del archivo de recursos se determina según la misma lógica que el paquete Java de los archivos fuente. Por ejemplo, un archivo de origen en stuff/java/foo/bar/a.txt se ubicará en foo/bar/a.txt.

runtime_deps

Es una lista de etiquetas. El valor predeterminado es [].

Son bibliotecas que se ponen a disposición del objeto binario final o solo para pruebas en el tiempo de ejecución. Al igual que los deps normales, aparecerán en la ruta de clase de tiempo de ejecución, pero, a diferencia de ellos, no en la ruta de clase de tiempo de compilación. Las dependencias que solo se necesitan en el tiempo de ejecución deben enumerarse aquí. Las herramientas de análisis de dependencias deben ignorar los destinos que aparecen en runtime_deps y deps.
stamp

Número entero (el valor predeterminado es 0)

Indica si se debe codificar la información de compilación en el objeto binario. Valores posibles:
  • stamp = 1: Siempre marca la información de la compilación en el binario, incluso en las compilaciones de --nostamp. Se debe evitar este parámetro de configuración, ya que puede finalizar la caché remota del binario y cualquier acción descendente que dependa de ella.
  • stamp = 0: Siempre reemplaza la información de compilación por valores constantes. Esto proporciona una buena almacenamiento en caché de resultados de compilación.
  • stamp = -1: La incorporación de información de compilación está controlada por la marca --[no]stamp.

Los objetos binarios estampados no se vuelven a compilar, a menos que cambien sus dependencias.

test_class

Cadena; el valor predeterminado es ""

Es la clase de Java que cargará el ejecutor de pruebas.

Este atributo especifica el nombre de una clase Java que ejecutará esta prueba. Es raro que debas configurarlo. Si se omite este argumento, se usará la clase de Java cuyo nombre corresponde al name de esta regla android_local_test. La clase de prueba debe anotarse con org.junit.runner.RunWith.

use_launcher

Es un valor booleano; el valor predeterminado es True.

Indica si el objeto binario debe usar un selector personalizado.

Si este atributo se establece como falso, se ignorarán el atributo launcher y la marca --java_launcher relacionada para este destino.

android_device

Ver la fuente de la regla
android_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)

Esta regla crea un emulador de Android configurado con las especificaciones proporcionadas. Este emulador se puede iniciar con un comando bazel run o ejecutando directamente la secuencia de comandos generada. Te recomendamos que dependas de las reglas de android_device existentes en lugar de definir las tuyas propias.

Esta regla es un destino adecuado para la marca --run_under para la prueba de Bazel y la ejecución de Blaze. Inicia un emulador, copia el destino que se prueba o ejecuta en el emulador y lo prueba o ejecuta según corresponda.

android_device admite la creación de imágenes de KVM si la system_image subyacente se basa en X86 y está optimizada para, como máximo, la arquitectura de CPU I686. Para usar KVM, agrega tags = ['requires-kvm'] a la regla android_device.

Objetivos de salida implícitos

  • name_images/userdata.dat: Contiene archivos de imagen y instantáneas para iniciar el emulador.
  • name_images/emulator-meta-data.pb: Contiene información serializada necesaria para pasarla al emulador y reiniciarlo.

Ejemplos

En el siguiente ejemplo, se muestra cómo usar android_device. //java/android/helloandroid/BUILD contiene

android_device(
    name = "nexus_s",
    cache = 32,
    default_properties = "nexus_s.properties",
    horizontal_resolution = 480,
    ram = 512,
    screen_density = 233,
    system_image = ":emulator_images_android_16_x86",
    vertical_resolution = 800,
    vm_heap = 32,
)

filegroup(
    name = "emulator_images_android_16_x86",
    srcs = glob(["androidsdk/system-images/android-16/**"]),
)

//java/android/helloandroid/nexus_s.properties contiene lo siguiente:

ro.product.brand=google
ro.product.device=crespo
ro.product.manufacturer=samsung
ro.product.model=Nexus S
ro.product.name=soju

Esta regla generará imágenes y una secuencia de comandos de inicio. Para iniciar el emulador de forma local, ejecuta bazel run :nexus_s -- --action=start. La secuencia de comandos expone las siguientes marcas:

  • --adb_port: Es el puerto en el que se expone adb. Si deseas enviar comandos de ADB al emulador, este es el puerto al que te conectarás.
  • --emulator_port: Es el puerto en el que se expone la consola de administración de telnet del emulador.
  • --enable_display: Inicia el emulador con una pantalla si es verdadero (el valor predeterminado es falso).
  • --action: Inicia o finaliza.
  • --apks_to_install: Es una lista de APKs para instalar en el emulador.

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

cache

Número entero (obligatorio)

Es el tamaño en megabytes de la partición de caché del emulador. El valor mínimo es de 16 megabytes.
default_properties

Etiqueta (Label); el valor predeterminado es None

Un solo archivo de propiedades que se colocará en /default.prop en el emulador. Esto permite que el autor de la regla configure aún más el emulador para que se vea más como un dispositivo real (en particular, controlar sus cadenas de UserAgent y otros comportamientos que podrían hacer que una aplicación o un servidor se comporten de manera diferente a un dispositivo específico). Las propiedades de este archivo anularán las propiedades de solo lectura que suele establecer el emulador, como ro.product.model.
horizontal_resolution

Número entero (obligatorio)

Es la resolución horizontal de la pantalla en píxeles que se debe emular. El valor mínimo es 240.
platform_apks

Es una lista de etiquetas. El valor predeterminado es [].

Es una lista de APKs que se instalarán en el dispositivo durante el inicio.
ram

Número entero (obligatorio)

Es la cantidad de RAM en megabytes que se emulará para el dispositivo. Esto se aplica a todo el dispositivo, no solo a una app en particular instalada en él. El valor mínimo es de 64 megabytes.
screen_density

Número entero (obligatorio)

Es la densidad de la pantalla emulada en píxeles por pulgada. El valor mínimo es de 30 ppi.
system_image

Etiqueta (Label): Obligatorio

Un grupo de archivos que contiene los siguientes archivos:
  • system.img: La partición del sistema
  • kernel-qemu: Es el kernel de Linux que cargará el emulador.
  • ramdisk.img: Es la imagen de initrd que se usará en el momento del inicio.
  • userdata.img: La partición de datos del usuario inicial
  • source.properties: Es un archivo de propiedades que contiene información sobre las imágenes.
Estos archivos forman parte del SDK de Android o los proporcionan terceros (por ejemplo, Intel proporciona imágenes x86).
vertical_resolution

Número entero (obligatorio)

Es la resolución vertical de la pantalla en píxeles que se emulará. El valor mínimo es 240.
vm_heap

Número entero (obligatorio)

Es el tamaño en megabytes del montón de la máquina virtual que usará Android para cada proceso. El valor mínimo es de 16 megabytes.

android_ndk_repository

Ver la fuente de la regla
android_ndk_repository(name, api_level, path, repo_mapping)

Configura Bazel para que use un NDK de Android para admitir la compilación de destinos de Android con código nativo.

Ten en cuenta que esta implementación de android_ndk_repository se reemplazará por una implementación en Starlark. La compatibilidad con versiones futuras del NDK, incluida la versión 25 y posteriores, se implementará en la versión de Starlark de android_ndk_repository. Consulta rules_android_ndk para ver la versión de Starlark.

Ten en cuenta que la compilación para Android también requiere una regla android_sdk_repository en el archivo WORKSPACE.

Para obtener más información, lee la documentación completa sobre el uso del NDK de Android con Bazel.

Ejemplos

android_ndk_repository(
    name = "androidndk",
)

El ejemplo anterior ubicará tu NDK de Android desde $ANDROID_NDK_HOME y detectará el nivel de API más alto que admite.

android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)

En el ejemplo anterior, se usará el NDK de Android ubicado dentro de tu lugar de trabajo en ./android-ndk-r20. Usará las bibliotecas del nivel de API 24 cuando compiles tu código JNI.

cpufeatures

El NDK de Android contiene la biblioteca cpufeatures, que se puede usar para detectar la CPU de un dispositivo durante el tiempo de ejecución. En el siguiente ejemplo, se muestra cómo usar cpufeatures con Bazel.

# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
# BUILD
cc_library(
    name = "jni",
    srcs = ["jni.cc"],
    deps = ["@androidndk//:cpufeatures"],
)

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

api_level

Número entero; no configurable; el valor predeterminado es 0

El nivel de API de Android para el que se compilará. Si no se especifica, se usará el nivel de API más alto instalado.
path

Cadena; no configurable; el valor predeterminado es ""

Es una ruta de acceso absoluta o relativa a un NDK de Android. Se debe configurar este atributo o la variable de entorno $ANDROID_NDK_HOME.

Puedes descargar Android NDK desde el sitio para desarrolladores de Android .

repo_mapping

Diccionario: Cadena -> Cadena; el valor predeterminado es {}

Un diccionario del nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias de Workspace para las dependencias de este repositorio.

Por ejemplo, una entrada "@foo": "@bar" declara que, cada vez que este repositorio dependa de "@foo" (como una dependencia de "@foo//some:target"), en realidad debería resolver esa dependencia dentro de "@bar" declarado de forma global ("@bar//some:target").

android_sdk_repository

Ver la fuente de la regla
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

Configura Bazel para que use un SDK de Android local para admitir la compilación de destinos de Android.

Ejemplos

Lo mínimo para configurar un SDK de Android para Bazel es colocar una regla android_sdk_repository llamada "androidsdk" en tu archivo WORKSPACE y establecer la variable de entorno $ANDROID_HOME en la ruta de acceso de tu SDK de Android. Bazel usará el nivel de API de Android más alto y la versión de herramientas de compilación instalada en el SDK de Android de forma predeterminada.
android_sdk_repository(
    name = "androidsdk",
)

Para garantizar compilaciones reproducibles, los atributos path, api_level y build_tools_version se pueden establecer en valores específicos. La compilación fallará si el SDK de Android no tiene instalado el nivel de API o la versión de herramientas de compilación especificados.

android_sdk_repository(
    name = "androidsdk",
    path = "./sdk",
    api_level = 19,
    build_tools_version = "25.0.0",
)

En el ejemplo anterior, también se muestra el uso de una ruta de acceso relativa al espacio de trabajo al SDK de Android. Esto es útil si el SDK de Android forma parte de tu espacio de trabajo de Bazel (p.ej., si se marca en el control de versión).

Bibliotecas de compatibilidad

Las bibliotecas de compatibilidad están disponibles en Android SDK Manager como "Repositorio de compatibilidad de Android". Este es un conjunto con versión de bibliotecas comunes de Android, como las bibliotecas de Support y AppCompat, que se empaquetan como un repositorio de Maven local. android_sdk_repository genera objetivos de Bazel para cada una de estas bibliotecas que se pueden usar en las dependencias de los objetivos android_binary y android_library.

Los nombres de los destinos generados se derivan de las coordenadas de Maven de las bibliotecas en el repositorio de compatibilidad de Android, con el formato @androidsdk//${group}:${artifact}-${version}. En el siguiente ejemplo, se muestra cómo un android_library puede depender de la versión 25.0.0 de la biblioteca de compatibilidad con versiones anteriores de v7.

android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)

Argumentos

Atributos
name

Nombre: Obligatorio

Un nombre único para este objetivo.

api_level

Número entero; no configurable; el valor predeterminado es 0

Es el nivel de API de Android con el que se compila de forma predeterminada. Si no se especifica, se usará el nivel de API más alto instalado.

La marca android_sdk puede anular el nivel de API que se usa para una compilación determinada. android_sdk_repository crea un objetivo android_sdk para cada nivel de API instalado en el SDK con el nombre @androidsdk//:sdk-${level}, independientemente de si se especifica este atributo. Por ejemplo, para compilar con un nivel de API que no sea el predeterminado, usa bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

Para ver todos los destinos de android_sdk que genera android_sdk_repository , puedes ejecutar bazel query "kind(android_sdk, @androidsdk//...)".

build_tools_version

Cadena; no configurable; el valor predeterminado es ""

Es la versión de las herramientas de compilación de Android que se usará desde el SDK de Android. Si no se especifica, se usará la versión más reciente de las herramientas de compilación instalada.

Bazel requiere la versión 30.0.0 o posterior de las herramientas de compilación.

path

Cadena; no configurable; el valor predeterminado es ""

Es una ruta de acceso absoluta o relativa a un SDK de Android. Se debe configurar este atributo o la variable de entorno $ANDROID_HOME.

El SDK de Android se puede descargar desde el sitio para desarrolladores de Android.

repo_mapping

Diccionario: Cadena -> Cadena; el valor predeterminado es {}

Un diccionario del nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias de Workspace para las dependencias de este repositorio.

Por ejemplo, una entrada "@foo": "@bar" declara que, cada vez que este repositorio dependa de "@foo" (como una dependencia de "@foo//some:target"), en realidad debería resolver esa dependencia dentro de "@bar" declarado de forma global ("@bar//some:target").