Reglas
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
objeto binario_android
Ver 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 un archivo de paquete de aplicación para Android firmado con claves de depuración y zipalign, que se puede usar para desarrollar y depurar tu aplicación. No puedes liberar tu aplicación cuando se firma con las claves de depuración.name_unsigned.apk
: Una versión sin firma del archivo anterior que se podría firmar con las claves de lanzamiento antes del lanzamiento 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 puede encontrar un cargador de clases que buscó en la ruta de clase de tiempo de ejecución de este destino de principio a fin.
name_proguard.jar
: Es un archivo Java que contiene el resultado de la ejecución de ProGuard enname_deploy.jar
. Este resultado solo se produce si se especifica el atributo proguard_specs.name_proguard.map
: Es el resultado de la ejecución de ProGuard en un archivo de asignación en elname_deploy.jar
. Este resultado solo se produce si se especifica el atributo proguard_specs y se configura proguard_generate_mapping o shrink_resources.
Ejemplos
Se pueden encontrar ejemplos de reglas de Android en el directorio examples/android
del
árbol de fuentes de Bazel.
Argumentos
Atributos | |
---|---|
name |
Un nombre único para esta orientación. |
deps
|
android_library , java_library con restricción android y cc_library que unen o producen bibliotecas nativas .so para la plataforma de destino de Android.
|
srcs
|
Se compilan Los archivos |
assets
|
glob de todos los archivos en el directorio assets . También puedes hacer referencia a otras reglas (cualquier regla que produzca archivos) o archivos exportados en los otros paquetes, siempre que todos esos archivos estén en el directorio assets_dir en el paquete correspondiente.
|
assets_dir
|
assets .
En el par assets y assets_dir , se describen los recursos empaquetados y se deben proporcionar ambos atributos o ninguno de ellos.
|
crunch_png
|
|
custom_package
|
|
debug_key
|
ADVERTENCIA: No uses tus claves de producción, deben estar estrictamente protegidas y no deben conservarse en tu árbol fuente. |
debug_signing_keys
|
ADVERTENCIA: No uses tus claves de producción, deben estar estrictamente protegidas y no deben conservarse en tu árbol fuente. |
debug_signing_lineage_file
|
ADVERTENCIA: No uses tus claves de producción, deben estar estrictamente protegidas y no deben conservarse en tu árbol fuente. |
densities
|
|
dex_shards
|
Ten en cuenta que cada fragmento generará al menos un DEX en la app final. Por esta razón, no se recomienda configurar este valor en más de 1 para los objetos binarios de lanzamiento. |
dexopts
|
|
enable_data_binding
|
A fin de compilar una app para Android con vinculación de datos, también debes hacer lo siguiente:
|
incremental_dexing
|
|
instruments
|
El destino Si se configura este atributo, este |
javacopts
|
Estas opciones del compilador se pasan a javac después de las opciones del compilador global. |
key_rotation_min_sdk
|
|
main_dex_list
|
android/support/multidex/MultiDex$V19.class android/support/multidex/MultiDex.class android/support/multidex/MultiDexApplication.class com/google/common/base/Objects.classSe debe usar con multidex="manual_main_dex" .
|
main_dex_list_opts
|
|
main_dex_proguard_specs
|
multidex se establece en legacy .
|
manifest
|
AndroidManifest.xml .
Debe definirse si se definen los archivos resource_files o de recursos.
|
manifest_values
|
|
multidex
|
Valores posibles:
|
nocompress_extensions
|
|
package_id
|
Consulta el argumento |
plugins
|
java_plugin especificado en el atributo de complementos se ejecutará cada vez que se compile este destino. Los recursos generados por el complemento se incluirán en el archivo jar del resultado del destino.
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
proguard_generate_mapping que se volverá a usar para aplicar la misma asignación a una compilación nueva.
|
proguard_generate_mapping
|
proguard_specs . Este archivo mostrará una lista de la clase, el método y los nombres de campos ofuscados y originales.
ADVERTENCIA: Si se usa este atributo, la especificación de Proguard no debe contener |
proguard_specs
|
|
resource_configuration_filters
|
en_XA o ar_XB .
|
resource_files
|
glob de todos los archivos en el directorio res .
También se puede hacer referencia a los archivos generados (de genrules) mediante Etiqueta. La única restricción es que los resultados generados deben estar en el mismo directorio " res " que cualquier otro archivo de recursos incluido.
|
shrink_resources
|
manifest y resource_files ) y requiere ProGuard.
Funciona principalmente 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á el análisis y las eliminaciones realizadas.
Valores posibles:
|
importar_aar
Ver 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 |
Un nombre único para esta orientación. |
aar
|
.aar que se debe proporcionar a los destinos de Android que dependen de este destino.
|
exports
|
|
srcjar
|
|
biblioteca_android
Ver 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 la clase de compilación.
Destinos de salida implícitos
libname.jar
: Es un archivo Java.libname-src.jar
: Es un archivo que contiene las fuentes (“fuente jar”).name.aar
: Un paquete "aar" de Android que contiene el archivo Java y los recursos de este destino No contiene el cierre transitivo.
Ejemplos
Se pueden 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
.
Permitir 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 |
Un nombre único para esta orientación. |
deps
|
android_library , java_library con restricción android y cc_library que unen o producen bibliotecas nativas .so para la plataforma de destino de Android.
|
srcs
|
.java o .srcjar que se procesan para crear el destino.
Se compilan Los archivos Si se omite |
assets
|
glob de todos los archivos en el directorio assets . También puedes hacer referencia a otras reglas (cualquier regla que produzca archivos) o archivos exportados en los otros paquetes, siempre que todos esos archivos estén en el directorio assets_dir en el paquete correspondiente.
|
assets_dir
|
assets .
En el par assets y assets_dir , se describen los recursos empaquetados y se deben proporcionar ambos atributos o ninguno de ellos.
|
custom_package
|
|
enable_data_binding
|
A fin de compilar una app para Android con vinculación de datos, también debes hacer lo siguiente:
|
exported_plugins
|
java_plugin (p.ej., procesadores de anotaciones) para exportar a las bibliotecas que dependen directamente de esta biblioteca.
La lista especificada de |
exports
|
exports se consideran dependencias directas de cualquier regla que depende directamente del destino con exports .
Las |
exports_manifest
|
android_binary que dependen de este objetivo. Los atributos uses-permissions nunca se exportan.
|
idl_import_root
|
Esta ruta se usará como raíz de importación cuando se procesen fuentes inactivas que dependan de esta biblioteca. Cuando se especifica Consulta los ejemplos. |
idl_parcelables
|
android_library que dependa de esta biblioteca, directamente o a través de su cierre transitivo, pero no se traducirá a Java ni se compilará.
Solo se deben incluir los archivos Estos archivos deben estar ubicados correctamente para que el compilador aidl pueda encontrarlos. Consulta la descripción de idl_import_root para obtener información sobre lo que esto significa. |
idl_preprocessed
|
android_library que dependa de esta biblioteca, directamente o a través de su cierre transitivo, pero no se traducirá a Java ni se compilará.
Solo se deben incluir los archivos |
idl_srcs
|
srcs .
Estos archivos estarán disponibles como importaciones para cualquier destino Estos archivos deben estar ubicados correctamente para que el compilador aidl pueda encontrarlos. Consulta la descripción de idl_import_root para obtener información sobre lo que esto significa. |
javacopts
|
Estas opciones del compilador se pasan a javac después de las opciones del compilador global. |
manifest
|
AndroidManifest.xml .
Debe definirse si se definen los archivos resource_files o de recursos.
|
neverlink
|
neverlink no se usarán en la creación de .apk . Es útil si el entorno de ejecución proporciona la biblioteca durante la ejecución.
|
plugins
|
java_plugin especificado en el atributo de complementos se ejecutará cada vez que se compile este destino. Los recursos generados por el complemento se incluirán en el archivo jar del resultado del destino.
|
proguard_specs
|
android_binary según la biblioteca.
Los archivos que se incluyen aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, asumenosideeffects y reglas que comienzan con -keep. Otras opciones solo pueden aparecer en las proguard_specs de android_binary para garantizar combinaciones no autológicas.
|
resource_files
|
glob de todos los archivos en el directorio res .
También se puede hacer referencia a los archivos generados (de genrules) mediante Etiqueta. La única restricción es que los resultados generados deben estar en el mismo directorio " res " que cualquier otro archivo de recursos incluido.
|
prueba_instrumentación_android
Ver 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. Esta android_binary
, a su vez, especifica la aplicación android_binary
a 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 |
Un nombre único para esta orientación. |
support_apks
|
|
target_device
|
android_device en el que se debe ejecutar la prueba. Para ejecutar la prueba en un emulador que ya esté en ejecución o en un dispositivo físico, usa estos argumentos: |
test_app
|
android_binary debe especificar qué objetivo está probando a través del atributo instruments .
|
prueba_local_android
Ver 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 las pruebas de unidades de reglas android_library
de forma local (en lugar de en un dispositivo).
Funciona con el framework de prueba de Android Robolectric.
Consulta el sitio de Android en Robolectric para obtener información sobre cómo escribir 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 (“fuente jar”).name_deploy.jar
: Es un archivo de implementación de Java adecuado para la implementación (solo compilado si se solicita de manera explícita).
Ejemplos
Para usar Robolectric con android_local_test
, agrega el repositorio de Robolectric a tu archivo WORKSPACE
:
http_archive( name = "robolectric", urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-bazel-<COMMIT>", sha256 = "<HASH>", ) load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") robolectric_repositories()Esto extrae las reglas
maven_jar
necesarias para Robolectric.
Por lo tanto, 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 |
Un nombre único para esta orientación. |
deps
|
La lista de reglas permitidas en |
srcs
|
Se compilan Los archivos Se ignoran todos los demás archivos, siempre que haya al menos un archivo de un tipo de archivo descrito anteriormente. De lo contrario, se genera un error.
El atributo |
custom_package
|
test_class .
|
densities
|
|
enable_data_binding
|
|
javacopts
|
Estas opciones del compilador se pasan a javac después de las opciones del compilador global. |
jvm_flags
|
La secuencia de comandos wrapper para un objeto binario de Java incluye una definición de CLASSPATH (para encontrar todos los archivos jar dependientes) y, además, invoca el intérprete de Java correcto.
La línea de comandos generada por la secuencia de comandos 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
|
AndroidManifest.xml .
Se debe definir si los recursos o archivos de recursos están definidos o si alguno de los manifiestos de las bibliotecas en prueba tiene una etiqueta minSdkVersion .
|
manifest_values
|
applicationId , versionCode , versionName , minSdkVersion , targetSdkVersion y maxSdkVersion también anularán los atributos correspondientes del manifiesto y de las etiquetas uses-sdk. packageName se ignorará y se establecerá desde applicationId si se especifica o el paquete en el manifiesto.
No es necesario tener un manifiesto en la regla para poder usar los manifiestos.
|
nocompress_extensions
|
|
plugins
|
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 generados por el complemento se incluirán en el archivo jar resultante de esta regla.
|
resource_configuration_filters
|
|
resource_jars
|
|
resource_strip_prefix
|
Si se especifica, se quita este prefijo de ruta de acceso de todos los archivos del atributo |
runtime_deps
|
deps común, estos aparecerán en la ruta de clase del tiempo de ejecución, pero, a diferencia de ellos, no en la ruta de clase en el tiempo de compilación. Aquí se deben mostrar las dependencias que solo se necesitan durante el tiempo de ejecución. Las herramientas de análisis de dependencia deben ignorar los objetivos que aparecen en runtime_deps y deps .
|
stamp
|
Los objetos binarios sellados no se vuelven a compilar, a menos que cambien sus dependencias. |
test_class
|
Este atributo especifica el nombre de una clase Java que ejecutará esta prueba. No es común establecer esto. Si se omite este argumento, se usará la clase Java cuyo nombre corresponde al |
use_launcher
|
Si este atributo se configura como falso, el atributo launcher y la marca |
dispositivo_android
Ver 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 determinadas. Este emulador se puede iniciar a través de un comando de ejecución de Bazel o mediante la ejecución directa de la secuencia de comandos generada. Se recomienda depender de las reglas existentes de android_device en lugar de definir las propias.
Esta regla es un destino adecuado para la marca --run_under a la prueba de Bazel y la ejecución Blaze. Inicia un emulador, copia el destino que se prueba o ejecuta en el emulador y lo prueba o lo 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 la arquitectura de CPU I686 como máximo. 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 emulador.name_images/emulator-meta-data.pb
: Contiene la información serializada necesaria para pasar al emulador a fin de reiniciarla.
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:
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: El puerto en el que se mostrará adb. Si deseas emitir comandos de ADB al emulador, este es el puerto al que emitirás la conexión de ADB.
- --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: Start or kill.
- --apks_to_install: una lista de apks para instalar en el emulador.
Argumentos
Atributos | |
---|---|
name |
Un nombre único para esta orientación. |
cache
|
|
default_properties
|
|
horizontal_resolution
|
|
platform_apks
|
|
ram
|
|
screen_density
|
|
system_image
|
|
vertical_resolution
|
|
vm_heap
|
|
android_ndk_repository
Ver fuente de la reglaandroid_ndk_repository(name, api_level, path, repo_mapping)
Configura Bazel para usar un NDK de Android a fin de 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 android_ndk_repository
de Starlark. 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, consulta la documentación completa sobre cómo usar el NDK de Android con Bazel.
Ejemplos
android_ndk_repository( name = "androidndk", )
En el ejemplo anterior, se localizará tu NDK de Android de $ANDROID_NDK_HOME
y se detectará el nivel de API más alto que admita.
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
En el ejemplo anterior, se usará el NDK de Android que se encuentra dentro de tu lugar de trabajo en ./android-ndk-r20
. Usará las bibliotecas de nivel de API 24 cuando compiles tu código JNI.
Características de CPU
El NDK de Android contiene la biblioteca de 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 |
Un nombre único para esta orientación. |
api_level
|
|
path
|
$ANDROID_NDK_HOME .
El NDK de Android se puede descargar en el sitio para desarrolladores de Android. |
repo_mapping
|
Por ejemplo, una entrada |
android_sdk_repository
Ver fuente de la reglaandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Configura Bazel para usar un SDK de Android local a fin de admitir la compilación de objetivos de Android.
Ejemplos
El mínimo para configurar un SDK de Android para Bazel es colocar una reglaandroid_sdk_repository
llamada "androidsdk" en el archivo WORKSPACE
y establecer la variable de entorno $ANDROID_HOME
en la ruta de acceso del SDK de Android. Bazel usará el nivel de API de Android más alto
y compilará la versión de las herramientas de compilación 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 especificado o 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 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 lugar de trabajo de Bazel (p.ej., si está registrado en el control de versión).
Bibliotecas de compatibilidad
Las bibliotecas de compatibilidad están disponibles en Android SDK Manager como "Android Support Repository".
Este es un conjunto de versiones de bibliotecas comunes de Android, como las bibliotecas de compatibilidad 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
android_binary
y android_library
.
Los nombres de los destinos generados provienen 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 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 |
Un nombre único para esta orientación. |
api_level
|
La marca Para ver todos los destinos |
build_tools_version
|
Bazel requiere la versión 30.0.0 de las herramientas de compilación o una posterior. |
path
|
$ANDROID_HOME .
El SDK de Android se puede descargar en el sitio para desarrolladores de Android. |
repo_mapping
|
Por ejemplo, una entrada |