Aturan Android

Aturan

android_binary

Lihat sumber aturan
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 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 []

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

Daftar label; defaultnya adalah []

Daftar file sumber yang diproses untuk membuat target.

File srcs berjenis .java dikompilasi. Demi keterbacaan, sebaiknya jangan memasukkan nama file sumber .java yang dibuat ke dalam srcs. Sebagai gantinya, masukkan nama aturan yang bergantung di srcs, seperti yang dijelaskan di bawah.

File srcs berjenis .srcjar akan diekstrak dan dikompilasi. (Hal ini berguna jika Anda perlu membuat serangkaian file .java dengan ekstensi genrule atau build.)

assets

Daftar label; defaultnya adalah []

Daftar aset yang akan dikemas. Ini biasanya merupakan glob dari semua file di 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 di direktori assets_dir dalam paket yang sesuai.
assets_dir

String; default-nya adalah ""

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

Boolean; defaultnya adalah True

Lakukan pemrosesan PNG (atau tidak). Hal ini terlepas dari pemrosesan sembilan petak, yang selalu dilakukan. Ini adalah solusi yang tidak digunakan lagi untuk bug aapt yang telah diperbaiki di aapt2.
custom_package

String; default-nya adalah ""

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

Label; defaultnya adalah "@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, jadi atribut ini harus dihilangkan.

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 []

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

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 None

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

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

densities

Daftar string; defaultnya adalah []

Kepadatan yang akan difilter saat membuat APK. Tindakan ini akan menghapus resource drawable raster yang tidak akan dimuat oleh perangkat dengan kepadatan layar yang ditentukan, untuk mengurangi ukuran APK. Bagian layar yang kompatibel yang sesuai juga akan ditambahkan ke manifes jika belum berisi daftar supersets.
dex_shards

Bilangan bulat; defaultnya adalah 1

Jumlah shard yang harus didekomposisi dexing. Hal ini membuat dexing jauh lebih cepat dengan mengorbankan waktu penginstalan dan waktu mulai aplikasi. Semakin besar biner, semakin banyak shard yang harus digunakan. 25 adalah nilai yang tepat untuk mulai bereksperimen.

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 []

Tanda command line tambahan untuk alat dx saat membuat classes.dex. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.
enable_data_binding

Boolean; defaultnya adalah False

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

Untuk membuat aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:

  1. Tetapkan atribut ini untuk semua aturan Android yang bergantung secara transitif pada aturan ini. Hal ini karena dependensi mewarisi ekspresi pengikatan data aturan melalui penggabungan resource. Jadi, mereka juga perlu membuat dengan binding data 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

Bilangan bulat; tidak dapat dikonfigurasi; defaultnya adalah -1

Memaksa target untuk dibangun dengan atau tanpa dexing inkremental, menggantikan default dan tanda --incremental_dexing.
instruments

Label; defaultnya adalah None

Target android_binary yang akan diukur.

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

javacopts

Daftar string; defaultnya adalah []

Opsi compiler tambahan untuk target ini. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

key_rotation_min_sdk

String; default-nya adalah ""

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

Label; defaultnya adalah None

File teks berisi daftar nama file class. Class yang ditentukan oleh file class tersebut ditempatkan di classes.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

Daftar string; defaultnya adalah []

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

Daftar label; defaultnya adalah []

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

Label; wajib

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

Dictionary: String -> String; default-nya adalah {}

Kamus nilai yang akan diganti dalam manifes.

Semua instance ${name} dalam manifes akan diganti dengan nilai yang sesuai dengan nama dalam kamus ini.

applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion, dan maxSdkVersion juga akan menggantikan atribut yang sesuai dalam tag manifes dan uses-sdk.

packageName akan diabaikan dan akan ditetapkan dari applicationId jika ditentukan atau paket dalam manifes.

Jika manifest_merger disetel ke legacy, hanya applicationId, versionCode, dan versionName yang akan berpengaruh.

multidex

String; default-nya adalah "native"

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

Daftar string; defaultnya adalah []

Daftar ekstensi file yang tidak dikompresi dalam APK.
package_id

Bilangan bulat; defaultnya adalah 0

ID paket yang akan ditetapkan ke resource dalam biner ini.

Lihat argumen --package-id AAPT2 untuk mengetahui informasi selengkapnya. Biasanya, parameter ini dapat (dan harus) dibiarkan tidak ditetapkan, sehingga menghasilkan nilai default 127 (0x7F).

plugins

Daftar label; defaultnya adalah []

Plugin compiler Java yang akan dijalankan pada waktu kompilasi. Setiap java_plugin yang 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 None

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

Label; defaultnya adalah None

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

Boolean; tidak dapat dikonfigurasi; defaultnya adalah 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 kolom asli dan yang di-obfuscate.

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

proguard_specs

Daftar label; defaultnya adalah []

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

Daftar string; defaultnya adalah []

Daftar filter konfigurasi resource, seperti 'en' yang akan membatasi resource dalam APK hanya untuk yang ada dalam konfigurasi 'en'. Untuk mengaktifkan pseudolokalitas, sertakan pseudolokal en_XA dan/atau ar_XB.
resource_files

Daftar label; defaultnya adalah []

Daftar resource yang akan dikemas. Ini biasanya merupakan glob dari semua file di direktori res.
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 -1

Apakah akan melakukan penyingkatan resource atau tidak. Resource yang tidak digunakan oleh biner akan dihapus dari APK. Hal ini hanya didukung untuk aturan yang menggunakan resource lokal (yaitu atribut manifest dan resource_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:

  • 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 penyingkatan resource diaktifkan, name_files/resource_shrinker.log juga akan dibuat, yang menjelaskan analisis dan penghapusan yang dilakukan.

Kemungkinan nilai:

  • shrink_resources = 1: Mengaktifkan pengecilan resource Android
  • shrink_resources = 0: Menonaktifkan pengecilan resource Android
  • shrink_resources = -1: Penciutan dikontrol oleh --android_resource_shrinking.

aar_import

Lihat sumber aturan
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 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; wajib

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

Daftar label; defaultnya adalah []

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

Label; defaultnya adalah None

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

android_library

Lihat sumber aturan
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 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 []

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

Daftar label; defaultnya adalah []

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

File srcs berjenis .java dikompilasi. Demi keterbacaan, sebaiknya jangan memasukkan nama file sumber .java yang dibuat ke dalam srcs. Sebagai gantinya, masukkan nama aturan yang bergantung di srcs, seperti yang dijelaskan di bawah.

File srcs berjenis .srcjar akan diekstrak dan dikompilasi. (Hal ini berguna jika Anda perlu membuat serangkaian 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 untuk mengetahui informasi selengkapnya tentang cara mengekspor dependensi). Namun, perilaku ini akan segera dihentikan; sebaiknya jangan mengandalkannya.

assets

Daftar label; defaultnya adalah []

Daftar aset yang akan dikemas. Ini biasanya merupakan glob dari semua file di 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 di direktori assets_dir dalam paket yang sesuai.
assets_dir

String; default-nya adalah ""

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

String; default-nya adalah ""

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

Boolean; defaultnya adalah False

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

Untuk membuat aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:

  1. Tetapkan atribut ini untuk semua aturan Android yang bergantung secara transitif pada aturan ini. Hal ini karena dependensi mewarisi ekspresi pengikatan data aturan melalui penggabungan resource. Jadi, mereka juga perlu membuat dengan binding data 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

Daftar label; defaultnya adalah []

Daftar java_plugins (misalnya, pemroses anotasi) untuk diekspor ke library yang bergantung langsung pada library ini.

Daftar java_plugin yang ditentukan akan diterapkan ke library apa pun yang bergantung langsung pada library ini, sama seperti jika library tersebut telah secara eksplisit mendeklarasikan label ini di plugins.

exports

Daftar label; defaultnya adalah []

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

exports bukan merupakan dependensi langsung dari aturan yang menjadi miliknya.

exports_manifest

Bilangan bulat; defaultnya adalah 1

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

String; default-nya adalah ""

Jalur relatif paket ke root hierarki 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 ditentukan oleh paket java objek yang diwakilinya di idl_import_root. Jika idl_import_root tidak ditentukan, idl_parcelables dan idl_srcs harus berada di jalur yang ditentukan oleh paketnya di bawah root Java.

Lihat contoh.

idl_parcelables

Daftar label; defaultnya adalah []

Daftar definisi IDL Android yang akan disediakan sebagai impor. File ini akan tersedia sebagai impor untuk 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 di library ini yang harus disertakan (misalnya, penerapan Parcelable kustom), jika tidak, idl_srcs harus digunakan.

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 []

Daftar definisi IDL Android yang telah diproses sebelumnya untuk disediakan sebagai impor. File ini akan tersedia sebagai impor untuk 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 yang sesuai langsung dengan sumber .java di library ini yang harus disertakan (misalnya, implementasi Parcelable kustom), 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

Daftar label; defaultnya adalah []

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

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

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 tambahan untuk target ini. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

manifest

Label; defaultnya adalah None

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

Boolean; defaultnya adalah False

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

Daftar label; defaultnya adalah []

Plugin compiler Java yang akan dijalankan pada waktu kompilasi. Setiap java_plugin yang 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 []

File yang akan digunakan sebagai spesifikasi Proguard. Setelan ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, target tersebut akan ditambahkan ke target android_binary mana 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_specs android_binary, untuk memastikan penggabungan non-tautologi.
resource_files

Daftar label; defaultnya adalah []

Daftar resource yang akan dikemas. Ini biasanya merupakan glob dari semua file di direktori res.
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 aturan
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. 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 []

APK lain yang akan diinstal di perangkat sebelum pengujian instrumentasi dimulai.
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_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

test_app

Label; wajib

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

android_local_test

Lihat sumber aturan
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 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()
Tindakan ini akan menarik aturan 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 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

Daftar label; defaultnya adalah []

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

File srcs berjenis .java dikompilasi. Demi keterbacaan, sebaiknya jangan memasukkan nama file sumber .java yang dibuat ke dalam srcs. Sebagai gantinya, masukkan nama aturan yang bergantung di srcs, seperti yang dijelaskan di bawah.

File srcs berjenis .srcjar akan diekstrak dan dikompilasi. (Hal ini berguna jika Anda perlu membuat serangkaian file .java dengan ekstensi genrule atau build.)

Semua file lain akan diabaikan, selama ada setidaknya satu file dengan jenis file yang dijelaskan di atas. Jika tidak, error akan muncul.

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

custom_package

String; default-nya adalah ""

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

Daftar string; defaultnya adalah []

Kepadatan yang akan difilter saat membuat APK. Bagian compatible-screens yang sesuai juga akan ditambahkan ke manifes jika belum berisi StarlarkListing superset.
enable_data_binding

Boolean; defaultnya adalah False

Jika benar (true), aturan ini memproses referensi pengikatan datayang digunakan dalam dependensi yang mendukung pengikatan data yang digunakan oleh pengujian ini. Tanpa setelan ini, dependensi pengikatan data tidak akan memiliki pembuatan kode tingkat biner yang diperlukan, dan dapat menyebabkan kegagalan build.
javacopts

Daftar string; defaultnya adalah []

Opsi compiler tambahan untuk library ini. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar string; defaultnya adalah []

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

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 "$@" sehingga Anda dapat meneruskan argumen lain setelah nama class. Namun, argumen yang ditujukan untuk parsing oleh JVM harus ditentukan sebelum nama class di 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; defaultnya adalah None

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; default-nya adalah {}

Kamus nilai yang akan diganti dalam manifes. Setiap instance ${name} dalam manifes akan diganti dengan nilai yang sesuai dengan nama dalam kamus ini. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion, dan maxSdkVersion juga akan mengganti atribut yang sesuai dari tag manifes dan uses-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

Daftar string; defaultnya adalah []

Daftar ekstensi file yang tidak dikompresi dalam APK resource.
plugins

Daftar label; defaultnya adalah []

Plugin compiler Java yang akan 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

Daftar string; defaultnya adalah []

Daftar filter konfigurasi resource, seperti 'en' yang akan membatasi resource dalam APK hanya pada yang ada dalam konfigurasi 'en'.
resource_jars

Daftar label; defaultnya adalah []

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

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. File resource yang tidak berada di direktori ini adalah error. Jika tidak ditentukan (default), jalur file resource ditentukan menurut logika yang sama dengan paket Java untuk file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berada di foo/bar/a.txt.

runtime_deps

Daftar label; defaultnya adalah []

Library yang hanya tersedia untuk biner atau pengujian akhir saat runtime. Seperti deps biasa, file ini akan muncul di classpath runtime, tetapi tidak seperti file tersebut, file ini tidak muncul 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

Bilangan bulat; defaultnya adalah 0

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

Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah.

test_class

String; default-nya adalah ""

Class Java yang akan dimuat oleh test runner.

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 name dari aturan android_local_test ini akan digunakan. Class pengujian harus diberi anotasi dengan org.junit.runner.RunWith.

use_launcher

Boolean; defaultnya adalah True

Apakah biner harus menggunakan peluncur kustom.

Jika atribut ini disetel ke salah (false), atribut peluncur dan tanda --java_launcher terkait akan diabaikan untuk target ini.

android_device

Lihat sumber aturan
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 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; wajib

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

Label; defaultnya adalah None

Satu file properti yang akan ditempatkan di /default.prop pada emulator. Hal ini memungkinkan penulis aturan mengonfigurasi emulator lebih lanjut agar terlihat lebih seperti perangkat sungguhan (khususnya mengontrol string UserAgent dan perilaku lain yang dapat menyebabkan aplikasi atau server berperilaku berbeda dengan perangkat tertentu). Properti dalam file ini akan menggantikan properti hanya baca yang biasanya ditetapkan oleh emulator seperti ro.product.model.
horizontal_resolution

Bilangan bulat; wajib

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

Daftar label; defaultnya adalah []

Daftar APK yang akan diinstal di perangkat saat waktu booting.
ram

Bilangan bulat; wajib

Jumlah 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; wajib

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

Label; wajib

Grup file yang berisi file berikut:
  • system.img: Partisi sistem
  • kernel-qemu: Kernel Linux yang akan dimuat emulator
  • ramdisk.img: Image initrd yang akan digunakan saat waktu booting
  • userdata.img: Partisi userdata 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

Bilangan bulat; wajib

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

Bilangan bulat; wajib

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

android_ndk_repository

Lihat sumber aturan
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 penerapan android_ndk_repository ini digantikan oleh penerapan di Starlark. Dukungan untuk NDK versi mendatang, termasuk versi 25 dan yang lebih tinggi, akan diimplementasikan dalam 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; defaultnya adalah 0

Level API Android yang akan digunakan untuk membangun. Jika tidak ditentukan, level API tertinggi yang diinstal akan digunakan.
path

String; tidak dapat dikonfigurasi; defaultnya adalah ""

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; default-nya adalah {}

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

Misalnya, entri "@foo": "@bar" menyatakan bahwa, untuk setiap waktu saat repositori ini bergantung pada "@foo" (seperti dependensi pada "@foo//some:target"), repositori tersebut harus menyelesaikan dependensi tersebut dalam "@bar" ("@bar//some:target") yang dideklarasikan secara global.

android_sdk_repository

Lihat sumber aturan
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

Persyaratan minimum untuk menyiapkan Android SDK untuk Bazel adalah menempatkan aturan android_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 versi alat build atau level API 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; defaultnya adalah 0

Level API Android yang akan digunakan untuk membangun secara default. Jika tidak ditentukan, level API tertinggi yang diinstal akan digunakan.

Level API yang digunakan untuk build tertentu dapat diganti dengan tanda android_sdk. android_sdk_repository membuat target android_sdk untuk setiap level API yang diinstal di SDK dengan nama @androidsdk//:sdk-${level}, terlepas dari apakah atribut ini ditentukan atau tidak. Misalnya, untuk membuat terhadap level API 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; tidak dapat dikonfigurasi; defaultnya adalah ""

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; tidak dapat dikonfigurasi; defaultnya adalah ""

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; default-nya adalah {}

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

Misalnya, entri "@foo": "@bar" menyatakan bahwa, untuk setiap waktu saat repositori ini bergantung pada "@foo" (seperti dependensi pada "@foo//some:target"), repositori tersebut harus menyelesaikan dependensi tersebut dalam "@bar" ("@bar//some:target") yang dideklarasikan secara global.