Reglas
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Ver el código 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 paquetes de aplicaciones para Android (.apk).
Destinos de salida implícitos
name.apk
: Es una aplicación para Android. archivo de paquete firmado con claves de depuración y zipaligned, podría usarse para desarrollar y depurar tu aplicación. No puedes lanzar tu aplicación si la firmaste con las claves de depuración.name_unsigned.apk
: Es una versión sin firmar de la anterior que podría firmarse con las claves de lanzamiento antes del lanzamiento del público.name_deploy.jar
: Es un archivo Java que contiene lo siguiente: cierre transitivo de este objetivo.El jar de implementación contiene todas las clases que encontraría un archivo classloader que buscó la ruta de clase del tiempo de ejecución de este objetivo de principio a fin.
name_proguard.jar
: Es un archivo de Java que contiene lo siguiente: el resultado de ejecutar ProGuard en elname_deploy.jar
Este resultado solo se produce si proguard_specs es el especificada.name_proguard.map
: Es un resultado de archivo de asignación de ejecutando ProGuard enname_deploy.jar
Este resultado solo se produce si proguard_specs es el especificadas y proguard_generate_mapping o shrink_resources.
Ejemplos
Puedes encontrar ejemplos de reglas de Android en el directorio examples/android
de la
Árbol de fuentes de Bazel.
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
deps
|
Lista de etiquetas; el valor predeterminado es android_library ,
java_library con la restricción android y
cc_library que une o produce bibliotecas nativas .so para el
Plataforma de segmentación de Android.
|
srcs
|
Lista de etiquetas; el valor predeterminado es Se compilaron los archivos Se descomprimen |
assets
|
Lista de etiquetas; el valor predeterminado es glob de todos los archivos del
assets . También puedes hacer referencia a otras reglas (cualquier regla que produzca
archivos) o exportados en los otros paquetes, siempre que todos esos archivos estén en el
assets_dir en el paquete correspondiente.
|
assets_dir
|
String; el valor predeterminado es assets .
El par assets y assets_dir describen los paquetes
se deben proporcionar los recursos y se deben proporcionar ambos, o ninguno.
|
crunch_png
|
Booleano; el valor predeterminado es |
custom_package
|
String; el valor predeterminado es |
debug_key
|
Etiqueta; el valor predeterminado es ADVERTENCIA: No uses las claves de producción, ya que estén estrictamente protegidas y no se guarden en el árbol fuente. |
debug_signing_keys
|
Lista de etiquetas; el valor predeterminado es ADVERTENCIA: No uses las claves de producción, ya que estén estrictamente protegidas y no se guarden en el árbol fuente. |
debug_signing_lineage_file
|
Etiqueta; el valor predeterminado es ADVERTENCIA: No uses las claves de producción, ya que estén estrictamente protegidas y no se guarden en el á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 DEX en la app final. Por este motivo, no se recomienda configurar esto en más de 1 para los objetos 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 Si se establece 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
|
String; 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 multidex se establece en legacy .
|
manifest
|
Etiqueta; obligatorio. Es el nombre del archivo de manifiesto de Android, normalmenteAndroidManifest.xml .
Se debe definir si se definen recursos_archivos o recursos.
|
manifest_values
|
Diccionario: Cadena -> String; el valor predeterminado es
Se reemplazará cualquier instancia de
Cuando |
multidex
|
String; el valor predeterminado es Valores posibles:
|
nocompress_extensions
|
Lista de cadenas; el valor predeterminado es |
package_id
|
Número entero; el valor predeterminado es Para obtener más información, consulta el argumento |
plugins
|
Lista de etiquetas; el valor predeterminado es java_plugin especificado en
el atributo de complementos se ejecutará siempre que
se compila este destino. Recursos generados por
el complemento se incluirá en el archivo jar de resultados de
el objetivo.
|
proguard_apply_dictionary
|
Etiqueta; el valor predeterminado es |
proguard_apply_mapping
|
Etiqueta; el valor predeterminado es proguard_generate_mapping para que se
volver a usarse para aplicar la misma asignación a una compilación nueva.
|
proguard_generate_mapping
|
Booleano; no configurable; el valor predeterminado es proguard_specs es
especificada. Este archivo enumerará la asignación entre el original y
nombres de clases, métodos y campos ofuscados.
ADVERTENCIA: Si se usa este atributo, ProGuard
la especificación no debe contener |
proguard_specs
|
Lista de etiquetas; el valor predeterminado es |
resource_configuration_filters
|
Lista de cadenas; el valor predeterminado es en_XA o ar_XB .
|
resource_files
|
Lista de etiquetas; el valor predeterminado es glob de todos los archivos del
res .
Se puede hacer referencia a los archivos generados (desde genrules) También puedes etiquetar aquí. La única restricción es que las salidas generadas deben estar bajo el mismo “ res ” como en cualquier otro
archivos de recursos que se incluyen.
|
shrink_resources
|
Número entero; el valor predeterminado es manifest y resource_files ), y requiere ProGuard.
Funciona prácticamente 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
de datos, que detalla el análisis y las eliminaciones realizadas.
Valores posibles:
|
aar_import
Ver el código 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
android_library
y
android_binary
reglas.
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 destino. |
aar
|
Etiqueta; obligatorio. El archivo.aar que se debe proporcionar a los destinos de Android que dependen de este.
|
exports
|
Lista de etiquetas; el valor predeterminado es |
srcjar
|
Etiqueta; el valor predeterminado es |
android_library
Ver el código 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
.
Se coloca implícitamente la biblioteca android.jar
del tiempo de ejecución de Android.
la ruta de la clase de compilación.
Destinos de salida implícitos
libname.jar
: Es un archivo de Java.libname-src.jar
: Es un archivo que contiene lo siguiente: de origen (“Source jar”).name.aar
: Es un "aar" de Android. paquete que contiene el archivo de Java y recursos de este objetivo. No contiene el cierre transitivo.
Ejemplos
Puedes encontrar ejemplos de reglas de Android en el directorio examples/android
de la
Árbol de fuentes de Bazel.
En el siguiente ejemplo, se muestra
cómo configurar idl_import_root
Deja 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 destino. |
deps
|
Lista de etiquetas; el valor predeterminado es android_library ,
java_library con la restricción android y
cc_library une o produce .so bibliotecas nativas
para la plataforma de segmentación de Android.
|
srcs
|
Lista de etiquetas; el valor predeterminado es .java o .srcjar que
se procesan para crear el destino.
Se compilaron los archivos Se descomprimen Si se omite |
assets
|
Lista de etiquetas; el valor predeterminado es glob de todos los archivos del
assets . También puedes hacer referencia a otras reglas (cualquier regla que produzca
archivos) o exportados en los otros paquetes, siempre que todos esos archivos estén en el
assets_dir en el paquete correspondiente.
|
assets_dir
|
String; el valor predeterminado es assets .
El par assets y assets_dir describen los paquetes
se deben proporcionar los recursos y se deben proporcionar ambos, o ninguno.
|
custom_package
|
String; 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_plugin (p.ej., anotación
procesadores) para exportarlos a bibliotecas que dependen directamente de ella.
La lista especificada de |
exports
|
Lista de etiquetas; el valor predeterminado es exports
se consideran dependencias directas de cualquier regla que depende directamente del
se orienta con exports .
Los |
exports_manifest
|
Número entero; el valor predeterminado es android_binary
que dependen de este objetivo. Los atributos uses-permissions nunca se exportan.
|
idl_import_root
|
String; el valor predeterminado es Esta ruta se usará como raíz de importación cuando se procesen fuentes inactivas que depender de esta biblioteca. Cuando se especifica Consulta ejemplos comunes. |
idl_parcelables
|
Lista de etiquetas; el valor predeterminado es android_library que depende de esta biblioteca, directamente
o a través de su cierre transitivo, pero no se traducirá a Java
o compilarse.
Solo los Estos archivos deben estar ubicados correctamente para que el compilador Aidl los encuentre. Consulta la descripción de idl_import_root. para obtener información sobre lo que esto significa. |
idl_preprocessed
|
Lista de etiquetas; el valor predeterminado es android_library que depende de esta biblioteca, directamente
o a través de su cierre transitivo, pero no se traducirá a Java
o compilarse.
Solo 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 estar ubicados correctamente para que el compilador Aidl los encuentre. Consulta la descripción de idl_import_root. para obtener información sobre lo que esto 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 recursos_archivos o recursos.
|
neverlink
|
Booleano; el valor predeterminado es neverlink no se usarán en
Creación de .apk . Es útil si la biblioteca se proporciona a través del
del entorno de ejecución durante la ejecución.
|
plugins
|
Lista de etiquetas; el valor predeterminado es java_plugin especificado en
el atributo de complementos se ejecutará siempre que
se compila este destino. Recursos generados por
el complemento se incluirá en el archivo jar de resultados de
el objetivo.
|
proguard_specs
|
Lista de etiquetas; el valor predeterminado es android_binary según la biblioteca.
Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn,
asume efectos secundarios y reglas que comienzan con -keep. Otras opciones solo pueden aparecer en
Proguard_specs de android_binary para garantizar combinaciones no tautológicas.
|
resource_files
|
Lista de etiquetas; el valor predeterminado es glob de todos los archivos del
res .
Se puede hacer referencia a los archivos generados (desde genrules) También puedes etiquetar aquí. La única restricción es que las salidas generadas deben estar bajo el mismo “ res ” como en cualquier otro
archivos de recursos que se incluyen.
|
android_instrumentation_test
Ver el código 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. Si
iniciar un emulador, instalar la aplicación que se está probando, la aplicación de prueba y
cualquier otra aplicación necesaria y ejecuta las pruebas definidas en el paquete de pruebas.
El atributo test_app especifica la
android_binary
, que contiene la prueba. Este android_binary
a la vez
especifica la aplicación de android_binary
que se está probando mediante su
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 destino. |
support_apks
|
Lista de etiquetas; el valor predeterminado es |
target_device
|
Etiqueta; obligatorio. Es el elemento 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_app
|
Etiqueta; obligatorio. El objetivo android_binary que contiene las clases de prueba El destinoandroid_binary debe especificar el destino durante el que realiza pruebas
su atributo instruments .
|
android_local_test
Ver el código 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 es para probar unidades de reglas android_library
de forma local
(a diferencia de un dispositivo).
Funciona con el framework de pruebas de Robolectric de Android.
Consulta el sitio de Android Robolectric para obtener más información sobre
escribiendo pruebas de Robolectric.
Destinos de salida implícitos
name.jar
: Es un archivo Java de la prueba.name-src.jar
: Es un archivo que contiene las fuentes. ("archivo de origen").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
Robolectric's
repositorio 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
debería depender
@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 destino. |
deps
|
Lista de etiquetas; el valor predeterminado es
La lista de reglas permitidas en |
srcs
|
Lista de etiquetas; el valor predeterminado es Se compilaron los archivos Se descomprimen Se ignoran todos los demás archivos, siempre y cuando hay al menos un archivo de uno de los tipos descritos anteriormente. De lo contrario, se si se genera un error.
El atributo |
custom_package
|
String; 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 del wrapper para un objeto binario de Java incluye una definición de CLASSPATH
(para encontrar todos los archivos jar dependientes) y, luego, invoca el intérprete de Java correcto.
La línea de comandos que genera la secuencia de comandos del wrapper incluye el nombre del
la clase principal seguida de un elemento Ten en cuenta que este atributo no tiene efecto en |
manifest
|
Etiqueta; el valor predeterminado es AndroidManifest.xml .
Debe definirse si se definen recursos_files o assets, o si alguno de los manifiestos de
Las bibliotecas que se están probando tienen una etiqueta minSdkVersion .
|
manifest_values
|
Diccionario: Cadena -> String; el valor predeterminado es applicationId , versionCode y versionName
minSdkVersion , targetSdkVersion y
maxSdkVersion también anulará los atributos correspondientes
del manifiesto y
uses-sdk. packageName se ignorará y se establecerá desde cualquiera de las dos opciones
applicationId si
especificado o el 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_plugin especificado en este atributo se ejecutará cada vez que esta regla
la infraestructura. Una biblioteca también puede heredar complementos de dependencias que usan
exported_plugins 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
|
String; el valor predeterminado es
Si se especifica, este prefijo de ruta de acceso se quita de cada archivo en el |
runtime_deps
|
Lista de etiquetas; el valor predeterminado es deps comunes, estos aparecerán en la ruta de clase del tiempo de ejecución, pero, a diferencia de
no en la ruta de clase del tiempo de compilación. Las dependencias que se necesitan solo en el entorno de ejecución
que se enumeran aquí. Las herramientas de análisis de dependencias deben ignorar los objetivos que aparecen en ambos
runtime_deps y deps .
|
stamp
|
Número entero; el valor predeterminado es
Los objetos binarios sellados no se vuelven a compilar, a menos que cambien sus dependencias. |
test_class
|
String; el valor predeterminado es
Este atributo especifica el nombre de una clase Java que ejecutará
esta prueba. No es común establecer esta configuración. Si se omite este argumento, la clase Java
cuyo nombre corresponde al |
use_launcher
|
Booleano; el valor predeterminado es Si este atributo se establece en falso,
launcher y los atributos relacionados
marca |
android_device
Ver el código 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 Android Emulator configurado con el y las especificaciones del servicio. Este emulador puede iniciarse mediante una ejecución de Bazel o ejecutando directamente la secuencia de comandos generada. Se recomienda que dependa según las reglas existentes de android_device, en lugar de definir la tuya.
Esta regla es un destino adecuado para que la marca --run_under realice pruebas de Bazel y Blaze. cuando se ejecute. Inicia un emulador, copia el destino que se está probando 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 instancia
system_image se basa en X86 y
como máximo para la arquitectura de CPU I686. Para usar KVM, agrega
tags = ['requires-kvm']
a la regla android_device
.
Destinos de salida implícitos
name_images/userdata.dat
: Contiene instantáneas y archivos de imagen para iniciar el emuladorname_images/emulator-meta-data.pb
: Contiene información serializada necesaria para pasar al emulador al reiniciarla.
Ejemplos
En el siguiente ejemplo, se muestra la manera de 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 localmente ejecutando bazel run :nexus_s -- --action=start. La secuencia de comandos expone las siguientes marcas:
- --adb_port: Es el puerto en el que se debe exponer adb. Si deseas emitir adb al emulador, este es el puerto en el que se emitirá adb connect a los que tiene acceso una cuenta.
- --emulator_port: Es el puerto en el que se expone la administración de Telnet del emulador. la consola de Cloud.
- --enable_display: Inicia el emulador con una pantalla si es verdadero (valor predeterminado). como falso).
- --action: Comienza o termina.
- --apks_to_install: Una lista de APK para instalar en el emulador.
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
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; el valor predeterminado es |
horizontal_resolution
|
Número entero; obligatorio. Es la resolución horizontal de la pantalla en píxeles para emular. El valor mínimo es 240. |
platform_apks
|
Lista de etiquetas; el valor predeterminado es |
ram
|
Número entero; obligatorio. Es la cantidad de RAM en megabytes que se emulará para el dispositivo. Esto es para todo el dispositivo, no solo para una app específica instalada en él. El 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 ppp. |
system_image
|
Etiqueta; obligatorio. Un grupo de archivos que contiene los siguientes archivos:
|
vertical_resolution
|
Número entero; obligatorio. Es la resolución de pantalla vertical en píxeles que se emula. El valor mínimo es 240. |
vm_heap
|
Número entero; obligatorio. Es el tamaño en megabytes del montón de máquina virtual que usará Android para cada proceso. El valor mínimo es 16 megabytes. |
android_ndk_repository
Ver el código 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 formatos nativos. código.
Ten en cuenta que esta implementación de android_ndk_repository
se reemplazará por un elemento
en Starlark. La compatibilidad con versiones futuras del NDK, incluida la versión 25 y posteriores,
implementarse en la versión de Starlark de android_ndk_repository
. Consulta
rules_android_ndk para Starlark
versión.
Ten en cuenta que compilar para Android también requiere una regla android_sdk_repository
en tu
archivo WORKSPACE
.
Para obtener más información, consulta el 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 en $ANDROID_NDK_HOME
y detectará
el nivel de API más alto que admita.
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
El ejemplo anterior usará el NDK de Android ubicado dentro de tu espacio de trabajo en
./android-ndk-r20
Usará las bibliotecas de nivel de API 24 cuando compile tu JNI
código.
funciones de CPU
Android NDK contiene las 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 destino. |
api_level
|
Número entero; no configurable; el valor predeterminado es |
path
|
String; 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 -> String; el valor predeterminado es Por ejemplo, una entrada |
android_sdk_repository
Ver el código 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 para admitir la compilación de destinos de Android.
Ejemplos
Lo mínimo para configurar un SDK de Android para Bazel es colocar una reglaandroid_sdk_repository
.
llamado "androidsdk" en tu archivo WORKSPACE
y establece el $ANDROID_HOME
variable de entorno a 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 las herramientas de compilación
instalada en el SDK de Android de forma predeterminada.
android_sdk_repository( name = "androidsdk", )
Para garantizar compilaciones reproducibles, path
, api_level
y
Los atributos 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 especificado ni la versión de las herramientas de compilación.
android_sdk_repository( name = "androidsdk", path = "./sdk", api_level = 19, build_tools_version = "25.0.0", )
En el ejemplo anterior, también se demuestra el uso de una ruta de acceso relativa del espacio de trabajo al SDK de Android. Este es Es útil si el SDK de Android forma parte de tu espacio de trabajo de Bazel (p.ej., si está registrado en la versión control).
Bibliotecas de compatibilidad
Las bibliotecas de compatibilidad están disponibles en SDK Manager de Android como "Repositorio de compatibilidad de Android".
Se trata de un conjunto con control de versiones de bibliotecas de Android comunes, como las bibliotecas de compatibilidad y AppCompat,
empaquetado como un repositorio local de Maven. android_sdk_repository
genera Bazel.
objetivos para cada una de estas bibliotecas que se pueden usar en las dependencias
Destinos android_binary
y android_library
.
Los nombres de los destinos generados derivan de las coordenadas de Maven de las bibliotecas en la
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 appcompat 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 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 Para ver todos los destinos de |
build_tools_version
|
String; no configurable; el valor predeterminado es Bazel requiere la versión 30.0.0 o posterior de las herramientas de compilación. |
path
|
String; no configurable; el valor predeterminado es $ANDROID_HOME .
El SDK de Android se puede descargar el sitio para desarrolladores de Android. |
repo_mapping
|
Diccionario: Cadena -> String; el valor predeterminado es Por ejemplo, una entrada |