Regras
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Ver 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 aplicativos Android (.apk).
Metas de saída implícitas
- name.apk: um arquivo de pacote de aplicativo Android assinado com chaves de depuração e zipaligned, que pode ser usado para desenvolver e depurar seu aplicativo. Não é possível lançar o aplicativo quando ele está 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 da disponibilização ao 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 classes que pesquisou o classpath de tempo de execução desse destino do início ao fim. 
- name_proguard.jar: um arquivo Java que contém o resultado da execução do ProGuard no- name_deploy.jar. Essa saída só é gerada se o atributo proguard_specs for especificado.
- name_proguard.map: um resultado de arquivo de mapeamento da execução do ProGuard no- name_deploy.jar. Essa saída só é 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 essa segmentação. | 
| deps | Lista de rótulos. O padrão é  android_library,java_librarycom restriçãoandroide encapsulamento ou produçãocc_libraryde bibliotecas nativas.sopara a plataforma de destino Android. | 
| srcs | Lista de rótulos. O padrão é  Os arquivos  Os arquivos  | 
| assets | Lista de rótulos. O padrão é  globde todos os arquivos no diretórioassets. Você também pode referenciar outras regras (qualquer regra que produza
          arquivos) ou arquivos exportados nos outros pacotes, desde que todos esses arquivos estejam no diretórioassets_dirno pacote correspondente. | 
| assets_dir | String; o padrão é  assets.
          O parassetseassets_dirdescreve recursos
          empacotados. É necessário fornecer os dois atributos 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 as chaves de produção. Elas precisam ser protegidas e não podem ser mantidas na árvore de origem. | 
| debug_signing_keys | Lista de rótulos. O padrão é  AVISO: não use as chaves de produção. Elas precisam ser protegidas e não podem ser mantidas na árvore de origem. | 
| debug_signing_lineage_file | Rótulo; o padrão é  AVISO: não use as chaves de produção. Elas precisam ser protegidas e não podem ser mantidas na árvore de origem. | 
| densities | Lista de strings. O padrão é  | 
| dex_shards | Número inteiro. O padrão é  Cada fragmento resulta em pelo menos um dex no app final. Por isso, 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, você também precisa 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, o  | 
| javacopts | Lista de strings. O padrão é  Essas opções são transmitidas para o javac depois das opções globais. | 
| 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.class
                    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 é  multidexestiver definido comolegacy. | 
| manifest | Rótulo; obrigatórioO nome do arquivo de manifesto do Android, normalmente AndroidManifest.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_pluginespecificado no
          atributo "plugins" será executado sempre que
          esse destino for criado.  Os recursos gerados pelo
          plug-in serão incluídos no jar de resultado do
          destino. | 
| proguard_apply_dictionary | Rótulo; o padrão é  | 
| proguard_apply_mapping | Rótulo; o padrão é  proguard_generate_mappingpara ser
          reutilizado e aplicar o mesmo mapeamento a um novo build. | 
| proguard_generate_mapping | Booleano; não configurável; o padrão é  proguard_specsfor especificado. Esse arquivo vai listar o mapeamento entre os nomes originais e
          ofuscados de classes, métodos e 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_XAe/ouar_XB. | 
| resource_files | Lista de rótulos. O padrão é  globde todos os arquivos no diretóriores.Os arquivos gerados (de genrules) também podem ser referenciados por Rótulo aqui. A única restrição é que as saídas geradas precisam estar no mesmo diretório " res" que qualquer outro
          arquivo de recurso incluído. | 
| shrink_resources | Número inteiro. O padrão é  manifesteresource_files) e requer o ProGuard.
          Ele funciona da mesma forma que o encolhedor de recursos do Gradle
          (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).Diferenças significativas: 
 name_files/resource_shrinker.logtambém será gerado, detalhando a análise e as exclusões realizadas.Valores possíveis: 
 | 
aar_import
Ver 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 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 essa segmentação. | 
| aar | Rótulo; obrigatórioO arquivo .aara ser fornecido aos destinos do Android que dependem desse destino. | 
| exports | Lista de rótulos. O padrão é  | 
| srcjar | Rótulo; o padrão é  | 
android_library
Ver 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 fontes em um arquivo .jar.
  A biblioteca de ambiente de execução do Android android.jar é colocada implicitamente no
  caminho de classe de compilação.
Metas de saída implícitas
- libname.jar: um arquivo Java.
- libname-src.jar: um arquivo que contém as fontes ("source jar").
- name.aar: um pacote "aar" do Android que contém o arquivo Java e os recursos desse destino. Ela 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 a seguir mostra
como definir idl_import_root.
Faça com 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 essa segmentação. | 
| deps | Lista de rótulos. O padrão é  android_library,java_librarycom restriçãoandroide encapsulamento ou produção decc_librarybibliotecas nativas.sopara a plataforma de destino Android. | 
| srcs | Lista de rótulos. O padrão é  .javaou.srcjarque
         são processados para criar o destino.Os arquivos  Os arquivos  Se  | 
| assets | Lista de rótulos. O padrão é  globde todos os arquivos no diretórioassets. Você também pode referenciar outras regras (qualquer regra que produza
          arquivos) ou arquivos exportados nos outros pacotes, desde que todos esses arquivos estejam no diretórioassets_dirno pacote correspondente. | 
| assets_dir | String; o padrão é  assets.
          O parassetseassets_dirdescreve recursos
          empacotados. É necessário fornecer os dois atributos 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, você também precisa fazer o seguinte: 
 | 
| exported_plugins | Lista de rótulos. O padrão é  java_plugins (por exemplo, processadores de anotações) a serem exportados para bibliotecas que dependem diretamente desta biblioteca.
          A lista especificada de  | 
| exports | Lista de rótulos. O padrão é  exportsé considerado uma dependência direta de qualquer regra que dependa diretamente do destino comexports.Os  | 
| exports_manifest | Número inteiro. O padrão é  android_binaryque dependem desse destino. Os atributosuses-permissionsnunca são exportados. | 
| idl_import_root | String; o padrão é  Esse caminho será usado como a raiz de importação ao processar fontes idl que dependem dessa biblioteca. Quando  Confira exemplos. | 
| idl_parcelables | Lista de rótulos. O padrão é  android_libraryque dependa dessa biblioteca, direta
        ou via fechamento transitivo, mas não serão traduzidos para Java
        nem compilados.Somente arquivos  Esses arquivos precisam ser colocados corretamente para que o compilador aidl os encontre. Consulte a descrição de idl_import_root para saber o que isso significa. | 
| idl_preprocessed | Lista de rótulos. O padrão é  android_libraryque dependa dessa biblioteca, direta
        ou via fechamento transitivo, mas não serão traduzidos para Java
        nem compilados.Inclua apenas arquivos  | 
| idl_srcs | Lista de rótulos. O padrão é  srcs.Esses arquivos serão disponibilizados como importações para qualquer
        destino  Esses arquivos precisam ser colocados corretamente para que o compilador aidl os encontre. Consulte a descrição de idl_import_root para saber o que isso significa. | 
| javacopts | Lista de strings. O padrão é  Essas opções são transmitidas para o javac depois das opções globais. | 
| manifest | Rótulo; o padrão é  AndroidManifest.xml.
          Precisa ser definido se resource_files ou assets estiverem definidos. | 
| neverlink | Booleano; o padrão é  neverlinknão serão usadas na criação de.apk. Isso é útil se a biblioteca for fornecida pelo
        ambiente de execução durante a execução. | 
| plugins | Lista de rótulos. O padrão é  java_pluginespecificado no
          atributo "plugins" será executado sempre que
          esse destino for criado.  Os recursos gerados pelo
          plug-in serão incluídos no jar de resultado do
          destino. | 
| proguard_specs | Lista de rótulos. O padrão é  android_binaryque dependa dessa biblioteca.
        Os arquivos incluídos aqui precisam ter apenas regras idempotentes, ou seja, -dontnote, -dontwarn, assumenosideeffects e regras que começam com -keep. Outras opções só podem aparecer em
        proguard_specs deandroid_binarypara garantir fusões não tautológicas. | 
| resource_files | Lista de rótulos. O padrão é  globde todos os arquivos no diretóriores.Os arquivos gerados (de genrules) também podem ser referenciados por Rótulo aqui. A única restrição é que as saídas geradas precisam estar no mesmo diretório " res" que qualquer outro
          arquivo de recurso incluído. | 
android_instrumentation_test
Ver 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 vai
  iniciar um emulador, instalar o aplicativo em teste, o aplicativo de teste e
  qualquer outro aplicativo necessário, além de 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 pelo 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 essa segmentação. | 
| support_apks | Lista de rótulos. O padrão é  | 
| target_device | Rótulo; obrigatório O android_device em que o teste deve ser executado. Para executar o teste em um emulador já em execução ou em um dispositivo físico, use
        estes argumentos:
         | 
| test_app | Rótulo; obrigatórioO destino android_binary que contém as classes de teste. O destino android_binaryprecisa especificar qual destino está testando usando o atributoinstruments. | 
android_local_test
Ver 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)
Essa regra é para testes de unidade de regras android_library localmente (em vez de em um dispositivo).
Ele funciona com o framework de testes Robolectric do Android.
Consulte o site Android Robolectric para saber mais sobre
como escrever testes do Robolectric.
Metas de saída implícitas
- name.jar: um arquivo Java do teste.
- name-src.jar: um arquivo que contém as fontes ("source jar").
- name_deploy.jar: um arquivo de implantação Java adequado para implantação (criado somente se solicitado explicitamente).
Exemplos
Para usar o Robolectric com android_local_test, adicione o
repositório do
Robolectric ao 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()
maven_jar necessárias para o Robolectric.
Então, cada regra android_local_test precisa depender de @robolectric//bazel:robolectric. Confira um 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 essa segmentação. | 
| deps | Lista de rótulos. O padrão é  
        A lista de regras permitidas em  | 
| srcs | Lista de rótulos. O padrão é  Os arquivos  Os arquivos  Todos os outros arquivos serão ignorados, desde que haja pelo menos um arquivo de um 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 são transmitidas para o javac depois das opções globais. | 
| jvm_flags | Lista de strings. O padrão é  O script wrapper de um binário Java inclui uma definição de CLASSPATH
          (para encontrar todos os jars dependentes) e invoca o interpretador Java correto.
          A linha de comando gerada pelo script wrapper inclui o nome da
          classe principal seguido por um  Esse atributo não tem efeito nas saídas de  | 
| manifest | Rótulo; o padrão é  AndroidManifest.xml.
        Precisa ser definido se resource_files ou assets estiverem definidos ou se algum dos manifestos das bibliotecas em teste tiver uma tagminSdkVersion. | 
| manifest_values | Dicionário: String -> String; o padrão é  applicationId,versionCode,versionName,minSdkVersion,targetSdkVersionemaxSdkVersiontambém vão substituir os atributos correspondentes
        do manifesto e
        das tags uses-sdk.packageNameserá ignorado e definido comoapplicationId, se especificado, ou o 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_pluginespecificado nesse atributo será executado sempre que essa regra
          for criada. Uma biblioteca também pode herdar plug-ins de dependências que usamexported_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 é  depscomuns, eles aparecem no caminho de classe de execução, mas não no caminho de classe de tempo de compilação. As dependências necessárias apenas no tempo de execução devem ser
          listadas aqui. As ferramentas de análise de dependências precisam ignorar os destinos que aparecem emruntime_depsedeps. | 
| stamp | Número inteiro. O padrão é  
 Os binários carimbados não são recriados, a menos que as dependências 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, a classe Java
        cujo nome corresponde ao  | 
| use_launcher | Booleano; o padrão é  Se esse atributo for definido como "false", o atributo launcher e a flag  | 
android_device
Ver 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)
Essa regra cria um emulador do Android configurado com as especificações fornecidas. Ele pode ser iniciado com um comando bazel run ou executando o script gerado diretamente. É recomendável depender de regras android_device atuais em vez de definir as suas próprias.
Essa regra é um destino adequado para a flag --run_under para bazel test e blaze run. Ele inicia um emulador, copia o destino que está sendo testado/executado para o emulador e o testa ou executa conforme apropriado.
O android_device permite criar imagens KVM se a system_image subjacente for baseada em X86 e otimizada para, no máximo, a arquitetura de CPU I686. Para usar KVM, adicione
   tags = ['requires-kvm']  à regra android_device.
Metas de saída implícitas
- name_images/userdata.dat: contém arquivos de imagem e snapshots para iniciar o emulador.
- name_images/emulator-meta-data.pb: contém informações serializadas necessárias para transmitir ao emulador e reiniciá-lo.
Exemplos
O exemplo a seguir 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
Essa regra vai gerar imagens e um script de inicialização. É possível iniciar o emulador localmente executando bazel run :nexus_s -- --action=start. O script expõe as seguintes flags:
- --adb_port: a porta em que o adb será exposto. Se você quiser emitir comandos adb para o emulador, esta é a porta em que você vai emitir adb connect.
- --emulator_port: a porta em que o console de gerenciamento telnet do emulador será exposto.
- --enable_display: inicia o emulador com uma tela se for verdadeiro (o padrão é falso).
- --action: start ou kill.
- --apks_to_install: uma lista de APKs para instalar no emulador.
Argumentos
| Atributos | |
|---|---|
| name | Nome: obrigatório Um nome exclusivo para essa segmentação. | 
| cache | Número inteiro; obrigatórioO 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órioA resolução horizontal da tela em pixels a ser emulada. O valor mínimo é 240. | 
| platform_apks | Lista de rótulos. O padrão é  | 
| ram | Número inteiro; obrigatórioA quantidade de RAM em megabytes a ser emulada para o dispositivo. Isso é 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órioA densidade da tela emulada em pixels por polegada. O valor mínimo é 30 ppi. | 
| system_image | Rótulo; obrigatórioUm grupo de arquivos que contém os seguintes arquivos: 
 | 
| vertical_resolution | Número inteiro; obrigatórioA resolução vertical da tela em pixels a ser emulada. O valor mínimo é 240. | 
| vm_heap | Número inteiro; obrigatórioO tamanho em megabytes do heap da máquina virtual que o Android vai usar para cada processo. O valor mínimo é 16 megabytes. | 
android_ndk_repository
Ver origem da regraandroid_ndk_repository(name, api_level, path, repo_mapping)
Configura o Bazel para usar um NDK do Android e oferecer suporte à criação de destinos do Android com código nativo.
Essa implementação de android_ndk_repository está sendo substituída por uma implementação em Starlark. O suporte para versões futuras do NDK, incluindo a versão 25 e mais recentes, será implementado na versão do Starlark do android_ndk_repository. Consulte
rules_android_ndk para a versão
do Starlark.
Observe que a criação para Android também exige uma regra android_sdk_repository no arquivo
WORKSPACE.
Para mais informações, 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 o NDK do Android em $ANDROID_NDK_HOME e detectar
o nível de API mais alto compatível.
android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)
O exemplo acima vai usar o NDK do Android localizado no seu espaço de trabalho em
./android-ndk-r20. Ele vai usar as bibliotecas do nível 24 da API ao compilar seu código
JNI.
cpufeatures
O Android NDK contém a biblioteca cpufeatures que pode ser usada para detectar a CPU de um dispositivo no tempo de 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 essa segmentação. | 
| api_level | Número inteiro; não configurável; o padrão é  | 
| path | String; não configurável; o padrão é  $ANDROID_NDK_HOME.O Android NDK pode ser baixado no site para desenvolvedores Android . | 
| repo_mapping | Dicionário: String -> String; o padrão é  Por exemplo, uma entrada  | 
android_sdk_repository
Ver origem da regraandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Configura o Bazel para usar um SDK do Android local e oferecer 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 usa o nível de API do Android mais alto 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 com valores específicos. O build vai falhar se
o SDK do Android não tiver o nível da API ou a versão das ferramentas de build especificados instalados.
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 fizer parte do seu espaço de trabalho do Bazel (por exemplo, se ele estiver verificado no controle de versão).
Bibliotecas de suporte
As bibliotecas de suporte estão disponíveis no Android SDK Manager como "Android Support Repository".
É um conjunto versionado de bibliotecas comuns do Android, como as bibliotecas de suporte e AppCompat,
que é empacotado como um repositório Maven local. O 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 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 | Nome: obrigatório Um nome exclusivo para essa segmentação. | 
| api_level | Número inteiro; não configurável; o padrão é  O nível da API usado em um build específico pode ser substituído pela flag  Para conferir todas as metas de  | 
| build_tools_version | String; não configurável; o padrão é  O Bazel requer ferramentas de build na versão 30.0.0 ou mais recente. | 
| path | String; não configurável; o padrão é  $ANDROID_HOME.O SDK do Android pode ser baixado no site para desenvolvedores Android. | 
| repo_mapping | Dicionário: String -> String; o padrão é  Por exemplo, uma entrada  |