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. 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 elname_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 enname_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 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 Se compilan los archivos Los archivos |
assets
|
Es una lista de etiquetas. El valor predeterminado es 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 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 |
custom_package
|
Cadena; el valor predeterminado es |
debug_key
|
Etiqueta (Label); el valor predeterminado es 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 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 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 |
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 objetos binarios de lanzamiento. |
dexopts
|
Es una lista de cadenas. El valor predeterminado es |
enable_data_binding
|
Es un valor 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 (Label); el valor predeterminado es El objetivo Si se configura este atributo, este |
javacopts
|
Es una 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 (Label); 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
|
Es una lista de cadenas. El valor predeterminado es |
main_dex_proguard_specs
|
Es una lista de etiquetas. El valor predeterminado es multidex está configurado como legacy .
|
manifest
|
Etiqueta (Label): Obligatorio Es el nombre del archivo de manifiesto de Android, que suele serAndroidManifest.xml .
Se debe definir si se definen resource_files o recursos.
|
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
|
Es una lista de cadenas. El valor predeterminado es |
package_id
|
Número entero (el valor predeterminado es Consulta el argumento |
plugins
|
Es una lista de etiquetas. El valor predeterminado es 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 |
proguard_apply_mapping
|
Etiqueta (Label); el valor predeterminado es 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 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 |
proguard_specs
|
Es una lista de etiquetas. El valor predeterminado es |
resource_configuration_filters
|
Es una lista de cadenas. El valor predeterminado es en_XA o ar_XB .
|
resource_files
|
Es una lista de etiquetas. El valor predeterminado es 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 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:
name_files/resource_shrinker.log , que detallará el análisis y las eliminaciones realizadas.
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 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 |
srcjar
|
Etiqueta (Label); 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 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 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 .java o .srcjar que se procesan para crear el destino.
Se compilan los archivos Los archivos Si se omite |
assets
|
Es una lista de etiquetas. El valor predeterminado es 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 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 |
enable_data_binding
|
Es un valor booleano; el valor predeterminado es Para compilar una app para Android con vinculación de datos, también debes hacer lo siguiente:
|
exported_plugins
|
Es una lista de etiquetas. El valor predeterminado es java_plugin (p.ej., procesadores de anotación) que se exportarán a bibliotecas que dependen directamente de esta biblioteca.
La lista especificada de |
exports
|
Es una lista de etiquetas. El valor predeterminado es exports se consideran dependencias directas de cualquier regla que dependa directamente del objetivo con exports .
Los |
exports_manifest
|
Número entero (el valor predeterminado es android_binary que dependen de este destino. Los atributos uses-permissions nunca se exportan.
|
idl_import_root
|
Cadena; el valor predeterminado es 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 Consulta los ejemplos. |
idl_parcelables
|
Es una lista de etiquetas. El valor predeterminado es 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 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 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 |
idl_srcs
|
Es una lista de etiquetas. El valor predeterminado es srcs .
Estos archivos estarán disponibles como importaciones para cualquier objetivo 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 Estas opciones del compilador se pasan a javac después de las opciones globales del compilador. |
manifest
|
Etiqueta (Label); el valor predeterminado es AndroidManifest.xml .
Se debe definir si se definen resource_files o recursos.
|
neverlink
|
Es un valor booleano; el valor predeterminado es 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 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 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 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 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. 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 |
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_app
|
Etiqueta (Label): Obligatorio El objetivo android_binary que contiene las clases de prueba El objetivoandroid_binary debe especificar qué objetivo está probando a través de su atributo instruments .
|
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 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()
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
La lista de reglas permitidas en |
srcs
|
Es una lista de etiquetas. El valor predeterminado es Se compilan los archivos Los archivos 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 |
custom_package
|
Cadena; el valor predeterminado es test_class .
|
densities
|
Es una lista de cadenas. El valor predeterminado es |
enable_data_binding
|
Es un valor booleano; el valor predeterminado es |
javacopts
|
Es una 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
|
Es una 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 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 Ten en cuenta que este atributo no tiene efecto en los resultados de |
manifest
|
Etiqueta (Label); el valor predeterminado es 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 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 |
plugins
|
Es una lista de etiquetas. El valor predeterminado es 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 |
resource_jars
|
Es una lista de etiquetas. El valor predeterminado es |
resource_strip_prefix
|
Cadena; el valor predeterminado es
Si se especifica, este prefijo de ruta se quita de todos los archivos del atributo |
runtime_deps
|
Es una lista de etiquetas. El valor predeterminado es 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
Los objetos binarios estampados 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 configurarlo. Si se omite este argumento, se usará la clase de Java cuyo nombre corresponde al |
use_launcher
|
Es un valor booleano; el valor predeterminado es Si este atributo se establece como 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 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 |
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 |
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:
|
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 reglaandroid_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 |
path
|
Cadena; no configurable; el valor predeterminado es $ANDROID_NDK_HOME .
Puedes descargar Android NDK 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 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
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 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 |