Reglas
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Ver la fuente de la reglaandroid_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 que 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: Es una versión sin firmar del archivo anterior que se podría firmar con las claves de lanzamiento antes de que se lance al público.
- name_deploy.jar: Es un archivo Java que contiene el cierre transitivo de este destino.- El JAR de implementación contiene todas las clases que encontraría un cargador de clases que buscara en la ruta de acceso de clases del 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- name_deploy.jar. Este resultado solo se produce si se especifica el atributo proguard_specs.
- name_proguard.map: Es un archivo de asignación que resulta de ejecutar ProGuard en- name_deploy.jar. Este resultado solo se produce si se especifica el atributo proguard_specs y se configuran 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 Es un nombre único para este destino. | 
| deps | Lista de etiquetas. El valor predeterminado es  android_library,java_librarycon restricciónandroidycc_libraryque encapsula o produce bibliotecas nativas.sopara la plataforma de destino de Android. | 
| srcs | Lista de etiquetas. El valor predeterminado es  Se compilan los archivos  Los archivos  | 
| assets | Lista de etiquetas. El valor predeterminado es  globde todos los archivos del directorioassets. También puedes hacer referencia a otras reglas (cualquier regla que genere archivos) o a archivos exportados en los otros paquetes, siempre y cuando todos esos archivos se encuentren en el directorioassets_dirdel paquete correspondiente. | 
| assets_dir | Cadena. El valor predeterminado es  assets.
          El parassetsyassets_dirdescriben los recursos empaquetados, y se deben proporcionar ambos atributos o ninguno de ellos. | 
| crunch_png | Booleano; el valor predeterminado es  | 
| custom_package | Cadena. El valor predeterminado es  | 
| debug_key | Etiqueta: El valor predeterminado es  ADVERTENCIA: No uses tus claves de producción. Deben protegerse estrictamente y no almacenarse en tu árbol fuente. | 
| debug_signing_keys | Lista de etiquetas. El valor predeterminado es  ADVERTENCIA: No uses tus claves de producción. Deben protegerse estrictamente y no almacenarse en tu árbol fuente. | 
| debug_signing_lineage_file | Etiqueta: El valor predeterminado es  ADVERTENCIA: No uses tus claves de producción. Deben protegerse estrictamente y no almacenarse en tu árbol fuente. | 
| densities | Lista de cadenas; el valor predeterminado es  | 
| dex_shards | Número entero; el valor predeterminado es  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 archivos binarios de lanzamiento. | 
| dexopts | Lista de cadenas; el valor predeterminado es  | 
| enable_data_binding | Booleano; el valor predeterminado es  Para compilar una app para Android con vinculación de datos, también debes hacer lo siguiente: 
 | 
| incremental_dexing | Número entero; no configurable; el valor predeterminado es  | 
| instruments | Etiqueta: El valor predeterminado es  Es el objetivo de  Si se configura este atributo, este  | 
| javacopts | Lista de cadenas; el valor predeterminado es  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  | 
| main_dex_list | Etiqueta: El valor predeterminado es  
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    multidex="manual_main_dex". | 
| main_dex_list_opts | Lista de cadenas; el valor predeterminado es  | 
| main_dex_proguard_specs | Lista de etiquetas. El valor predeterminado es  multidexestá establecido enlegacy. | 
| manifest | Label: ObligatoriaNombre del archivo de manifiesto de Android, normalmente AndroidManifest.xml.
          Se debe definir si se definen resource_files o assets. | 
| manifest_values | Diccionario: Cadena -> Cadena; el valor predeterminado es  
          Cualquier instancia de  
           
          Se ignorará  
          Cuando  | 
| multidex | Cadena. El valor predeterminado es  Valores posibles: 
 | 
| nocompress_extensions | Lista de cadenas; el valor predeterminado es  | 
| package_id | Número entero; el valor predeterminado es  Consulta el argumento  | 
| plugins | Lista de etiquetas. El valor predeterminado es  java_pluginespecificado en el atributo plugins se ejecutará cada vez que se compile este destino.  Los recursos que genera el complemento se incluirán en el archivo .jar de resultado del destino. | 
| proguard_apply_dictionary | Etiqueta: El valor predeterminado es  | 
| proguard_apply_mapping | Etiqueta: El valor predeterminado es  proguard_generate_mappingque se puede volver a usar para aplicar la misma asignación a una compilación nueva. | 
| proguard_generate_mapping | Booleano; no se puede configurar; el valor predeterminado es  proguard_specs. En este archivo, se mostrará la asignación entre los nombres originales y los ofuscados de las clases, los métodos y los campos.ADVERTENCIA: Si se usa este atributo, la especificación de Proguard no debe contener ni  | 
| proguard_specs | Lista de etiquetas. El valor predeterminado es  | 
| resource_configuration_filters | Lista de cadenas; el valor predeterminado es  en_XAoar_XB. | 
| resource_files | Lista de etiquetas. El valor predeterminado es  globde todos los archivos del directoriores.También se puede hacer referencia a los archivos generados (a partir de genrules) por medio de la etiqueta aquí. 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  manifestyresource_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: 
 name_files/resource_shrinker.log, en el que se detallarán el análisis y las eliminaciones que se realizaron.Valores posibles: 
 | 
aar_import
Ver la fuente de la reglaaar_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 Es un nombre único para este destino. | 
| aar | Label: ObligatoriaEs el archivo .aarque se proporciona a los destinos de Android que dependen de este destino. | 
| exports | Lista de etiquetas. El valor predeterminado es  | 
| srcjar | Etiqueta: El valor predeterminado es  | 
android_library
Ver la fuente de la reglaandroid_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 acceso de clase de compilación.
Objetivos de salida implícitos
- libname.jar: Es un archivo Java.
- libname-src.jar: Es un archivo que contiene las fuentes ("source jar").
- name.aar: Es un paquete "aar" de Android que contiene el archivo Java y los recursos de este destino. No contiene el cierre transitivo.
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 establecer idl_import_root.
Supongamos que //java/bazel/helloandroid/BUILD contiene 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 Es un nombre único para este destino. | 
| deps | Lista de etiquetas. El valor predeterminado es  android_library,java_librarycon la restricciónandroidycc_libraryque encapsula o produce bibliotecas nativas.sopara la plataforma de destino de Android. | 
| srcs | Lista de etiquetas. El valor predeterminado es  .javao.srcjarque se procesan para crear el destino.Se compilan los archivos  Los archivos  Si se omite  | 
| assets | Lista de etiquetas. El valor predeterminado es  globde todos los archivos del directorioassets. También puedes hacer referencia a otras reglas (cualquier regla que genere archivos) o a archivos exportados en los otros paquetes, siempre y cuando todos esos archivos se encuentren en el directorioassets_dirdel paquete correspondiente. | 
| assets_dir | Cadena. El valor predeterminado es  assets.
          El parassetsyassets_dirdescriben los recursos empaquetados, y se deben proporcionar ambos atributos o ninguno de ellos. | 
| custom_package | Cadena. El valor predeterminado es  | 
| enable_data_binding | Booleano; el valor predeterminado es  Para compilar una app para Android con vinculación de datos, también debes hacer lo siguiente: 
 | 
| exported_plugins | Lista de etiquetas. El valor predeterminado es  java_plugins (p.ej., procesadores de anotaciones) que se exportarán a las bibliotecas que dependen directamente de esta biblioteca.
          La lista especificada de  | 
| exports | Lista de etiquetas. El valor predeterminado es  exportsse considera una dependencia directa de cualquier regla que dependa directamente del destino conexports.Los  | 
| exports_manifest | Número entero; el valor predeterminado es  android_binaryque dependen de este destino. Los atributos deuses-permissionsnunca se exportan. | 
| idl_import_root | Cadena. El valor predeterminado es  Esta ruta de acceso se usará como la raíz de importación cuando se procesen las fuentes de IDL que dependen de esta biblioteca. Cuando se especifica  Consulta ejemplos. | 
| idl_parcelables | Lista de etiquetas. El valor predeterminado es  android_libraryque 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  Estos archivos deben colocarse de forma 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 | Lista de etiquetas. El valor predeterminado es  android_libraryque 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  | 
| idl_srcs | Lista de etiquetas. El valor predeterminado es  srcs.Estos archivos estarán disponibles como importaciones para cualquier destino  Estos archivos deben colocarse de forma 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 | Lista de cadenas; el valor predeterminado es  Estas opciones del compilador se pasan a javac después de las opciones globales del compilador. | 
| manifest | Etiqueta: El valor predeterminado es  AndroidManifest.xml.
          Se debe definir si se definen resource_files o assets. | 
| neverlink | Booleano; el valor predeterminado es  neverlinkno se usarán en la creación de.apk. Es útil si el entorno de ejecución proporcionará la biblioteca durante la ejecución. | 
| plugins | Lista de etiquetas. El valor predeterminado es  java_pluginespecificado en el atributo plugins se ejecutará cada vez que se compile este destino.  Los recursos que genera el complemento se incluirán en el archivo .jar de resultado del destino. | 
| proguard_specs | Lista de etiquetas. El valor predeterminado es  android_binaryque dependa de esta biblioteca.
        Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, assumenosideeffects y reglas que comiencen con -keep. Las demás opciones solo pueden aparecer en los proguard_specs deandroid_binarypara garantizar que las combinaciones no sean tautológicas. | 
| resource_files | Lista de etiquetas. El valor predeterminado es  globde todos los archivos del directoriores.También se puede hacer referencia a los archivos generados (a partir de genrules) por medio de la etiqueta aquí. 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 reglaandroid_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. Se iniciará un emulador, se instalarán la aplicación que se está probando, la aplicación de prueba y cualquier otra aplicación necesaria, y se ejecutarán 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 Es un nombre único para este destino. | 
| support_apks | Lista de etiquetas. El valor predeterminado es  | 
| target_device | Label: Obligatoria Es 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 los siguientes argumentos:
         | 
| test_app | Label: ObligatoriaEs el objetivo android_binary que contiene las clases de prueba. El destino android_binarydebe especificar qué destino está probando a través de su atributoinstruments. | 
android_local_test
Ver la fuente de la reglaandroid_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 se usa para probar 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 ("source jar").
- name_deploy.jar: Es un archivo de implementación de Java adecuado para la implementación (solo se compila si se solicita explícitamente).
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()
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 Es un nombre único para este destino. | 
| deps | Lista de etiquetas. El valor predeterminado es  
        La lista de reglas permitidas en  | 
| srcs | Lista de etiquetas. El valor predeterminado es  Se compilan los archivos  Los archivos  Se ignorarán todos los demás archivos, siempre y cuando haya al menos un archivo de un tipo de archivo descrito anteriormente. De lo contrario, se genera un error. 
        El atributo  | 
| custom_package | Cadena. El valor predeterminado es  test_class. | 
| densities | Lista de cadenas; el valor predeterminado es  | 
| enable_data_binding | Booleano; el valor predeterminado es  | 
| javacopts | Lista de cadenas; el valor predeterminado es  Estas opciones del compilador se pasan a javac después de las opciones globales del compilador. | 
| jvm_flags | Lista de cadenas; el valor predeterminado es  La secuencia de comandos de wrapper para un archivo 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 de wrapper incluye el nombre de la clase principal seguido de un  Ten en cuenta que este atributo no tiene efecto en los resultados de  | 
| manifest | Etiqueta: El valor predeterminado es  AndroidManifest.xml.
        Se debe definir si se definen resource_files o assets, o si alguno de los manifiestos de las bibliotecas en prueba tiene una etiquetaminSdkVersion. | 
| manifest_values | Diccionario: Cadena -> Cadena; el valor predeterminado es  applicationId,versionCode,versionName,minSdkVersion,targetSdkVersionymaxSdkVersiontambién anularán los atributos correspondientes de las etiquetas uses-sdk y del manifiesto. Se ignorarápackageNamey se establecerá a partir deapplicationIdsi se especifica o del paquete en el manifiesto.
        No es necesario tener un manifiesto en la regla para usar manifest_values. | 
| nocompress_extensions | Lista de cadenas; el valor predeterminado es  | 
| plugins | Lista de etiquetas. El valor predeterminado es  java_pluginespecificado en este atributo se ejecutará cada vez que se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usanexported_plugins. Los recursos que genera el complemento se incluirán en el archivo .jar resultante de esta regla. | 
| resource_configuration_filters | Lista de cadenas; el valor predeterminado es  | 
| resource_jars | Lista de etiquetas. El valor predeterminado es  | 
| resource_strip_prefix | Cadena. El valor predeterminado es  
            Si se especifica, este prefijo de ruta de acceso se quita de cada archivo del atributo  | 
| runtime_deps | Lista de etiquetas. El valor predeterminado es  depscomunes, estos 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. Aquí se deben enumerar las dependencias que solo se necesitan en el tiempo de ejecución. Las herramientas de análisis de dependencias deben ignorar los destinos que aparecen enruntime_depsydeps. | 
| stamp | Número entero; el valor predeterminado es  
 Los archivos binarios con marca de tiempo no se vuelven a compilar, a menos que cambien sus dependencias. | 
| test_class | Cadena. El valor predeterminado es  
        Este atributo especifica el nombre de una clase Java que ejecutará esta prueba. Es raro que debas configurar este parámetro. Si se omite este argumento, se usará la clase Java cuyo nombre corresponda al  | 
| use_launcher | Booleano; el valor predeterminado es  Si este atributo se establece en falso, se ignorarán el atributo launcher y la marca  | 
android_device
Ver la fuente de la reglaandroid_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 el script generado. Se recomienda depender de las reglas android_device existentes en lugar de definir las tuyas propias.
Esta regla es un destino adecuado para la marca --run_under de bazel test y blaze run. Inicia un emulador, copia el destino que se está probando o ejecutando 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 add, agrega  tags = ['requires-kvm']  a la regla android_device.
Objetivos de salida implícitos
- name_images/userdata.dat: Contiene archivos de imagen y snapshots para iniciar el emulador
- name_images/emulator-meta-data.pb: Contiene información serializada necesaria para pasar 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. Puedes iniciar el emulador de forma local ejecutando bazel run :nexus_s -- --action=start. La secuencia de comandos expone las siguientes marcas:
- --adb_port: Es el puerto en el que se expondrá adb. Si deseas emitir comandos de adb al emulador, este es el puerto al que emitirás adb connect.
- --emulator_port: Es el puerto en el que se expondrá 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: Puede ser start o kill.
- --apks_to_install: Es una lista de APKs para instalar en el emulador.
Argumentos
| Atributos | |
|---|---|
| name | Nombre: Obligatorio Es un nombre único para este destino. | 
| cache | Número entero; obligatorioTamaño en megabytes de la partición de caché del emulador. El valor mínimo es de 16 megabytes. | 
| default_properties | Etiqueta: El valor predeterminado es  | 
| horizontal_resolution | Número entero; obligatorioResolución de pantalla horizontal en píxeles que se emulará. El valor mínimo es 240. | 
| platform_apks | Lista de etiquetas. El valor predeterminado es  | 
| ram | Número entero; obligatorioCantidad 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; obligatorioDensidad de la pantalla emulada en píxeles por pulgada. El valor mínimo es 30 PPI. | 
| system_image | Label: ObligatoriaUn grupo de archivos que contiene los siguientes archivos: 
 | 
| vertical_resolution | Número entero; obligatorioResolución de pantalla vertical en píxeles que se emulará. El valor mínimo es 240. | 
| vm_heap | Número entero; obligatorioTamaño en megabytes del heap de la máquina virtual que Android usará para cada proceso. El valor mínimo es de 16 megabytes. | 
android_ndk_repository
Ver la fuente de la reglaandroid_ndk_repository(name, api_level, path, repo_mapping)
Configura Bazel para que use un NDK de Android y admita 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, incluidas la versión 25 y las 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 tu 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",
)
En el ejemplo anterior, se ubicará tu NDK de Android desde $ANDROID_NDK_HOME y se 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 espacio de trabajo en ./android-ndk-r20. Usará las bibliotecas del nivel de API 24 cuando compile tu código JNI.
cpufeatures
El NDK de Android contiene la biblioteca cpufeatures, que se puede usar para detectar la CPU de un dispositivo en 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 Es un nombre único para este destino. | 
| api_level | Número entero; no configurable; el valor predeterminado es  | 
| path | Cadena; no configurable; el valor predeterminado es  $ANDROID_NDK_HOME.El NDK de Android se puede descargar desde el sitio para desarrolladores de Android . | 
| repo_mapping | Diccionario: Cadena -> Cadena; el valor predeterminado es  Por ejemplo, una entrada  | 
android_sdk_repository
Ver la fuente de la reglaandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Configura Bazel para que use un SDK de Android local y admita la compilación de destinos de Android.
Ejemplos
Lo mínimo que debes hacer para configurar un SDK de Android para Bazel es colocar una reglaandroid_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. De forma predeterminada, Bazel usará el nivel de API de Android y la versión de las herramientas de compilación más altos que estén instalados en el SDK de Android.
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 las 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 para el SDK de Android. Esto es útil si el SDK de Android forma parte de tu espacio de trabajo de Bazel (p.ej., si se registró en el control de versiones).
Bibliotecas de compatibilidad
Las bibliotecas de compatibilidad están disponibles en Android SDK Manager como "Android Support Repository".
Es un conjunto versionado de bibliotecas comunes de Android, como las bibliotecas de Support y AppCompat, que se empaquetan como un repositorio local de Maven. android_sdk_repository genera destinos de Bazel para cada una de estas bibliotecas que se pueden usar en las dependencias de los destinos 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 con 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 v7 appcompat.
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 Es un nombre único para este destino. | 
| api_level | Número entero; no configurable; el valor predeterminado es  El nivel de API que se usa para una compilación determinada se puede anular con la marca  Para ver todos los destinos de  | 
| build_tools_version | Cadena; no configurable; el valor predeterminado es  Bazel requiere la versión 30.0.0 o posterior de las herramientas de compilación. | 
| path | Cadena; no configurable; el valor predeterminado es  $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  Por ejemplo, una entrada  |