Regras
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Exibir origem da regraandroid_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)
Produz arquivos de pacote de aplicativo Android (.apk).
Destinos de saída implícitos
name.apk
: um arquivo de pacote de aplicativo Android assinado com chaves de depuração e zipaligned (em inglês). Ele pode ser usado para desenvolver e depurar seu app. Não é possível lançar o aplicativo quando assinado com as chaves de depuração.name_unsigned.apk
: uma versão não assinada do arquivo acima que pode ser assinada com as chaves de lançamento antes do lançamento para o público.name_deploy.jar
: um arquivo Java que contém o fechamento transitivo desse destino.O jar de implantação contém todas as classes que seriam encontradas por um carregador de classe que pesquisou o caminho de classe do ambiente de execução desse destino do início ao fim.
name_proguard.jar
: um arquivo Java contendo o resultado da execução do ProGuard noname_deploy.jar
. Essa saída só será produzida se o atributo proguard_specs for especificado.name_proguard.map
: um resultado do arquivo de mapeamento da execução do ProGuard noname_deploy.jar
. Essa saída só será produzida se o atributo proguard_specs for especificado e proguard_generate_mapping ou shrink_resources estiver definido.
Exemplos
Exemplos de regras do Android podem ser encontrados no diretório examples/android
da
árvore de origem do Bazel.
Argumentos
Atributos | |
---|---|
name |
Nome, obrigatório Um nome exclusivo para o destino. |
deps
|
Lista de rótulos. O padrão é android_library ,
java_library com restrição android e
cc_library unindo ou produzindo bibliotecas nativas .so para a
plataforma de destino do Android.
|
srcs
|
Lista de rótulos. O padrão é Arquivos Arquivos |
assets
|
Lista de rótulos. O padrão é glob de todos os arquivos no diretório assets . Também é possível referenciar outras regras (qualquer regra que produza
arquivos) ou arquivos exportados em outros pacotes, desde que todos esses arquivos estejam no
diretório assets_dir no pacote correspondente.
|
assets_dir
|
String. O padrão é assets .
O par assets e assets_dir descrevem recursos
empacotados, e um dos dois atributos precisa ser fornecido ou nenhum deles.
|
crunch_png
|
Booleano. O padrão é |
custom_package
|
String. O padrão é |
debug_key
|
Rótulo; o padrão é AVISO: não use suas chaves de produção. Elas precisam ser estritamente protegidas e não mantidas na árvore de origem. |
debug_signing_keys
|
Lista de rótulos. O padrão é AVISO: não use suas chaves de produção. Elas precisam ser estritamente protegidas e não mantidas na árvore de origem. |
debug_signing_lineage_file
|
Rótulo; o padrão é AVISO: não use suas chaves de produção. Elas precisam ser estritamente protegidas e não mantidas na árvore de origem. |
densities
|
Lista de strings. O padrão é |
dex_shards
|
Número inteiro. O padrão é Observe que cada fragmento resultará em pelo menos um dex no app final. Por esse motivo, não é recomendável definir esse valor como mais de 1 para binários de lançamento. |
dexopts
|
Lista de strings. O padrão é |
enable_data_binding
|
Booleano. O padrão é Para criar um app Android com vinculação de dados, também é necessário fazer o seguinte:
|
incremental_dexing
|
Número inteiro; não configurável; o padrão é |
instruments
|
Rótulo; o padrão é O destino Se esse atributo for definido, esse |
javacopts
|
Lista de strings. O padrão é Essas opções do compilador são transmitidas para javac após as opções do compilador global. |
key_rotation_min_sdk
|
String. O padrão é |
main_dex_list
|
Rótulo; o padrão é android/support/multidex/MultiDex$V19.class android/support/multidex/MultiDex.class android/support/multidex/MultiDexApplication.class com/google/common/base/Objects.classPrecisa ser usado com multidex="manual_main_dex" .
|
main_dex_list_opts
|
Lista de strings. O padrão é |
main_dex_proguard_specs
|
Lista de rótulos. O padrão é multidex estiver definido como legacy .
|
manifest
|
Label, obrigatório É o nome do arquivo de manifesto do Android, normalmenteAndroidManifest.xml .
Precisa ser definido se resource_files ou assets estiverem definidos.
|
manifest_values
|
Dicionário: String -> String. O padrão é
Qualquer instância de
Quando |
multidex
|
String. O padrão é Valores possíveis:
|
nocompress_extensions
|
Lista de strings. O padrão é |
package_id
|
Número inteiro. O padrão é Consulte o argumento |
plugins
|
Lista de rótulos. O padrão é java_plugin especificado no
atributo de plug-ins será executado sempre que
esse destino for criado. Os recursos gerados pelo
plug-in serão incluídos no jar de resultados do
destino.
|
proguard_apply_dictionary
|
Rótulo; o padrão é |
proguard_apply_mapping
|
Rótulo; o padrão é proguard_generate_mapping a ser
reutilizado para aplicar o mesmo mapeamento a um novo build.
|
proguard_generate_mapping
|
Booleano; não configurável; o padrão é proguard_specs for
especificado. Esse arquivo lista o mapeamento entre os nomes originais e ofuscados das classes, dos métodos e dos campos.
AVISO: se esse atributo for usado, a especificação do Proguard
não poderá conter |
proguard_specs
|
Lista de rótulos. O padrão é |
resource_configuration_filters
|
Lista de strings. O padrão é en_XA e/ou ar_XB .
|
resource_files
|
Lista de rótulos. O padrão é glob de todos os arquivos no diretório res .
Os arquivos gerados (das regras gerais) também podem ser referenciados pelo Label aqui. A única restrição é que as saídas geradas precisam estar no mesmo diretório " res " que qualquer outro
arquivo de recursos incluído.
|
shrink_resources
|
Número inteiro. O padrão é manifest e resource_files ) e exige o ProGuard.
Ele funciona praticamente da mesma maneira que o redutor de recursos do Gradle
(https://developer.android.com/studio/build/Pesquisa-code.html#reduce-resources).
Diferenças significativas:
name_files/resource_shrinker.log
também será gerado, detalhando a análise e as exclusões realizadas.
Valores possíveis:
|
aar_import
Exibir origem da regraaar_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)
Essa regra permite o uso de arquivos .aar
como bibliotecas para as regras
android_library
e
android_binary
.
Exemplos
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 |
Nome, obrigatório Um nome exclusivo para o destino. |
aar
|
Label, obrigatório O arquivo.aar a ser fornecido aos destinos Android que dependem desse destino.
|
exports
|
Lista de rótulos. O padrão é |
srcjar
|
Rótulo; o padrão é |
android_library
Exibir origem da regraandroid_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)
Essa regra compila e arquiva as origens em um arquivo .jar
.
A biblioteca android.jar
do Android Runtime é colocada implicitamente no
caminho da classe de compilação.
Destinos de saída implícitos
libname.jar
: um arquivo Java.libname-src.jar
: um arquivo que contém as origens ("jar de origem").name.aar
: um pacote "aar" do Android contendo o arquivo Java e os recursos do destino. Ele não contém o fechamento transitivo.
Exemplos
Exemplos de regras do Android podem ser encontrados no diretório examples/android
da
árvore de origem do Bazel.
O exemplo abaixo mostra
como definir idl_import_root
.
Permita que //java/bazel/helloandroid/BUILD
contenha:
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 |
Nome, obrigatório Um nome exclusivo para o destino. |
deps
|
Lista de rótulos. O padrão é android_library ,
java_library com restrição android e
cc_library unindo ou produzindo bibliotecas nativas .so
para a plataforma de destino do Android.
|
srcs
|
Lista de rótulos. O padrão é .java ou .srcjar que são processados para criar o destino.
Arquivos Arquivos Se |
assets
|
Lista de rótulos. O padrão é glob de todos os arquivos no diretório assets . Também é possível referenciar outras regras (qualquer regra que produza
arquivos) ou arquivos exportados em outros pacotes, desde que todos esses arquivos estejam no
diretório assets_dir no pacote correspondente.
|
assets_dir
|
String. O padrão é assets .
O par assets e assets_dir descrevem recursos
empacotados, e um dos dois atributos precisa ser fornecido ou nenhum deles.
|
custom_package
|
String. O padrão é |
enable_data_binding
|
Booleano. O padrão é Para criar um app Android com vinculação de dados, também é necessário fazer o seguinte:
|
exported_plugins
|
Lista de rótulos. O padrão é java_plugin s (por exemplo, processadores
de anotações) para exportar para bibliotecas que dependem diretamente dessa biblioteca.
A lista especificada de |
exports
|
Lista de rótulos. O padrão é exports
são considerados dependências diretas de qualquer regra que depende diretamente do
destino com exports .
Os |
exports_manifest
|
Número inteiro. O padrão é android_binary
que dependem desse destino. Os atributos uses-permissions nunca são exportados.
|
idl_import_root
|
String. O padrão é Esse caminho será usado como raiz de importação ao processar origens inativas que dependem dessa biblioteca. Quando Confira exemplos. |
idl_parcelables
|
Lista de rótulos. O padrão é android_library que dependa dessa biblioteca, diretamente
ou por meio do fechamento transitivo, mas não serão traduzidos para Java
nem compilados.
Somente arquivos Esses arquivos devem ser colocados de forma apropriada para que o compilador AID os encontre. Consulte a descrição de idl_import_root para mais informações sobre o que isso significa. |
idl_preprocessed
|
Lista de rótulos. O padrão é android_library que dependa dessa biblioteca, diretamente
ou por meio do fechamento transitivo, mas não serão traduzidos para Java
nem compilados.
Somente arquivos |
idl_srcs
|
Lista de rótulos. O padrão é srcs .
Esses arquivos serão disponibilizados como importações para qualquer
destino Esses arquivos devem ser colocados de forma apropriada para que o compilador AID os encontre. Consulte a descrição de idl_import_root para mais informações sobre o que isso significa. |
javacopts
|
Lista de strings. O padrão é Essas opções do compilador são transmitidas para javac após as opções do compilador global. |
manifest
|
Rótulo; o padrão é AndroidManifest.xml .
Precisa ser definido se resource_files ou assets estiverem definidos.
|
neverlink
|
Booleano. O padrão é neverlink não serão usados na
criação de .apk . Útil se a biblioteca for fornecida pelo
ambiente de execução durante a execução.
|
plugins
|
Lista de rótulos. O padrão é java_plugin especificado no
atributo de plug-ins será executado sempre que
esse destino for criado. Os recursos gerados pelo
plug-in serão incluídos no jar de resultados do
destino.
|
proguard_specs
|
Lista de rótulos. O padrão é android_binary , dependendo dessa biblioteca.
Os arquivos incluídos aqui só podem ter regras idempotentes, como -dontnote, -dontwarn,
assumenosideeffectives e regras que começam com -keep. Outras opções só podem aparecer em
proguard_specs de android_binary para garantir mesclagens não tautológicas.
|
resource_files
|
Lista de rótulos. O padrão é glob de todos os arquivos no diretório res .
Os arquivos gerados (das regras gerais) também podem ser referenciados pelo Label aqui. A única restrição é que as saídas geradas precisam estar no mesmo diretório " res " que qualquer outro
arquivo de recursos incluído.
|
android_instrumentation_test
Exibir origem da regraandroid_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)
Uma regra android_instrumentation_test
executa testes de instrumentação do Android. Ele iniciará um emulador, instalará o aplicativo que está sendo testado, o aplicativo de teste e todos os outros aplicativos necessários e executará os testes definidos no pacote de teste.
O atributo test_app especifica o
android_binary
que contém o teste. Esse android_binary
, por sua vez,
especifica o aplicativo android_binary
em teste usando o atributo
instruments.
Exemplo
# 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 |
Nome, obrigatório Um nome exclusivo para o destino. |
support_apks
|
Lista de rótulos. O padrão é |
target_device
|
Label, obrigatório O android_device em que o teste deve ser executado. Para executar o teste em um emulador que já esteja em execução ou em um dispositivo físico, use
estes argumentos:
|
test_app
|
Label, obrigatório O destino android_binary que contém as classes de teste. O destinoandroid_binary precisa especificar o destino que está sendo testado por meio do atributo instruments .
|
android_local_test
Exibir origem da regraandroid_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 regra é válida para regras de teste de unidade android_library
localmente,
e não em um dispositivo.
Ele funciona com o framework de testes Robolectric do Android.
Consulte o site do Android Robolectric para ver detalhes sobre como
escrever testes do Robolectric.
Destinos de saída implícitos
name.jar
: um arquivo Java do teste.name-src.jar
: um arquivo que contém as origens ("jar de origem").name_deploy.jar
: um arquivo de implantação Java adequado para implantação (criado apenas se explicitamente solicitado).
Exemplos
Para usar o Robolectric com o android_local_test
, adicione o
repositório
do Robolectric ao seu arquivo 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()Isso extrai as regras
maven_jar
necessárias para o Robolectric.
Então, cada regra android_local_test
vai depender de
@robolectric//bazel:robolectric
. Confira o exemplo abaixo.
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 |
Nome, obrigatório Um nome exclusivo para o destino. |
deps
|
Lista de rótulos. O padrão é
A lista de regras permitidas em |
srcs
|
Lista de rótulos. O padrão é Arquivos Arquivos Todos os outros arquivos serão ignorados, desde que haja pelo menos um arquivo do tipo descrito acima. Caso contrário, um erro será gerado.
O atributo |
custom_package
|
String. O padrão é test_class .
|
densities
|
Lista de strings. O padrão é |
enable_data_binding
|
Booleano. O padrão é |
javacopts
|
Lista de strings. O padrão é Essas opções do compilador são transmitidas para javac após as opções do compilador global. |
jvm_flags
|
Lista de strings. O padrão é O script de wrapper de um binário Java inclui uma definição CLASSPATH
(para encontrar todos os jars dependentes) e invoca o interpretador Java correto.
A linha de comando gerada pelo script de wrapper inclui o nome da
classe principal seguido por um Esse atributo não tem efeito nas saídas |
manifest
|
Rótulo; o padrão é AndroidManifest.xml .
Precisa ser definido se resource_files ou assets forem definidos ou se algum dos manifestos das
bibliotecas em teste tiver uma tag minSdkVersion .
|
manifest_values
|
Dicionário: String -> String. O padrão é applicationId , versionCode , versionName ,
minSdkVersion , targetSdkVersion e
maxSdkVersion também substituirão os atributos correspondentes
das tags "manifest" e
"uses-sdk". packageName será ignorado e definido pelo
applicationId , se
especificado, ou pelo pacote no manifesto.
Não é necessário ter um manifesto na regra para usar manifest_values.
|
nocompress_extensions
|
Lista de strings. O padrão é |
plugins
|
Lista de rótulos. O padrão é java_plugin especificado nesse atributo será executado sempre que essa regra
for criada. Uma biblioteca também pode herdar plug-ins de dependências que usam
exported_plugins . Os recursos
gerados pelo plug-in serão incluídos no jar resultante dessa regra.
|
resource_configuration_filters
|
Lista de strings. O padrão é |
resource_jars
|
Lista de rótulos. O padrão é |
resource_strip_prefix
|
String. O padrão é
Se especificado, esse prefixo de caminho será removido de todos os arquivos no atributo
|
runtime_deps
|
Lista de rótulos. O padrão é deps comum, eles serão exibidos no caminho de classe do tempo de execução, mas, ao contrário deles, não no caminho de classe do tempo de compilação. As dependências necessárias apenas no tempo de execução são listadas aqui. As ferramentas de análise de dependência precisam ignorar os destinos que aparecem em runtime_deps e deps .
|
stamp
|
Número inteiro. O padrão é
Os binários carimbos não são recriados, a menos que as dependências deles mudem. |
test_class
|
String. O padrão é
Esse atributo especifica o nome de uma classe Java a ser executada por esse teste. É raro precisar definir isso. Se esse argumento for omitido, será usada a classe Java cujo nome corresponde ao |
use_launcher
|
Booleano. O padrão é Se o atributo for definido como "false", o atributo
launcher e a sinalização
|
android_device
Exibir origem da regraandroid_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 regra cria um emulador Android configurado com as especificações fornecidas. Esse emulador pode ser iniciado por um comando do Bazel ou pela execução direta do script gerado. É recomendável depender das regras existentes do android_device em vez de definir suas próprias regras.
Essa regra é um destino adequado para a sinalização --run_under para testar o Bazel e executar o blaze. Ele inicia um emulador, copia o destino que está sendo testado/executado para o emulador e o testa ou o executa conforme apropriado.
android_device
oferece suporte à criação de imagens KVM se a system_image subjacente é baseada em X86 e está otimizada, no máximo, para a arquitetura de CPU I686. Para usar a KVM, adicione
tags = ['requires-kvm']
à regra android_device
.
Destinos de saída implícitos
name_images/userdata.dat
: contém arquivos de imagem e snapshots para iniciar o emuladorname_images/emulator-meta-data.pb
: contém informações serializadas necessárias para reiniciá-lo no emulador.
Exemplos
O exemplo abaixo mostra como usar android_device.
//java/android/helloandroid/BUILD
contém
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
contém:
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
Esta regra vai gerar imagens e um script de inicialização. Para iniciar o emulador localmente, execute bazel run :nexus_s -- --action=start. O script expõe as seguintes sinalizações:
- --adb_port: a porta em que o adb será exposto. Se você quiser emitir comandos do adb para o emulador, essa é a porta em que você vai emitir a conexão do adb.
- --emulator_port: a porta em que o console de gerenciamento de telnet do emulador será exposto.
- --enable_display: inicia o emulador com uma tela, se for "true" (o padrão é "false").
- --action: iniciar ou encerrar.
- --apks_to_install: uma lista de APKs a serem instalados no emulador.
Argumentos
Atributos | |
---|---|
name |
Nome, obrigatório Um nome exclusivo para o destino. |
cache
|
Número inteiro, obrigatório O tamanho em megabytes da partição de cache do emulador. O valor mínimo é 16 megabytes. |
default_properties
|
Rótulo; o padrão é |
horizontal_resolution
|
Número inteiro, obrigatório A resolução horizontal da tela em pixels a serem emulados. O valor mínimo é 240. |
platform_apks
|
Lista de rótulos. O padrão é |
ram
|
Número inteiro, obrigatório A quantidade de memória RAM em megabytes a ser emulada para o dispositivo. Isso vale para todo o dispositivo, não apenas para um app específico instalado nele. O valor mínimo é de 64 megabytes. |
screen_density
|
Número inteiro, obrigatório É a densidade da tela emulada em pixels por polegada. O valor mínimo é 30 ppi. |
system_image
|
Label, obrigatório Um grupo de arquivos contendo os seguintes arquivos:
|
vertical_resolution
|
Número inteiro, obrigatório A resolução vertical da tela em pixels a serem emulados. O valor mínimo é 240. |
vm_heap
|
Número inteiro, obrigatório O tamanho em megabytes da heap da máquina virtual que o Android usará para cada processo. O valor mínimo é 16 megabytes. |
android_ndk_repository
Exibir origem da regraandroid_ndk_repository(name, api_level, path, repo_mapping)
Configura o Bazel para usar um Android NDK com suporte à criação de destinos do Android com código nativo.
Essa implementação do android_ndk_repository
está sendo substituída por uma
implementação no Starlark. O suporte a versões futuras do NDK, incluindo a versão 25 e mais recentes, vai
ser implementado na versão Starlark de android_ndk_repository
. Consulte
rules_android_ndk para ver a versão
do Starlark.
A criação para Android também exige uma regra android_sdk_repository
no
arquivo WORKSPACE
.
Para saber mais, leia a documentação completa sobre como usar o Android NDK com o Bazel.
Exemplos
android_ndk_repository( name = "androidndk", )
O exemplo acima vai localizar seu Android NDK em $ANDROID_NDK_HOME
e detectar
o nível mais alto da API com suporte.
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
O exemplo acima vai usar o Android NDK localizado no espaço de trabalho em
./android-ndk-r20
. Ele usará as bibliotecas da API de nível 24 ao compilar o código
JNI.
cpufeatures
O Android NDK contém a biblioteca cpufeatures, que pode ser usada para detectar a CPU de um dispositivo durante a execução. O exemplo a seguir demonstra como usar cpufeatures com o 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 |
Nome, obrigatório Um nome exclusivo para o destino. |
api_level
|
Número inteiro; não configurável; o padrão é |
path
|
String; não configurável; o padrão é $ANDROID_NDK_HOME .
É possível fazer o download do Android NDK no site do desenvolvedor Android . |
repo_mapping
|
Dicionário: String -> String. O padrão é Por exemplo, uma entrada |
android_sdk_repository
Exibir origem da regraandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Configura o Bazel para usar um SDK local do Android com suporte à criação de destinos do Android.
Exemplos
O mínimo para configurar um SDK do Android para Bazel é colocar uma regraandroid_sdk_repository
chamada "androidsdk" no arquivo WORKSPACE
e definir a variável de ambiente $ANDROID_HOME
como o caminho do SDK do Android. Por padrão, o Bazel vai usar o nível mais alto da API do Android
e a versão das ferramentas de build instaladas no SDK do Android.
android_sdk_repository( name = "androidsdk", )
Para garantir builds reproduzíveis, os atributos path
, api_level
e
build_tools_version
podem ser definidos para valores específicos. O build falhará se o
SDK do Android não tiver o nível da API especificado ou a versão das ferramentas de build instalada.
android_sdk_repository( name = "androidsdk", path = "./sdk", api_level = 19, build_tools_version = "25.0.0", )
O exemplo acima também demonstra o uso de um caminho relativo ao espaço de trabalho para o SDK do Android. Isso é útil se o SDK do Android faz parte do seu espaço de trabalho do Bazel (por exemplo, se ele faz check-in no controle de versões).
Bibliotecas de Suporte
As Bibliotecas de Suporte estão disponíveis no Android SDK Manager como "Repositório de Suporte do Android".
Este é um conjunto com controle de versões de bibliotecas comuns do Android, como as bibliotecas Support e AppCompat,
empacotado como um repositório Maven local. android_sdk_repository
gera destinos
do Bazel para cada uma dessas bibliotecas que podem ser usadas nas dependências dos
destinos android_binary
e android_library
.
Os nomes dos destinos gerados são derivados das coordenadas Maven das bibliotecas no
Repositório de Suporte do Android, formatadas como @androidsdk//${group}:${artifact}-${version}
.
O exemplo a seguir mostra como um android_library
pode depender da versão 25.0.0 da
biblioteca appcompatibilidade 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 |
Nome, obrigatório Um nome exclusivo para o destino. |
api_level
|
Número inteiro; não configurável; o padrão é O nível da API usado para um determinado build pode ser substituído pela sinalização Para conferir todos os destinos |
build_tools_version
|
String; não configurável; o padrão é O Bazel exige a versão 30.0.0 ou mais recente das ferramentas de build. |
path
|
String; não configurável; o padrão é $ANDROID_HOME .
O download do SDK do Android pode ser feito no site para desenvolvedores do Android. |
repo_mapping
|
Dicionário: String -> String. O padrão é Por exemplo, uma entrada |