BazelCon 2022 akan hadir pada 16-17 November ke New York dan online.
Daftar sekarang.

Aturan Android

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Aturan

biner_android

android_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 diselaraskan dengan zip, dapat digunakan untuk mengembangkan dan men-debug aplikasi Anda. Anda tidak dapat merilis aplikasi ketika ditandatangani dengan kunci debug.
  • name_unsigned.apk: Versi file yang tidak ditandatangani di atas yang dapat ditandatangani dengan kunci rilis sebelum dirilis ke publik.
  • name_deploy.jar: Arsip Java yang berisi penutupan transitif target ini.

    Jar deployment 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 di name_deploy.jar. Output ini hanya dihasilkan jika atribut proguard_specs ditentukan.
  • name_proguard.map: Hasil file pemetaan saat menjalankan ProGuard di 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 dari hierarki sumber Bazel.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar library lain yang akan ditautkan ke target biner. Jenis library yang diizinkan adalah: android_library, java_library dengan batasan android, dan cc_library menggabungkan atau membuat library native .so untuk platform target Android.
srcs

List of labels; optional

Daftar file sumber yang diproses untuk membuat target.

File srcs dari jenis .java dikompilasi. Demi keterbacaan, sebaiknya jangan gunakan nama file sumber .java yang dihasilkan ke srcs. Sebagai gantinya, masukkan nama aturan yang bergantung pada srcs, seperti yang dijelaskan di bawah ini.

File srcs jenis .srcjar diekstrak dan dikompilasi. (Ini berguna jika Anda perlu membuat kumpulan file .java dengan ekstensi genrule atau build.)

assets

List of labels; optional

Daftar aset yang akan dikemas. Ini biasanya adalah glob dari semua file pada direktori assets. Anda juga dapat mereferensikan aturan lain (aturan apa pun yang menghasilkan file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada dalam direktori assets_dir dalam paket yang sesuai.
assets_dir

String; optional

String yang memberikan jalur ke file dalam assets. Pasangan assets dan assets_dir mendeskripsikan aset terpaket dan kedua atribut tersebut harus diberikan atau tidak sama sekali.
crunch_png

Boolean; optional; default is True

Melakukan pemrosesan PNG (atau tidak). Ini terpisah dari pemrosesan 9-patch, yang selalu dilakukan. Ini adalah solusi yang tidak digunakan lagi untuk bug aapt yang telah diperbaiki dalam aapt2.
custom_package

String; optional

Paket Java yang akan menghasilkan sumber Java. Secara default, paket disimpulkan dari direktori tempat file BUILD yang berisi aturan. Anda dapat menentukan paket yang berbeda, tetapi hal ini sangat tidak disarankan karena dapat menyebabkan konflik classpath dengan library lain yang hanya akan terdeteksi pada runtime.
debug_key

Label; optional; default is @bazel_tools//tools/android:debug_keystore

File yang berisi keystore debug yang akan digunakan untuk menandatangani apk debug. Biasanya Anda tidak ingin menggunakan kunci selain kunci default, sehingga atribut ini harus dihilangkan.

PERINGATAN: Jangan gunakan kunci produksi Anda karena kunci tersebut harus diamankan dengan ketat dan tidak disimpan di hierarki sumber Anda.

debug_signing_keys

List of labels; optional

Daftar file, keystore debug yang akan digunakan untuk menandatangani apk debug. Biasanya Anda tidak ingin menggunakan kunci selain kunci default, sehingga atribut ini harus dihilangkan.

PERINGATAN: Jangan gunakan kunci produksi Anda karena kunci tersebut harus diamankan dengan ketat dan tidak disimpan di hierarki sumber Anda.

debug_signing_lineage_file

Label; optional

File yang berisi urutan penandatanganan untuk debug_signing_keys. Biasanya Anda tidak ingin menggunakan kunci selain kunci default, sehingga atribut ini harus dihilangkan.

PERINGATAN: Jangan gunakan kunci produksi Anda karena kunci tersebut harus diamankan dengan ketat dan tidak disimpan di hierarki sumber Anda.

densities

List of strings; optional

Kepadatan yang akan difilter saat mem-build apk. Tindakan ini akan menghapus resource raster drawable yang tidak akan dimuat oleh perangkat dengan kepadatan layar tertentu, untuk mengurangi ukuran APK. Bagian layar kompatibel yang sesuai juga akan ditambahkan ke manifes jika belum berisi listingan superset.
dex_shards

Integer; optional; default is 1

Jumlah shard yang harus diurai. Hal ini membuat dexing jauh lebih cepat dengan mengorbankan penginstalan aplikasi dan waktu startup. Semakin besar binernya, semakin banyak shard yang harus digunakan. Nilai 25 adalah nilai yang bagus untuk memulai eksperimen.

Perhatikan bahwa setiap shard akan menghasilkan setidaknya satu dex dalam aplikasi akhir. Oleh karena itu, menetapkan nilai ini ke lebih dari 1 tidak direkomendasikan untuk biner rilis.

dexopts

List of strings; optional

Tanda command line tambahan untuk alat dx saat membuat class.dex. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Bourne.
enable_data_binding

Boolean; optional; default is False

Jika benar, aturan ini memproses ekspresi data binding dalam resource tata letak yang disertakan melalui atribut resource_files. Tanpa setelan ini, ekspresi data binding akan menghasilkan kegagalan build.

Untuk mem-build aplikasi Android dengan data binding, Anda juga harus melakukan hal-hal berikut:

  1. Tetapkan atribut ini untuk semua aturan Android yang secara transitif bergantung pada aturan ini. Hal ini karena dependensi bergantung pada ekspresi data binding aturan melalui penggabungan resource. Jadi, mereka juga perlu mem-build dengan data binding untuk mengurai ekspresi tersebut.
  2. Tambahkan entri deps = untuk library runtime data binding ke semua target yang menetapkan atribut ini. Lokasi library ini bergantung pada penyiapan depot Anda.
incremental_dexing

Integer; optional; nonconfigurable; default is -1

Paksa target untuk dibuat dengan atau tanpa dexing inkremental, dengan mengganti default dan flag --incremental_dexing.
instruments

Label; optional

Target android_binary untuk instrumen.

Jika atribut ini ditetapkan, android_binary ini akan diperlakukan sebagai aplikasi pengujian untuk uji instrumentasi. Target android_instrumentation_test kemudian dapat menentukan target ini dalam atribut test_app-nya.

javacopts

List of strings; optional

Opsi compiler tambahan untuk target ini. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

key_rotation_min_sdk

String; optional

Menetapkan versi platform Android minimum (API Level) tempat kunci penandatanganan yang dirotasi APK harus digunakan untuk menghasilkan tanda tangan APK. Kunci penandatanganan asli untuk APK akan digunakan untuk semua versi platform sebelumnya.
main_dex_list

Label; optional

File teks berisi daftar nama file kelas. Class yang ditentukan oleh file class tersebut dimasukkan ke dalam class.dex utama, misalnya:
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    
Harus digunakan dengan multidex="manual_main_dex".
main_dex_list_opts

List of strings; optional

Opsi command line untuk diteruskan ke builder daftar dex utama. Gunakan opsi ini untuk memengaruhi class yang disertakan dalam daftar dex utama.
main_dex_proguard_specs

List of labels; optional

File yang akan digunakan sebagai spesifikasi Proguard untuk menentukan class yang harus disimpan dalam dex utama. Hanya diizinkan jika atribut multidex disetel ke legacy.
manifest

Label; required

Nama file manifes Android, biasanya AndroidManifest.xml. Harus ditentukan jika resource_files atau aset ditentukan.
manifest_values

Dictionary: String -> String; optional

Kamus nilai yang akan diganti dalam manifes. Setiap instance ${name} dalam manifes akan diganti dengan nilai yang sesuai dengan nama dalam kamus. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion, dan maxSdkVersion juga akan mengganti atribut yang sesuai dari manifes dan tag use-sdk. packageName akan diabaikan dan akan ditetapkan dari applicationId jika ditentukan atau paket dalam manifes. Jika manifest_merger ditetapkan ke versi lama, hanya applicationId, versionCode, dan versionName yang akan berpengaruh.
multidex

String; optional; default is "native"

Apakah akan membagi kode menjadi beberapa file dex.
Nilai yang memungkinkan:
  • native: Memisahkan kode menjadi beberapa file dex jika batas indeks dex 64K terlampaui. Asumsikan dukungan platform native untuk memuat class multidex pada waktu proses. Ini hanya berfungsi pada Android L dan yang lebih baru.
  • legacy: Memisahkan kode menjadi beberapa file dex jika batas indeks dex 64K terlampaui. Asumsikan class multidex dimuat melalui kode aplikasi (yaitu, tidak ada dukungan platform native).
  • manual_main_dex: Memisahkan kode menjadi beberapa file dex jika batas indeks dex 64K terlampaui. Konten file dex utama perlu ditentukan dengan memberikan daftar class dalam file teks menggunakan atribut main_dex_list.
  • off: Kompilasi semua kode ke satu file dex, meskipun melebihi batas indeks.
nocompress_extensions

List of strings; optional

Daftar ekstensi file agar tidak dikompresi di apk.
package_id

Integer; optional; default is 0

ID Paket yang akan ditetapkan ke resource dalam biner ini.

Lihat argumen --package-id AAPT2 untuk informasi selengkapnya. Hal ini biasanya (dan biasanya) dibiarkan tidak disetel, sehingga menghasilkan nilai default 127 (0x7F).

plugins

List of labels; optional

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan dalam atribut plugin akan dijalankan setiap kali target ini dibuat. Resource yang dihasilkan oleh plugin akan disertakan dalam jar hasil target.
proguard_apply_dictionary

Label; optional

File yang akan digunakan sebagai pemetaan untuk proguard. File "kata&quot yang dipisahkan baris untuk diambil dari saat mengganti nama class dan anggota selama obfuscation.
proguard_apply_mapping

Label; optional

File yang akan digunakan sebagai pemetaan untuk proguard. File pemetaan yang dihasilkan oleh proguard_generate_mapping akan digunakan kembali untuk menerapkan pemetaan yang sama ke build baru.
proguard_generate_mapping

Boolean; optional; nonconfigurable; default is False

Apakah akan membuat file pemetaan ProGuard. File pemetaan hanya akan dibuat jika proguard_specs ditentukan. File ini akan mencantumkan pemetaan antara nama class, metode, dan class asli serta yang di-obfuscate.

PERINGATAN: Jika atribut ini digunakan, spesifikasi Proguard tidak boleh berisi -dontobfuscate atau -printmapping.

proguard_specs

List of labels; optional

File yang akan digunakan sebagai spesifikasi Proguard. File ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard.
resource_configuration_filters

List of strings; optional

Daftar filter konfigurasi resource, seperti 'en' yang akan membatasi resource di apk hanya untuk resource di konfigurasi 'en'. Untuk mengaktifkan pseudolocalization, sertakan pseudo-lokal en_XA dan/atau ar_XB.
resource_files

List of labels; optional

Daftar resource yang akan dikemas. Ini biasanya adalah glob dari semua file pada direktori res.
File yang dihasilkan (dari genrules) juga dapat direferensikan oleh Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada dalam direktori "res" yang sama dengan file resource lainnya yang disertakan.
shrink_resources

Integer; optional; default is -1

Apakah akan melakukan penyusutan resource. Resource yang tidak digunakan oleh biner akan dihapus dari APK. Ini hanya didukung untuk aturan yang menggunakan resource lokal (yaitu atribut manifest dan resource_files) dan memerlukan ProGuard. Ini beroperasi sebagian besar dengan cara yang sama seperti penyingkat resource Gradle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

Perbedaan penting:

  • resource di values/ akan dihapus serta resource berbasis file
  • menggunakan strict mode secara default
  • menghapus resource ID yang tidak digunakan hanya didukung dengan aapt2
Jika penyusutan resource diaktifkan, name_files/resource_shrinker.log juga akan dibuat, yang memerinci analisis dan penghapusan yang dilakukan.

Kemungkinan nilai:

  • shrink_resources = 1: Mengaktifkan penyingkatan resource Android
  • shrink_resources = 0: Menonaktifkan penyingkatan resource Android
  • shrink_resources = -1: Penyusutan dikontrol oleh flag --android_resource_shrinking.

Aar_import

aar_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 mengizinkan 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

Name; required

Nama unik untuk target ini.

aar

Label; required

File .aar yang akan diberikan ke target Android yang bergantung pada target ini.
exports

List of labels; optional

Target untuk diekspor ke aturan yang bergantung pada aturan ini. Lihat java_library.exports.
srcjar

Label; optional

File JAR yang berisi kode sumber untuk file JAR yang dikompilasi di AAR.

koleksi_android

android_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 menjadi 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: Paket android 'aar' yang berisi arsip java dan resource target ini. Tidak berisi penutupan transitif.

Contoh

Contoh aturan Android dapat ditemukan di direktori examples/android dari hierarki sumber Bazel.

Contoh berikut menunjukkan cara menetapkan 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

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar library lain yang akan ditautkan. Jenis library yang diizinkan adalah: android_library, java_library dengan batasan android, dan cc_library menggabungkan atau membuat library native .so untuk platform target Android.
srcs

List of labels; optional

Daftar file .java atau .srcjar yang diproses untuk membuat target.

File srcs dari jenis .java dikompilasi. Demi keterbacaan, sebaiknya jangan gunakan nama file sumber .java yang dihasilkan ke srcs. Sebagai gantinya, masukkan nama aturan yang bergantung pada srcs, seperti yang dijelaskan di bawah ini.

File srcs jenis .srcjar diekstrak dan dikompilasi. (Ini berguna jika Anda perlu membuat kumpulan file .java dengan ekstensi genrule atau build.)

Jika srcs dihilangkan, semua dependensi yang ditentukan dalam deps akan diekspor dari aturan ini (lihat ekspor java_library's untuk informasi selengkapnya tentang mengekspor dependensi). Namun, perilaku ini tidak akan digunakan lagi dalam waktu dekat; jangan mengandalkan hal itu.

assets

List of labels; optional

Daftar aset yang akan dikemas. Ini biasanya adalah glob dari semua file pada direktori assets. Anda juga dapat mereferensikan aturan lain (aturan apa pun yang menghasilkan file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada dalam direktori assets_dir dalam paket yang sesuai.
assets_dir

String; optional

String yang memberikan jalur ke file dalam assets. Pasangan assets dan assets_dir mendeskripsikan aset terpaket dan kedua atribut tersebut harus diberikan atau tidak sama sekali.
custom_package

String; optional

Paket Java yang akan menghasilkan sumber Java. Secara default, paket disimpulkan dari direktori tempat file BUILD yang berisi aturan. Anda dapat menentukan paket yang berbeda, tetapi hal ini sangat tidak disarankan karena dapat menyebabkan konflik classpath dengan library lain yang hanya akan terdeteksi pada runtime.
enable_data_binding

Boolean; optional; default is False

Jika benar, aturan ini memproses ekspresi data binding dalam resource tata letak yang disertakan melalui atribut resource_files. Tanpa setelan ini, ekspresi data binding akan menghasilkan kegagalan build.

Untuk mem-build aplikasi Android dengan data binding, Anda juga harus melakukan hal-hal berikut:

  1. Tetapkan atribut ini untuk semua aturan Android yang secara transitif bergantung pada aturan ini. Hal ini karena dependensi bergantung pada ekspresi data binding aturan melalui penggabungan resource. Jadi, mereka juga perlu mem-build dengan data binding untuk mengurai ekspresi tersebut.
  2. Tambahkan entri deps = untuk library runtime data binding ke semua target yang menetapkan atribut ini. Lokasi library ini bergantung pada penyiapan depot Anda.
exported_plugins

List of labels; optional

Daftar java_plugin (misalnya pemroses anotasi) yang akan diekspor ke library yang bergantung langsung pada library ini.

Daftar java_plugin yang ditentukan akan diterapkan ke library apa pun yang secara langsung bergantung pada library ini, seolah-olah library tersebut telah secara eksplisit mendeklarasikan label ini dalam plugins.

exports

List of labels; optional

Penutupan semua aturan yang dicapai melalui atribut exports dianggap sebagai dependensi langsung dari aturan yang secara langsung bergantung pada target dengan exports.

exports bukanlah dependensi langsung dari aturan yang mencakupnya.

exports_manifest

Integer; optional; default is 1

Apakah mengekspor entri manifes ke target android_binary yang bergantung pada target ini atau tidak. Atribut uses-permissions tidak pernah diekspor.
idl_import_root

String; optional

Jalur relatif paket ke root pohon paket java yang berisi sumber idl yang disertakan dalam library ini.

Jalur ini akan digunakan sebagai root impor saat memproses sumber idl yang bergantung pada library ini.

Jika idl_import_root ditentukan, idl_parcelables dan idl_srcs harus berada di jalur yang ditetapkan oleh paket java objek yang diwakilinya dalam idl_import_root. Jika idl_import_root tidak ditentukan, idl_parcelables dan idl_srcs harus berada di jalur yang ditetapkan oleh paketnya pada root Java.

Lihat contoh.

idl_parcelables

List of labels; optional

Daftar definisi IDL Android yang disediakan sebagai impor. File ini akan tersedia sebagai impor untuk setiap target android_library yang bergantung pada library ini, secara langsung atau melalui penutupan transitifnya, tetapi tidak akan diterjemahkan ke Java atau dikompilasi.

Hanya file .aidl yang sesuai langsung dengan sumber .java dalam library ini yang harus disertakan (misalnya, penerapan kustom Parcelable), jika tidak, idl_srcs harus digunakan.

File ini harus ditempatkan dengan tepat agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mengetahui artinya.

idl_preprocessed

List of labels; optional

Daftar definisi IDL Android yang telah diproses sebelumnya untuk disediakan sebagai impor. File ini akan tersedia sebagai impor untuk setiap target android_library yang bergantung pada library ini, secara langsung atau melalui penutupan transitifnya, tetapi tidak akan diterjemahkan ke Java atau dikompilasi.

Hanya file .aidl yang telah diproses sebelumnya dan berkaitan langsung dengan sumber .java dalam library ini yang harus disertakan (misalnya, penerapan kustom Parcelable), jika tidak, gunakan idl_srcs untuk definisi IDL Android yang perlu diterjemahkan ke antarmuka Java dan gunakan idl_parcelable untuk file AIDL yang belum diproses sebelumnya.

idl_srcs

List of labels; optional

Daftar definisi IDL Android yang akan diterjemahkan ke antarmuka Java. Setelah dibuat, antarmuka Java akan dikompilasi bersama dengan konten srcs.

File ini akan tersedia sebagai impor untuk setiap target android_library yang bergantung pada library ini, secara langsung atau melalui penutupan transitifnya.

File ini harus ditempatkan dengan tepat agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mengetahui artinya.

javacopts

List of strings; optional

Opsi compiler tambahan untuk target ini. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

manifest

Label; optional

Nama file manifes Android, biasanya AndroidManifest.xml. Harus ditentukan jika resource_files atau aset ditentukan.

Boolean; optional; default is False

Hanya gunakan library ini untuk kompilasi, bukan saat runtime. Output dari aturan yang ditandai sebagai neverlink tidak akan digunakan dalam pembuatan .apk. Berguna jika library disediakan oleh lingkungan runtime selama eksekusi.
plugins

List of labels; optional

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan dalam atribut plugin akan dijalankan setiap kali target ini dibuat. Resource yang dihasilkan oleh plugin akan disertakan dalam jar hasil target.
proguard_specs

List of labels; optional

File yang akan digunakan sebagai spesifikasi Proguard. Ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, class tersebut akan ditambahkan ke target android_binary mana pun bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn, mengasumsikannosideEffect, dan aturan yang dimulai dengan -keep. Opsi lainnya hanya dapat muncul di proguard_spec android_binary untuk memastikan penggabungan non-otomatis.
resource_files

List of labels; optional

Daftar resource yang akan dikemas. Ini biasanya adalah glob dari semua file pada direktori res.
File yang dihasilkan (dari genrules) juga dapat direferensikan oleh Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada dalam direktori "res" yang sama dengan file resource lainnya yang disertakan.

android_instrumentation_test

android_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. Selanjutnya, android_binary ini menentukan aplikasi android_binary yang sedang diuji melalui atribut instrumennya.

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

Name; required

Nama unik untuk target ini.

support_apks

List of labels; optional

APK lain yang akan diinstal pada perangkat sebelum uji instrumentasi dimulai.
target_device

Label; required

android_device yang akan menjalankan pengujian.

Untuk menjalankan pengujian pada emulator yang sudah berjalan atau di perangkat fisik, gunakan argumen berikut: --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

test_app

Label; required

Target android_binary yang berisi class pengujian. Target android_binary harus menentukan target mana yang diuji melalui atribut instruments-nya.

android_local_test

android_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 menguji unit aturan android_library secara lokal (bukan pada perangkat). Hal ini berfungsi dengan framework pengujian Robolectric Android. Lihat situs Android Robolectric untuk detail tentang cara menulis pengujian Robolectric.

Target output implisit

  • name.jar: Arsip Java pengujian.
  • name-src.jar: Arsip yang berisi sumber ("jar jar").
  • name_deploy.jar: Arsip deployment Java yang cocok untuk di-deploy (hanya di-build jika diminta secara eksplisit).

Contoh

Untuk menggunakan Robolectric dengan android_local_test, tambahkan repositori Robolectric untuk file WORKSPACE:

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
Tindakan ini akan mengambil aturan maven_jar yang diperlukan untuk Robolectric. Kemudian, setiap aturan android_local_test harus bergantung pada @robolectric//bazel:robolectric. Lihat contohnya di bawah.

android_local_test(
    name = "SampleTest",
    srcs = [
        "SampleTest.java",
    ],
    manifest = "LibManifest.xml",
    deps = [
        ":sample_test_lib",
        "@robolectric//bazel:robolectric",
    ],
)

android_library(
    name = "sample_test_lib",
    srcs = [
         "Lib.java",
    ],
    resource_files = glob(["res/**"]),
    manifest = "AndroidManifest.xml",
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar library yang akan diuji serta library tambahan yang akan ditautkan ke target. Semua resource, aset, dan file manifes yang dideklarasikan dalam aturan Android dalam penutupan transitif atribut ini tersedia dalam pengujian.

Daftar aturan yang diizinkan di deps adalah android_library, aar_import, java_import, java_library, dan java_lite_proto_library.

srcs

List of labels; optional

Daftar file sumber yang diproses untuk membuat target. Wajib, kecuali dalam kasus khusus yang dijelaskan di bawah.

File srcs dari jenis .java dikompilasi. Demi keterbacaan, sebaiknya jangan gunakan nama file sumber .java yang dihasilkan ke srcs. Sebagai gantinya, masukkan nama aturan yang bergantung pada srcs, seperti yang dijelaskan di bawah ini.

File srcs jenis .srcjar diekstrak dan dikompilasi. (Ini berguna jika Anda perlu membuat kumpulan file .java dengan ekstensi genrule atau build.)

Semua file lainnya akan diabaikan, asalkan ada setidaknya satu file dari jenis file yang dijelaskan di atas. Jika tidak, akan terjadi error.

Atribut srcs wajib diisi dan tidak boleh kosong, kecuali jika runtime_deps ditentukan.

custom_package

String; optional

Paket Java tempat class R akan dihasilkan. Secara default, paket diambil dari direktori tempat file BUILD yang berisi aturan tersebut. Jika menggunakan atribut ini, Anda mungkin juga perlu menggunakan test_class.
densities

List of strings; optional

Kepadatan yang akan difilter saat mem-build apk. Bagian layar kompatibel yang sesuai juga akan ditambahkan ke manifes jika belum berisi superset StarlarkListing.
enable_data_binding

Boolean; optional; default is False

Jika benar, aturan ini memproses referensi data binding yang digunakan dalam dependensi yang diaktifkan data binding yang digunakan oleh pengujian ini. Tanpa setelan ini, dependensi data-binding tidak akan memiliki pembuatan kode tingkat biner yang diperlukan, dan dapat menghasilkan kegagalan build.
javacopts

List of strings; optional

Opsi compiler tambahan untuk library ini. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

List of strings; optional

Daftar flag untuk disematkan dalam skrip wrapper yang dihasilkan untuk menjalankan biner ini. Tunduk pada substitusi $(location) dan "Make variabel", serta tokenisasi shell Bourne.

Skrip wrapper untuk biner Java mencakup definisi CLASSPATH (untuk menemukan semua jar yang bergantung) dan memanggil penafsir Java yang tepat. Command line yang dihasilkan oleh skrip wrapper menyertakan nama class utama yang diikuti dengan "$@" sehingga Anda dapat meneruskan argumen lain setelah nama class. Namun, argumen yang dimaksudkan untuk mengurai oleh JVM harus ditetapkan sebelum nama class pada command line. Konten jvm_flags ditambahkan ke skrip wrapper sebelum nama class dicantumkan.

Perhatikan bahwa atribut ini tidak berpengaruh pada output *_deploy.jar.

manifest

Label; optional

Nama file manifes Android, biasanya AndroidManifest.xml. Harus ditentukan jika resource_files atau aset ditentukan atau jika salah satu manifes dari library yang sedang diuji memiliki tag minSdkVersion di dalamnya.
manifest_values

Dictionary: String -> String; optional

Kamus nilai yang akan diganti dalam manifes. Setiap instance ${name} dalam manifes akan diganti dengan nilai yang sesuai dengan nama dalam kamus. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion, dan maxSdkVersion juga akan mengganti atribut yang sesuai dari tag manifes dan tag use-sdk. packageName akan diabaikan dan akan ditetapkan dari applicationId jika ditentukan atau paket dalam manifes. Anda tidak perlu memiliki manifes pada aturan untuk menggunakan manifest_values.
nocompress_extensions

List of strings; optional

Daftar ekstensi file agar tidak dikompresi di apk resource.
plugins

List of labels; optional

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan dalam atribut ini akan dijalankan setiap kali aturan ini dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakan exported_plugins. Resource yang dihasilkan oleh plugin akan disertakan dalam jar yang dihasilkan dari aturan ini.
resource_configuration_filters

List of strings; optional

Daftar filter konfigurasi resource, seperti 'en' yang akan membatasi resource di apk hanya untuk resource di konfigurasi 'en'.
resource_jars

List of labels; optional

Tidak digunakan lagi: Sebagai gantinya, gunakan java_import dan dependensi atau runtime_deps.
resource_strip_prefix

String; optional

Awalan jalur untuk strip dari resource Java.

Jika ditentukan, awalan jalur ini akan dihilangkan dari setiap file dalam atribut resources. Terdapat kesalahan pada file resource yang tidak berada dalam direktori ini. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai logika yang sama dengan paket Java file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan ditempatkan di foo/bar/a.txt.

runtime_deps

List of labels; optional

Library harus disediakan untuk biner akhir atau pengujian hanya pada waktu proses. Seperti deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti pada classpath, bukan di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus dicantumkan di sini. Alat analisis dependensi harus mengabaikan target yang muncul di runtime_deps dan deps.
stamp

Integer; optional; default is 0

Apakah akan mengenkode informasi build ke dalam biner. Nilai yang memungkinkan:
  • stamp = 1: Selalu cap informasi build ke dalam biner, bahkan dalam build --nostamp. Setelan ini harus dihindari, karena berpotensi menghentikan caching jarak jauh untuk biner dan tindakan downstream yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstan. Hal ini memberikan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh flag --[no]stamp.

Biner yang dicap tidak akan dibuat ulang kecuali jika dependensinya berubah.

test_class

String; optional

Class Java yang akan dimuat oleh runner pengujian.

Atribut ini menentukan nama class Java yang akan dijalankan oleh pengujian ini. Hal ini jarang perlu ditetapkan. Jika argumen ini dihilangkan, class Java yang namanya sesuai dengan name aturan android_local_test akan digunakan. Class pengujian harus dianotasi dengan org.junit.runner.RunWith.

use_launcher

Boolean; optional; default is True

Apakah biner harus menggunakan peluncur khusus.

Jika atribut ini ditetapkan ke false, atribut peluncur dan tanda --java_launcher terkait akan diabaikan untuk target ini.

perangkat_android

android_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 tertentu. Emulator ini dapat dimulai melalui perintah bazel run atau dengan menjalankan skrip yang dihasilkan secara langsung. Sebaiknya Anda bergantung pada aturan android_device yang sudah ada, bukan menetapkan aturan Anda sendiri.

Aturan ini adalah target yang cocok untuk pengujian --run_under ke pengujian bazel dan blaze. Emulator akan memulai emulator, menyalin target yang sedang diuji/dijalankan ke emulator, dan mengujinya atau menjalankannya sebagaimana mestinya.

android_device mendukung pembuatan image KVM jika system_image yang mendasarinya berbasis X86 dan dioptimalkan untuk sebagian besar arsitektur CPU I686. Untuk menggunakan KVM, tambahkan tags = ['requires-kvm'] ke aturan android_device.

Target output implisit

  • name_images/userdata.dat: Berisi file gambar dan snapshot untuk memulai emulator
  • name_images/emulator-meta-data.pb: Berisi informasi serial yang diperlukan untuk diteruskan ke emulator untuk memulai 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 ingin mengeluarkan perintah adb ke emulator, ini adalah port tempat Anda perlu meluncurkan adb terhubung.
  • --emulator_port: Port untuk mengekspos konsol pengelolaan telnet emulator.
  • --enable_display: Memulai emulator dengan tampilan jika benar (default ke false).
  • --action: Start atau kill.
  • --apks_to_install: daftar apk yang akan diinstal pada emulator.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

cache

Integer; required

Ukuran partisi cache dalam megabyte. Nilai minimumnya adalah 16 megabyte.
default_properties

Label; optional

File properti tunggal untuk ditempatkan di /default.prop pada emulator. Hal ini memungkinkan penulis aturan mengonfigurasi emulator lebih lanjut agar tampak lebih mirip dengan perangkat sungguhan (khususnya mengontrol string UserAgent-nya dan perilaku lain yang mungkin menyebabkan aplikasi atau server berperilaku berbeda terhadap perangkat tertentu). Properti dalam file ini akan mengganti properti hanya baca yang biasanya disetel oleh emulator seperti ro.product.model.
horizontal_resolution

Integer; required

Resolusi layar horizontal dalam piksel yang akan diemulasikan. Nilai minimumnya adalah 240.
platform_apks

List of labels; optional

Daftar apk yang akan diinstal pada perangkat saat booting.
ram

Integer; required

Jumlah ram dalam megabyte untuk diemulasikan untuk perangkat. Ini untuk seluruh perangkat, bukan hanya untuk aplikasi tertentu yang diinstal di perangkat. Nilai minimumnya adalah 64 megabyte.
screen_density

Integer; required

Kepadatan layar teremulasi dalam piksel per inci. Nilai minimumnya adalah 30 ppi.
system_image

Label; required

Grup file yang berisi file berikut:
  • system.img: Partisi sistem
  • kernel-qemu: Kernel Linux yang akan dimuat emulator
  • ramdisk.img: Gambar init untuk digunakan pada waktu booting
  • userdata.img: Partisi data pengguna awal
  • source.properties: File properti yang berisi informasi tentang gambar
File ini adalah bagian dari Android SDK atau disediakan oleh pihak ketiga (misalnya, Intel menyediakan image x86).
vertical_resolution

Integer; required

Resolusi layar vertikal dalam piksel yang akan diemulasikan. Nilai minimumnya adalah 240.
vm_heap

Integer; required

Ukuran heap mesin virtual yang digunakan Android dalam megabyte untuk setiap proses. Nilai minimumnya adalah 16 megabyte.

repositori_android_ndk

android_ndk_repository(name, api_level, path, repo_mapping)

Mengonfigurasi Bazel untuk menggunakan Android NDK guna mendukung pembuatan target Android dengan kode native.

Perhatikan bahwa pembuatan build untuk Android juga memerlukan aturan android_sdk_repository di file WORKSPACE.

Untuk 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 API level tertinggi yang didukungnya.

android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)

Contoh di atas akan menggunakan Android NDK yang terletak di dalam ruang kerja Anda di ./android-ndk-r20. Ini akan menggunakan library API level 24 saat mengompilasi kode JNI Anda.

fitur cpu

Android NDK berisi library cpufeatures yang dapat digunakan untuk mendeteksi CPU perangkat pada waktu proses. 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

Name; required

Nama unik untuk target ini.

api_level

Integer; optional; nonconfigurable; default is 0

API level Android yang akan di-build. Jika tidak ditentukan, API level tertinggi yang diinstal akan digunakan.
path

String; optional; nonconfigurable

Jalur absolut atau relatif ke Android NDK. Atribut ini atau variabel lingkungan $ANDROID_NDK_HOME harus ditetapkan.

Android NDK dapat didownload dari situs developer Android .

repo_mapping

Dictionary: String -> String; optional

Kamus dari nama repositori lokal ke nama repositori global. Hal ini memungkinkan kontrol atas resolusi dependensi ruang kerja untuk dependensi repositori ini.

Misalnya, entri "@foo": "@bar" mendeklarasikan bahwa, setiap kali repositori ini bergantung pada "@foo" (seperti dependensi pada "@foo//some:target"), repositori tersebut harus benar-benar mengatasi dependensi tersebut dalam "@bar" yang dideklarasikan secara global ("@bar//some:target").

android_sdk_repository

android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

Mengonfigurasi Bazel untuk menggunakan Android SDK lokal guna mendukung pembuatan target Android.

Contoh

Minimum untuk menyiapkan Android SDK untuk Bazel adalah memasukkan aturan android_sdk_repository dengan nama "androidsdk" dalam file WORKSPACE dan menetapkan variabel lingkungan $ANDROID_HOME ke jalur Android SDK Anda. Bazel akan menggunakan API level Android tertinggi dan versi alat build 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 dicentang ke dalam kontrol versi).

Library Dukungan

Support Library tersedia di Android SDK Manager sebagai "Android Support Repository". Ini adalah serangkaian library Android umum dengan versi, seperti library Dukungan 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 bagaimana android_library dapat bergantung pada versi 25.0.0 library 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"],
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

api_level

Integer; optional; nonconfigurable; default is 0

API level Android yang akan digunakan untuk mem-build secara default. Jika tidak ditentukan, API level tertinggi yang diinstal akan digunakan.

API level yang digunakan untuk build tertentu dapat diganti dengan flag android_sdk. android_sdk_repository membuat target android_sdk untuk setiap API level yang diinstal di SDK dengan nama @androidsdk//:sdk-${level}, terlepas dari apakah atribut ini ditentukan atau tidak. Misalnya, untuk membuat build dengan API level non-default: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

Untuk melihat semua target android_sdk yang dihasilkan oleh android_sdk_repository , Anda dapat menjalankan bazel query "kind(android_sdk, @androidsdk//...)".

build_tools_version

String; optional; nonconfigurable

Versi alat build Android yang akan digunakan dari dalam Android SDK. Jika tidak ditentukan, versi alat build terbaru yang diinstal akan digunakan.

Bazel memerlukan alat build versi 30.0.0 atau yang lebih baru.

path

String; optional; nonconfigurable

Jalur absolut atau relatif ke Android SDK. Atribut ini atau variabel lingkungan $ANDROID_HOME harus ditetapkan.

Android SDK dapat didownload dari situs developer Android.

repo_mapping

Dictionary: String -> String; optional

Kamus dari nama repositori lokal ke nama repositori global. Hal ini memungkinkan kontrol atas resolusi dependensi ruang kerja untuk dependensi repositori ini.

Misalnya, entri "@foo": "@bar" mendeklarasikan bahwa, setiap kali repositori ini bergantung pada "@foo" (seperti dependensi pada "@foo//some:target"), repositori tersebut harus benar-benar mengatasi dependensi tersebut dalam "@bar" yang dideklarasikan secara global ("@bar//some:target").