Aturan
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Lihat sumber aturanandroid_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)
Menghasilkan file paket aplikasi Android (.apk).
Target output implisit
- name.apk: File paket aplikasi Android yang ditandatangani dengan kunci debug dan zipaligned, dapat digunakan untuk mengembangkan dan men-debug aplikasi Anda. Anda tidak dapat merilis aplikasi saat ditandatangani dengan kunci debug.
- name_unsigned.apk: Versi file di atas yang tidak ditandatangani yang dapat ditandatangani dengan kunci rilis sebelum dirilis ke publik.
- name_deploy.jar: Arsip Java yang berisi penutupan transitif target ini.- JAR yang di-deploy berisi semua class yang akan ditemukan oleh classloader yang menelusuri classpath runtime target ini dari awal hingga akhir. 
- name_proguard.jar: Arsip Java yang berisi hasil menjalankan ProGuard pada- name_deploy.jar. Output ini hanya dihasilkan jika atribut proguard_specs ditentukan.
- name_proguard.map: File pemetaan yang dihasilkan dari menjalankan ProGuard pada- name_deploy.jar. Output ini hanya dihasilkan jika atribut proguard_specs ditentukan dan proguard_generate_mapping atau shrink_resources ditetapkan.
Contoh
Contoh aturan Android dapat ditemukan di direktori examples/android pada hierarki sumber Bazel.
  
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| deps | Daftar label; defaultnya adalah  android_library,java_librarydengan batasanandroiddancc_libraryyang membungkus atau menghasilkan library native.sountuk
          platform target Android. | 
| srcs | Daftar label; defaultnya adalah  File  File  | 
| assets | Daftar label; defaultnya adalah  globdari semua file di direktoriassets. Anda juga dapat mereferensikan aturan lain (aturan apa pun yang menghasilkan
          file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada di direktoriassets_dirdalam paket yang sesuai. | 
| assets_dir | String; default-nya adalah  assets.
          Pasanganassetsdanassets_dirmenjelaskan aset
          yang dikemas dan kedua atribut harus diberikan atau tidak sama sekali. | 
| crunch_png | Boolean; defaultnya adalah  | 
| custom_package | String; default-nya adalah  | 
| debug_key | Label; defaultnya adalah  PERINGATAN: Jangan gunakan kunci produksi Anda, kunci tersebut harus dilindungi dengan ketat dan tidak disimpan di hierarki sumber. | 
| debug_signing_keys | Daftar label; defaultnya adalah  PERINGATAN: Jangan gunakan kunci produksi Anda, kunci tersebut harus dilindungi dengan ketat dan tidak disimpan di hierarki sumber. | 
| debug_signing_lineage_file | Label; defaultnya adalah  PERINGATAN: Jangan gunakan kunci produksi Anda, kunci tersebut harus dilindungi dengan ketat dan tidak disimpan di hierarki sumber. | 
| densities | Daftar string; defaultnya adalah  | 
| dex_shards | Bilangan bulat; defaultnya adalah  Perhatikan bahwa setiap shard akan menghasilkan setidaknya satu dex di aplikasi akhir. Oleh karena itu, menetapkan nilai ini lebih dari 1 tidak direkomendasikan untuk biner rilis. | 
| dexopts | Daftar string; defaultnya adalah  | 
| enable_data_binding | Boolean; defaultnya adalah  Untuk membuat aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut: 
 | 
| incremental_dexing | Bilangan bulat; tidak dapat dikonfigurasi; default-nya adalah  | 
| instruments | Label; defaultnya adalah  Target  Jika atribut ini ditetapkan,  | 
| javacopts | Daftar string; defaultnya adalah  Opsi compiler ini diteruskan ke javac setelah opsi compiler global. | 
| key_rotation_min_sdk | String; default-nya adalah  | 
| main_dex_list | Label; defaultnya adalah  
          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 | Daftar string; defaultnya adalah  | 
| main_dex_proguard_specs | Daftar label; defaultnya adalah  multidexdisetel kelegacy. | 
| manifest | Label; wajibNama file manifes Android, biasanya AndroidManifest.xml.
          Harus ditentukan jika resource_files atau aset ditentukan. | 
| manifest_values | Dictionary: String -> String; default-nya adalah  
          Semua instance  
           
           
          Jika  | 
| multidex | String; default-nya adalah  Nilai yang mungkin: 
 | 
| nocompress_extensions | Daftar string; defaultnya adalah  | 
| package_id | Bilangan bulat; defaultnya adalah  Lihat argumen  | 
| plugins | Daftar label; defaultnya adalah  java_pluginyang ditentukan dalam
          atribut plugin akan dijalankan setiap kali
          target ini dibuat.  Resource yang dibuat oleh
          plugin akan disertakan dalam JAR hasil
          target. | 
| proguard_apply_dictionary | Label; defaultnya adalah  | 
| proguard_apply_mapping | Label; defaultnya adalah  proguard_generate_mappinguntuk
          digunakan kembali guna menerapkan pemetaan yang sama ke build baru. | 
| proguard_generate_mapping | Boolean; tidak dapat dikonfigurasi; defaultnya adalah  proguard_specsditentukan. File ini akan mencantumkan pemetaan antara nama class, metode, dan kolom asli dan yang di-obfuscate.PERINGATAN: Jika atribut ini digunakan, spesifikasi Proguard
          tidak boleh berisi  | 
| proguard_specs | Daftar label; defaultnya adalah  | 
| resource_configuration_filters | Daftar string; defaultnya adalah  en_XAdan/atauar_XB. | 
| resource_files | Daftar label; defaultnya adalah  globdari semua file di direktorires.File yang dibuat (dari genrules) juga dapat dirujuk berdasarkan Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di direktori " res" yang sama dengan file
          resource lain yang disertakan. | 
| shrink_resources | Bilangan bulat; defaultnya adalah  manifestdanresource_files) dan memerlukan ProGuard.
          Alat ini beroperasi dengan cara yang hampir sama seperti pengecil resource Gradle
          (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).Perbedaan penting: 
 name_files/resource_shrinker.logjuga akan dibuat, yang menjelaskan analisis dan penghapusan yang dilakukan.Kemungkinan nilai: 
 | 
aar_import
Lihat sumber aturanaar_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)
  Aturan ini memungkinkan penggunaan file .aar sebagai library untuk
  aturan android_library dan
  android_binary.
Contoh
    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"],
    )
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| aar | Label; wajibFile .aaryang akan diberikan ke target Android yang bergantung pada target ini. | 
| exports | Daftar label; defaultnya adalah  | 
| srcjar | Label; defaultnya adalah  | 
android_library
Lihat sumber aturanandroid_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)
Aturan ini mengompilasi dan mengarsipkan sumbernya ke dalam file .jar.
  Library runtime Android android.jar secara implisit ditempatkan di jalur class kompilasi.
Target output implisit
- libname.jar: Arsip Java.
- libname-src.jar: Arsip yang berisi sumber ("source jar").
- name.aar: Bundle 'aar' Android yang berisi arsip java dan resource target ini. Tidak berisi penutupan transitif.
Contoh
Contoh aturan Android dapat ditemukan di direktori examples/android pada hierarki sumber Bazel.
Contoh berikut menunjukkan
cara menyetel idl_import_root.
Izinkan //java/bazel/helloandroid/BUILD berisi:
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"],
)
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| deps | Daftar label; defaultnya adalah  android_library,java_librarydengan batasanandroiddancc_libraryyang membungkus atau menghasilkan library native.sountuk platform target Android. | 
| srcs | Daftar label; defaultnya adalah  .javaatau.srcjaryang
         diproses untuk membuat target.File  File  Jika  | 
| assets | Daftar label; defaultnya adalah  globdari semua file di direktoriassets. Anda juga dapat mereferensikan aturan lain (aturan apa pun yang menghasilkan
          file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada di direktoriassets_dirdalam paket yang sesuai. | 
| assets_dir | String; default-nya adalah  assets.
          Pasanganassetsdanassets_dirmenjelaskan aset
          yang dikemas dan kedua atribut harus diberikan atau tidak sama sekali. | 
| custom_package | String; default-nya adalah  | 
| enable_data_binding | Boolean; defaultnya adalah  Untuk membuat aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut: 
 | 
| exported_plugins | Daftar label; defaultnya adalah  java_plugins (misalnya, pemroses anotasi) untuk diekspor ke library yang bergantung langsung pada library ini.
          Daftar  | 
| exports | Daftar label; defaultnya adalah  exportsdianggap sebagai dependensi langsung dari aturan apa pun yang secara langsung bergantung pada
        target denganexports.
 | 
| exports_manifest | Bilangan bulat; defaultnya adalah  android_binaryyang bergantung pada target ini. Atributuses-permissionstidak pernah diekspor. | 
| idl_import_root | String; default-nya adalah  Jalur ini akan digunakan sebagai root impor saat memproses sumber IDL yang bergantung pada library ini. Jika  Lihat contoh. | 
| idl_parcelables | Daftar label; defaultnya adalah  android_libraryyang bergantung pada library ini, secara langsung
        atau melalui penutupan transitifnya, tetapi tidak akan diterjemahkan ke Java
        atau dikompilasi.Hanya file  File ini harus ditempatkan dengan tepat agar dapat ditemukan oleh compiler aidl. Lihat deskripsi idl_import_root untuk mengetahui informasi tentang artinya. | 
| idl_preprocessed | Daftar label; defaultnya adalah  android_libraryyang bergantung pada library ini, secara langsung
        atau melalui penutupan transitifnya, tetapi tidak akan diterjemahkan ke Java
        atau dikompilasi.Hanya file  | 
| idl_srcs | Daftar label; defaultnya adalah  srcs.File ini akan tersedia sebagai impor untuk target
         File ini harus ditempatkan dengan tepat agar dapat ditemukan oleh compiler aidl. Lihat deskripsi idl_import_root untuk mengetahui informasi tentang artinya. | 
| javacopts | Daftar string; defaultnya adalah  Opsi compiler ini diteruskan ke javac setelah opsi compiler global. | 
| manifest | Label; defaultnya adalah  AndroidManifest.xml.
          Harus ditentukan jika resource_files atau aset ditentukan. | 
| neverlink | Boolean; defaultnya adalah  neverlinktidak akan digunakan dalam
        pembuatan.apk. Berguna jika library akan disediakan oleh
        lingkungan runtime selama eksekusi. | 
| plugins | Daftar label; defaultnya adalah  java_pluginyang ditentukan dalam
          atribut plugin akan dijalankan setiap kali
          target ini dibuat.  Resource yang dibuat oleh
          plugin akan disertakan dalam JAR hasil
          target. | 
| proguard_specs | Daftar label; defaultnya adalah  android_binarymana pun yang bergantung pada library ini.
        File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn,
        assumenosideeffects, dan aturan yang dimulai dengan -keep. Opsi lain hanya dapat muncul di
        proguard_specsandroid_binary, untuk memastikan penggabungan non-tautologi. | 
| resource_files | Daftar label; defaultnya adalah  globdari semua file di direktorires.File yang dibuat (dari genrules) juga dapat dirujuk berdasarkan Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di direktori " res" yang sama dengan file
          resource lain yang disertakan. | 
android_instrumentation_test
Lihat sumber aturanandroid_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)
  Aturan android_instrumentation_test menjalankan uji instrumentasi Android. Tindakan ini akan
  memulai emulator, menginstal aplikasi yang sedang diuji, aplikasi pengujian, dan
  aplikasi lain yang diperlukan, serta menjalankan pengujian yang ditentukan dalam paket pengujian.
  Atribut test_app menentukan
  android_binary yang berisi pengujian. android_binary ini pada gilirannya
  menentukan aplikasi android_binary yang sedang diuji melalui atribut
  instruments.
Contoh
# 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",
)
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| support_apks | Daftar label; defaultnya adalah  | 
| target_device | Label; wajib android_device tempat pengujian harus dijalankan. Untuk menjalankan pengujian di emulator yang sudah berjalan atau di perangkat fisik, gunakan
        argumen ini:
         | 
| test_app | Label; wajibTarget android_binary yang berisi class pengujian. Target android_binaryharus menentukan target mana yang diuji melalui
         atributinstruments. | 
android_local_test
Lihat sumber aturanandroid_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)
Aturan ini ditujukan untuk pengujian unit aturan android_library secara lokal
(bukan di perangkat).
Library ini berfungsi dengan framework pengujian Robolectric Android.
Lihat situs Android Robolectric untuk mengetahui detail tentang penulisan pengujian Robolectric.
Target output implisit
- name.jar: Arsip Java untuk pengujian.
- name-src.jar: Arsip yang berisi sumber ("source jar").
- name_deploy.jar: Arsip deployment Java yang sesuai untuk deployment (hanya dibuat jika diminta secara eksplisit).
Contoh
Untuk menggunakan Robolectric dengan android_local_test, tambahkan
repositori
Robolectric ke file WORKSPACE Anda:
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 yang diperlukan untuk Robolectric.
Kemudian, setiap aturan android_local_test harus bergantung pada
@robolectric//bazel:robolectric. Lihat contoh di bawah.
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",
)
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| deps | Daftar label; defaultnya adalah  
        Daftar aturan yang diizinkan di  | 
| srcs | Daftar label; defaultnya adalah  File  File  Semua file lain akan diabaikan, selama ada setidaknya satu file dengan jenis file yang dijelaskan di atas. Jika tidak, error akan muncul. 
        Atribut  | 
| custom_package | String; default-nya adalah  test_classjuga. | 
| densities | Daftar string; defaultnya adalah  | 
| enable_data_binding | Boolean; defaultnya adalah  | 
| javacopts | Daftar string; defaultnya adalah  Opsi compiler ini diteruskan ke javac setelah opsi compiler global. | 
| jvm_flags | Daftar string; defaultnya adalah  Skrip wrapper untuk biner Java mencakup definisi CLASSPATH
          (untuk menemukan semua JAR dependen) dan memanggil interpreter Java yang tepat.
          Baris perintah yang dihasilkan oleh skrip wrapper mencakup nama
          class utama yang diikuti dengan  Perhatikan bahwa atribut ini tidak berpengaruh pada output  | 
| manifest | Label; defaultnya adalah  AndroidManifest.xml.
        Harus ditentukan jika resource_files atau aset ditentukan atau jika salah satu manifes dari
        library yang sedang diuji memiliki tagminSdkVersiondi dalamnya. | 
| manifest_values | Dictionary: String -> String; default-nya adalah  applicationId,versionCode,versionName,minSdkVersion,targetSdkVersion, danmaxSdkVersionjuga akan mengganti atribut yang sesuai
        dari tag manifest dan
        uses-sdk.packageNameakan diabaikan dan akan ditetapkan dariapplicationIdjika
        ditentukan atau paket dalam manifes.
        Anda tidak perlu memiliki manifes pada aturan untuk menggunakan manifest_values. | 
| nocompress_extensions | Daftar string; defaultnya adalah  | 
| plugins | Daftar label; defaultnya adalah  java_pluginyang ditentukan dalam atribut ini akan dijalankan setiap kali aturan ini dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakanexported_plugins. Resource
          yang dihasilkan oleh plugin akan disertakan dalam jar yang dihasilkan dari aturan ini. | 
| resource_configuration_filters | Daftar string; defaultnya adalah  | 
| resource_jars | Daftar label; defaultnya adalah  | 
| resource_strip_prefix | String; default-nya adalah  
            Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut  | 
| runtime_deps | Daftar label; defaultnya adalah  depsbiasa, ini akan muncul di classpath runtime, tetapi tidak seperti
          itu, tidak di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus
          dicantumkan di sini. Alat analisis dependensi harus mengabaikan target yang muncul diruntime_depsdandeps. | 
| stamp | Bilangan bulat; defaultnya adalah  
 Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah. | 
| test_class | String; default-nya adalah  
        Atribut ini menentukan nama class Java yang akan dijalankan oleh
        pengujian ini. Anda jarang perlu menyetelnya. Jika argumen ini tidak disertakan, class Java
        yang namanya sesuai dengan  | 
| use_launcher | Boolean; defaultnya adalah  Jika atribut ini disetel ke salah (false), atribut
          peluncur dan tanda
           | 
android_device
Lihat sumber aturanandroid_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)
Aturan ini membuat emulator Android yang dikonfigurasi dengan spesifikasi yang diberikan. Emulator ini dapat dimulai melalui perintah bazel run atau dengan menjalankan skrip yang dihasilkan secara langsung. Sebaiknya bergantung pada aturan android_device yang ada daripada menentukan aturan Anda sendiri.
Aturan ini adalah target yang sesuai untuk tanda --run_under ke pengujian bazel dan blaze run. Perintah ini akan memulai emulator, menyalin target yang sedang diuji/dijalankan ke emulator, dan menguji atau menjalankannya sebagaimana mestinya.
android_device mendukung pembuatan image KVM jika system_image yang mendasarinya berbasis X86 dan dioptimalkan untuk arsitektur CPU I686. Untuk menggunakan KVM, tambahkan
   tags = ['requires-kvm']  ke aturan android_device.
Target output implisit
- name_images/userdata.dat: Berisi file image dan snapshot untuk memulai emulator
- name_images/emulator-meta-data.pb: Berisi informasi berseri yang diperlukan untuk diteruskan ke emulator guna memulainya ulang.
Contoh
Contoh berikut menunjukkan cara menggunakan android_device.
//java/android/helloandroid/BUILD berisi
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 berisi:
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
Aturan ini akan menghasilkan gambar dan skrip awal. Anda dapat memulai emulator secara lokal dengan menjalankan bazel run :nexus_s -- --action=start. Skrip ini mengekspos flag berikut:
- --adb_port: Port untuk mengekspos adb. Jika Anda ingin mengeluarkan perintah adb ke emulator, port ini adalah port yang akan Anda gunakan untuk mengeluarkan perintah adb connect.
- --emulator_port: Port untuk mengekspos konsol pengelolaan telnet emulator.
- --enable_display: Memulai emulator dengan tampilan jika benar (defaultnya adalah salah).
- --action: Mulai atau hentikan.
- --apks_to_install: daftar APK yang akan diinstal di emulator.
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| cache | Bilangan bulat; wajibUkuran partisi cache emulator dalam megabyte. Nilai minimumnya adalah 16 megabyte. | 
| default_properties | Label; defaultnya adalah  | 
| horizontal_resolution | Bilangan bulat; wajibResolusi layar horizontal dalam piksel yang akan diemulasi. Nilai minimumnya adalah 240. | 
| platform_apks | Daftar label; defaultnya adalah  | 
| ram | Bilangan bulat; wajibJumlah RAM dalam megabyte yang akan diemulasi untuk perangkat. Setelan ini berlaku untuk seluruh perangkat, bukan hanya untuk aplikasi tertentu yang diinstal di perangkat. Nilai minimumnya adalah 64 megabyte. | 
| screen_density | Bilangan bulat; wajibKepadatan layar yang diemulasi dalam piksel per inci. Nilai minimumnya adalah 30 ppi. | 
| system_image | Label; wajibGrup file yang berisi file berikut: 
 | 
| vertical_resolution | Bilangan bulat; wajibResolusi layar vertikal dalam piksel yang akan diemulasi. Nilai minimumnya adalah 240. | 
| vm_heap | Bilangan bulat; wajibUkuran dalam megabyte heap mesin virtual yang akan digunakan Android untuk setiap proses. Nilai minimumnya adalah 16 megabyte. | 
android_ndk_repository
Lihat sumber aturanandroid_ndk_repository(name, api_level, path, repo_mapping)
Mengonfigurasi Bazel untuk menggunakan Android NDK guna mendukung pembuatan target Android dengan kode native.
Perhatikan bahwa penerapan android_ndk_repository ini digantikan oleh penerapan di Starlark. Dukungan untuk NDK versi mendatang, termasuk versi 25 dan yang lebih baru, akan diterapkan di android_ndk_repository versi Starlark. Lihat
rules_android_ndk untuk versi
Starlark.
Perhatikan bahwa pembuatan build untuk Android juga memerlukan aturan android_sdk_repository dalam file
WORKSPACE Anda.
Untuk mengetahui informasi selengkapnya, baca dokumentasi lengkap tentang penggunaan Android NDK dengan Bazel.
Contoh
android_ndk_repository(
    name = "androidndk",
)
Contoh di atas akan menemukan Android NDK Anda dari $ANDROID_NDK_HOME dan mendeteksi
level API tertinggi yang didukungnya.
android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)
Contoh di atas akan menggunakan Android NDK yang berada di dalam ruang kerja Anda di ./android-ndk-r20. Library ini akan menggunakan library level API 24 saat mengompilasi kode JNI
Anda.
cpufeatures
Android NDK berisi library cpufeatures yang dapat digunakan untuk mendeteksi CPU perangkat saat runtime. Contoh berikut menunjukkan cara menggunakan cpufeatures dengan Bazel.
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD
cc_library(
    name = "jni",
    srcs = ["jni.cc"],
    deps = ["@androidndk//:cpufeatures"],
)
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| api_level | Bilangan bulat; tidak dapat dikonfigurasi; default-nya adalah  | 
| path | String; tidak dapat dikonfigurasi; defaultnya adalah  $ANDROID_NDK_HOMEharus ditetapkan.Android NDK dapat didownload dari situs developer Android . | 
| repo_mapping | Dictionary: String -> String; default-nya adalah  Misalnya, entri  | 
android_sdk_repository
Lihat sumber aturanandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Mengonfigurasi Bazel untuk menggunakan Android SDK lokal guna mendukung pembuatan target Android.
Contoh
Persyaratan minimum untuk menyiapkan Android SDK untuk Bazel adalah menempatkan aturanandroid_sdk_repository bernama "androidsdk" dalam file WORKSPACE dan menetapkan variabel lingkungan $ANDROID_HOME ke jalur Android SDK Anda. Bazel akan menggunakan level Android API dan versi alat build tertinggi yang diinstal di Android SDK secara default.
android_sdk_repository(
    name = "androidsdk",
)
Untuk memastikan build yang dapat direproduksi, atribut path, api_level, dan build_tools_version dapat ditetapkan ke nilai tertentu. Build akan gagal jika
Android SDK tidak menginstal API level atau versi alat build yang ditentukan.
android_sdk_repository(
    name = "androidsdk",
    path = "./sdk",
    api_level = 19,
    build_tools_version = "25.0.0",
)
Contoh di atas juga menunjukkan penggunaan jalur relatif ruang kerja ke Android SDK. Hal ini berguna jika Android SDK adalah bagian dari ruang kerja Bazel Anda (misalnya, jika SDK tersebut dicentang ke kontrol versi).
Support Library
Support Library tersedia di Android SDK Manager sebagai "Android Support Repository".
Ini adalah kumpulan library Android umum yang diberi versi, seperti library Support dan AppCompat,
yang dikemas sebagai repositori Maven lokal. android_sdk_repository menghasilkan target Bazel untuk setiap library ini yang dapat digunakan dalam dependensi target android_binary dan android_library.
Nama target yang dihasilkan berasal dari koordinat Maven library di
Android Support Repository, yang diformat sebagai @androidsdk//${group}:${artifact}-${version}.
Contoh berikut menunjukkan cara android_library dapat bergantung pada library appcompat v7 versi 25.0.0.
android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)
Argumen
| Atribut | |
|---|---|
| name | Nama; wajib Nama unik untuk target ini. | 
| api_level | Bilangan bulat; tidak dapat dikonfigurasi; default-nya adalah  Level API yang digunakan untuk build tertentu dapat diganti dengan tanda  Untuk melihat semua target  | 
| build_tools_version | String; tidak dapat dikonfigurasi; defaultnya adalah  Bazel memerlukan alat build versi 30.0.0 atau yang lebih baru. | 
| path | String; tidak dapat dikonfigurasi; defaultnya adalah  $ANDROID_HOMEharus ditetapkan.Android SDK dapat didownload dari situs developer Android. | 
| repo_mapping | Dictionary: String -> String; default-nya adalah  Misalnya, entri  |