Aturan Android

Laporkan masalah Lihat sumber Malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

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: Aplikasi Android file paket yang ditandatangani dengan kunci {i>debug<i} dan zipaligned, dapat digunakan untuk mengembangkan dan men-debug aplikasi Anda. Anda tidak dapat merilis aplikasi jika ditandatangani dengan kunci debug.
  • name_unsigned.apk: Versi yang tidak ditandatangani di atas yang dapat ditandatangani dengan kunci rilis sebelum rilis ke oleh orang-orang.
  • name_deploy.jar: Arsip Java yang berisi penutupan transitif dari target ini.

    Jar 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 dari menjalankan ProGuard pada name_deploy.jar. Output ini hanya dihasilkan jika Atribut proguard_specs saat ini adalah yang ditentukan.
  • name_proguard.map: Hasil file pemetaan dari menjalankan ProGuard pada name_deploy.jar. Output ini hanya dihasilkan jika Atribut proguard_specs saat ini adalah dan proguard_generate_mapping atau shrink_resources.

Contoh

Contoh aturan Android dapat ditemukan di direktori examples/android pada Hierarki sumber Bazel.

Argumen

Atribut
name

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; default 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 menggabungkan atau menghasilkan library native .so untuk Platform target Android.
srcs

Daftar label; default adalah []

Daftar file sumber yang diproses untuk membuat target.

srcs file dengan jenis .java dikompilasi. Demi keterbacaan, tidak baik menyebutkan nama file sumber .java yang dihasilkan ke srcs. Sebagai gantinya, masukkan nama aturan yang bergantung pada srcs, sebagai seperti yang dijelaskan di bawah ini.

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

assets

Daftar label; default adalah []

Daftar aset yang akan dikemas. Biasanya ini adalah glob dari semua file dalam Direktori assets. Anda juga dapat merujuk pada aturan lain (aturan apa pun yang menghasilkan file) atau file yang diekspor dalam paket lainnya, selama semua file tersebut berada di bawah Direktori assets_dir dalam paket yang sesuai.
assets_dir

String; default-nya adalah ""

String yang memberikan jalur ke file di assets. Pasangan assets dan assets_dir mendeskripsikan paket aset dan salah satu dari kedua atribut tersebut harus disediakan atau tidak sama sekali.
crunch_png

Boolean; default-nya adalah True

Melakukan pemrosesan PNG (atau tidak). Ini tidak bergantung pada pemrosesan nine-patch, yang selalu selesai. Ini adalah solusi yang tidak digunakan lagi untuk bug aapt yang berisi telah diperbaiki di aapt2.
custom_package

String; default-nya adalah ""

Paket Java yang akan dibuatkan sumber java. Secara {i>default<i}, paket disimpulkan dari direktori tempat file BUILD yang berisi aturan tersebut. Anda dapat menentukan paket yang berbeda tetapi ini sangat tidak disarankan karena dapat menimbulkan konflik classpath dengan yang hanya akan terdeteksi saat runtime.
debug_key

Label; default adalah "@bazel_tools//tools/android:debug_keystore"

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

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

debug_signing_keys

Daftar label; default adalah []

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

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

debug_signing_lineage_file

Label; default adalah None

File yang berisi silsilah penandatanganan untuk debug_signed_keys. Biasanya tidak ingin menggunakan kunci selain kunci {i>default<i}, sehingga atribut ini harus dihilangkan.

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

densities

Daftar {i>string<i}; default-nya adalah []

Kepadatan yang akan difilter saat membangun apk. Ini akan menghapus sumber daya drawable raster yang tidak dimuat oleh perangkat dengan kepadatan layar yang ditentukan, untuk mengurangi ukuran APK. Layar yang kompatibel juga akan ditambahkan ke manifes jika belum berisi superset listingan.
dex_shards

{i>Integer<i} (Bilangan bulat): default-nya adalah 1

Jumlah sharding yang harus diuraikan menjadi dexing. Hal ini membuat dexing jauh lebih cepat dengan mengorbankan penginstalan aplikasi dan waktu startup. Tujuan semakin besar biner, maka semakin banyak sharding yang harus digunakan. Nilai 25 adalah nilai yang baik untuk memulai untuk bereksperimen.

Perhatikan bahwa setiap shard akan menghasilkan setidaknya satu dex di aplikasi akhir. Karena alasan ini, menyetelnya dengan lebih dari 1 tidak disarankan untuk biner rilis.

dexopts

Daftar {i>string<i}; default-nya adalah []

Flag command line tambahan untuk alat dx saat menghasilkan classroom.dex. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.
enable_data_binding

Boolean; default-nya adalah False

Jika true (benar), aturan ini akan memproses data binding dalam resource tata letak disertakan melalui resource_files. Tanpa ini , ekspresi data binding akan menghasilkan kegagalan build.

Untuk membangun 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 data binding aturan melalui resource penggabungan. Jadi mereka juga perlu membangun dengan data binding untuk mengurai ekspresi tersebut.
  2. Menambahkan entri deps = untuk library runtime data binding ke semua target yang menetapkan atribut ini. Lokasi library ini bergantung pada penyiapan depot Anda.
incremental_dexing

{i>Integer<i} (Bilangan bulat): tidak dapat dikonfigurasi; default adalah -1

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

Label; default adalah None

Target android_binary yang akan diinstrumentasikan.

Jika atribut ini ditetapkan, android_binary ini akan diperlakukan sebagai pengujian aplikasi untuk uji instrumentasi. android_instrumentation_test maka target tersebut dapat menentukan target ini test_app.

javacopts

Daftar {i>string<i}; default-nya adalah []

Opsi compiler tambahan untuk target ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

key_rotation_min_sdk

String; default-nya adalah ""

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

Label; default adalah None

File teks berisi daftar nama file class. Kelas yang ditentukan oleh file kelas tersebut dimasukkan ke dalam class primer.dex. e.g.:
          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 {i>string<i}; default-nya adalah []

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

Daftar label; default adalah []

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

Label; wajib diisi

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

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

Kamus nilai yang harus diganti dalam manifes.

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

applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion, dan maxSdkVersion juga akan mengganti atribut terkait dalam manifes dan uses-sdk.

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

Jika manifest_merger disetel ke legacy, hanya applicationId, versionCode, dan versionName akan apa pun dampaknya.

multidex

String; default-nya adalah "native"

Menentukan apakah akan membagi kode menjadi beberapa file dex.
Nilai yang mungkin:
  • native: Memisahkan kode menjadi beberapa file dex saat batas indeks dex 64K 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 menjadi beberapa file dex saat batas indeks dex 64K terlampaui. Mengasumsikan class multidex dimuat melalui kode aplikasi (yaitu dukungan platform native).
  • manual_main_dex: Memisahkan kode menjadi beberapa file dex saat dex 64K batas indeks terlampaui. Isi file dex utama perlu ditentukan oleh menyediakan daftar class dalam file teks menggunakan main_dex_list.
  • off: Mengompilasi semua kode ke satu file dex, meskipun jika file tersebut melebihi nilai batas indeks.
nocompress_extensions

Daftar {i>string<i}; default-nya adalah []

Daftar ekstensi file yang tidak perlu dikompresi di apk.
package_id

{i>Integer<i} (Bilangan bulat): default-nya adalah 0

ID paket yang akan ditetapkan ke resource dalam biner ini.

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

plugins

Daftar label; default adalah []

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan di atribut plugin akan dijalankan kapan pun target ini dibangun. Resource yang dibuat oleh {i>plugin<i} akan dimasukkan dalam jar hasil targetnya.
proguard_apply_dictionary

Label; default adalah None

File yang akan digunakan sebagai pemetaan untuk proguard. File "words" yang dipisahkan baris dari saat mengganti nama kelas dan anggota selama {i>obfuscation<i}.
proguard_apply_mapping

Label; default adalah None

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

Boolean; tidak dapat dikonfigurasi; default adalah False

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

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

proguard_specs

Daftar label; default adalah []

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

Daftar {i>string<i}; default-nya adalah []

Daftar filter konfigurasi resource, seperti 'en' yang akan membatasi resource di apk ke hanya yang ada di dalam 'en' konfigurasi Anda. Untuk mengaktifkan pseudolokalisasi, sertakan Pseudo-locale en_XA dan/atau ar_XB.
resource_files

Daftar label; default adalah []

Daftar resource yang akan dikemas. Biasanya ini adalah glob dari semua file dalam Direktori res.
File yang dihasilkan (dari genrules) dapat direferensikan oleh Selain itu, beri label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di bawah "res" yang sama sama seperti file resource yang disertakan.
shrink_resources

{i>Integer<i} (Bilangan bulat): default-nya adalah -1

Apakah akan melakukan penyingkatan resource. Sumber daya 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. Akselerator ini beroperasi sebagian besar dengan cara yang sama dengan penyingkat resource Gradle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

Perbedaan penting:

  • resource di values/ akan dihapus, begitu juga berdasarkan file sumber daya
  • menggunakan strict mode secara default
  • menghapus sumber daya ID yang tidak digunakan hanya didukung dengan aapt2
Jika penyingkatan resource diaktifkan, name_files/resource_shrinker.log juga akan dibuat, dengan 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 --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 mengizinkan penggunaan file .aar sebagai library untuk android_library dan android_binary aturan.

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 diisi

Nama unik untuk target ini.

aar

Label; wajib diisi

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

Daftar label; default adalah []

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

Label; default 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 diaktifkan secara implisit jalur class kompilasi.

Target output implisit

  • libname.jar: Arsip Java.
  • libname-src.jar: Arsip yang berisi sumber ("jar sumber").
  • name.aar: Android 'aar' paket yang berisi arsip java target dan resource. Tidak berisi penutupan transitif.

Contoh

Contoh aturan Android dapat ditemukan di direktori examples/android pada 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

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; default adalah []

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

Daftar label; default adalah []

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

srcs file dengan jenis .java dikompilasi. Demi keterbacaan, tidak baik menyebutkan nama file sumber .java yang dihasilkan ke srcs. Sebagai gantinya, masukkan nama aturan yang bergantung pada srcs, sebagai seperti yang dijelaskan di bawah ini.

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

Jika srcs dihilangkan, maka dependensi apa pun yang ditentukan dalam deps diekspor dari aturan ini (lihat ekspor java_library untuk mengetahui informasi tentang cara mengekspor dependensi). Namun demikian, perilaku ini akan segera tidak digunakan lagi; cobalah untuk tidak bergantung padanya.

assets

Daftar label; default adalah []

Daftar aset yang akan dikemas. Biasanya ini adalah glob dari semua file dalam Direktori assets. Anda juga dapat merujuk pada aturan lain (aturan apa pun yang menghasilkan file) atau file yang diekspor dalam paket lainnya, selama semua file tersebut berada di bawah Direktori assets_dir dalam paket yang sesuai.
assets_dir

String; default-nya adalah ""

String yang memberikan jalur ke file di assets. Pasangan assets dan assets_dir mendeskripsikan paket aset dan salah satu dari kedua atribut tersebut harus disediakan atau tidak sama sekali.
custom_package

String; default-nya adalah ""

Paket Java yang akan dibuatkan sumber java. Secara {i>default<i}, paket disimpulkan dari direktori tempat file BUILD yang berisi aturan tersebut. Anda dapat menentukan paket yang berbeda tetapi ini sangat tidak disarankan karena dapat menimbulkan konflik classpath dengan yang hanya akan terdeteksi saat runtime.
enable_data_binding

Boolean; default-nya adalah False

Jika true (benar), aturan ini akan memproses data binding dalam resource tata letak disertakan melalui resource_files. Tanpa ini , ekspresi data binding akan menghasilkan kegagalan build.

Untuk membangun 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 data binding aturan melalui resource penggabungan. Jadi mereka juga perlu membangun dengan data binding untuk mengurai ekspresi tersebut.
  2. Menambahkan 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; default adalah []

Daftar java_plugin (mis. anotasi pemroses) untuk mengekspor ke library yang bergantung langsung pada library ini.

Daftar java_plugin yang ditentukan akan diterapkan ke library yang secara langsung bergantung pada library ini, seolah-olah library tersebut label di plugins.

exports

Daftar label; default 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 dependensi langsung dari aturan tempatnya berada.

exports_manifest

{i>Integer<i} (Bilangan bulat): default-nya adalah 1

Apakah akan mengekspor entri manifes ke android_binary target atau tidak 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 idl sumber 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, baik idl_parcelables dan idl_srcs harus berada di jalur yang ditentukan oleh paket java objek yang diwakili oleh idl_import_root. Jika idl_import_root adalah tidak ditentukan, baik idl_parcelables maupun idl_srcs harus berada di jalur yang ditetapkan oleh paketnya di bawah {i>root Java<i}.

Lihat contoh.

idl_parcelables

Daftar label; default adalah []

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

Hanya .aidl file yang terkait langsung dengan .java sumber dalam library ini harus disertakan (mis., kustom implementasi Parcelable), jika tidak, idl_srcs harus data

File-file ini harus ditempatkan dengan tepat agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mendapatkan informasi tentang apa artinya ini.

idl_preprocessed

Daftar label; default adalah []

Daftar definisi IDL Android yang telah diproses sebelumnya untuk disediakan sebagai impor. File ini akan tersedia sebagai impor untuk android_library target 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 terkait langsung dengan .java sumber dalam library ini harus disertakan (mis., kustom implementasi Parcelable), jika tidak, gunakan idl_srcs untuk Android IDL yang perlu diterjemahkan ke antarmuka Java dan gunakan idl_parcelable untuk file AIDL yang tidak diproses sebelumnya.

idl_srcs

Daftar label; default adalah []

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

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

File-file ini harus ditempatkan dengan tepat agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mendapatkan informasi tentang apa artinya ini.

javacopts

Daftar {i>string<i}; default-nya adalah []

Opsi compiler tambahan untuk target ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

manifest

Label; default adalah None

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

Boolean; default-nya adalah False

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

Daftar label; default adalah []

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan di atribut plugin akan dijalankan kapan pun target ini dibangun. Resource yang dibuat oleh {i>plugin<i} akan dimasukkan dalam jar hasil targetnya.
proguard_specs

Daftar label; default adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Ini akan menjelaskan rangkaian spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, mereka akan ditambahkan ke target android_binary bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarning, mengasumsikan bahwa efek samping tersebut, dan aturan yang dimulai dengan {i>-keep<i}. Opsi lainnya hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautoologis.
resource_files

Daftar label; default adalah []

Daftar resource yang akan dikemas. Biasanya ini adalah glob dari semua file dalam Direktori res.
File yang dihasilkan (dari genrules) dapat direferensikan oleh Selain itu, beri label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di bawah "res" yang sama sama seperti file resource 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. Materi ini akan memulai emulator, menginstal aplikasi yang diuji, aplikasi pengujian, dan aplikasi lain yang dibutuhkan, dan menjalankan pengujian yang didefinisikan dalam paket pengujian.

Atribut test_app menentukan android_binary yang berisi pengujian. android_binary ini sebaliknya menentukan aplikasi android_binary yang sedang diuji melalui 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 diisi

Nama unik untuk target ini.

support_apks

Daftar label; default adalah []

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

Label; wajib diisi

android_device tempat pengujian harus dijalankan.

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

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

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). Alat ini berfungsi dengan framework pengujian Robolectric Android. Lihat situs Android Robolectric untuk mengetahui detail tentang menulis uji Robolectric.

Target output implisit

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

Contoh

Untuk menggunakan Robolectric dengan android_local_test, tambahkan Robolectric's repositori 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 diisi

Nama unik untuk target ini.

deps

Daftar label; default adalah []

Daftar library yang akan diuji serta library tambahan yang akan ditautkan ke target. Semua resource, aset, dan file manifes yang dideklarasikan di aturan Android dalam mode transitif penutupan 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; default adalah []

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

srcs file dengan jenis .java dikompilasi. Demi keterbacaan, tidak baik menyebutkan nama file sumber .java yang dihasilkan ke srcs. Sebagai gantinya, masukkan nama aturan yang bergantung pada srcs, sebagai seperti yang dijelaskan di bawah ini.

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

Semua file lainnya diabaikan, selama setidaknya ada satu file dari jenis file yang dijelaskan di atas. Jika tidak, error dimunculkan.

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 {i>string<i}; default-nya adalah []

Kepadatan yang akan difilter saat membangun apk. Layar yang kompatibel juga akan ditambahkan ke manifes jika belum berisi {i>superset<i} StarlarkListing.
enable_data_binding

Boolean; default-nya adalah False

Jika true (benar), aturan ini akan memproses data binding yang digunakan dalam dependensi dengan data binding yang diaktifkan dan digunakan oleh pengujian ini. Tanpa pengaturan ini, dependensi {i>data binding<i} tidak akan memiliki pembuatan kode tingkat biner yang diperlukan, dan dapat menyebabkan kegagalan build.
javacopts

Daftar {i>string<i}; default-nya adalah []

Opsi compiler tambahan untuk library ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar {i>string<i}; default-nya adalah []

Daftar tanda yang akan disematkan dalam skrip wrapper yang dihasilkan untuk menjalankan biner ini. Tunduk kepada $(location) dan Penggantian "Buat variabel", dan Tokenisasi shell Bourne.

Skrip wrapper untuk biner Java menyertakan definisi CLASSPATH (untuk menemukan semua jar dependen) dan memanggil penafsir Java yang tepat. Baris perintah yang dihasilkan oleh skrip wrapper menyertakan nama class utama diikuti dengan "$@" sehingga Anda bisa meneruskan argumen setelah classname. Namun, argumen yang dimaksudkan untuk mengurai oleh JVM harus ditentukan sebelum classname pada perintah garis. Konten jvm_flags ditambahkan ke wrapper sebelum classname dicantumkan.

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

manifest

Label; default adalah None

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

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

Kamus nilai yang harus 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 manifes dan tag usage-sdk. packageName akan diabaikan dan akan disetel dari applicationId jika ditetapkan atau paket dalam manifes. Tidak perlu memiliki manifes pada aturan untuk menggunakan manifest_values.
nocompress_extensions

Daftar {i>string<i}; default-nya adalah []

Daftar ekstensi file yang tidak perlu dikompresi di apk resource.
plugins

Daftar label; default adalah []

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

Daftar {i>string<i}; default-nya adalah []

Daftar filter konfigurasi resource, seperti 'en' yang akan membatasi resource di apk ke hanya yang ada di dalam 'en' konfigurasi Anda.
resource_jars

Daftar label; default 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 resources . Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file sumber daya ditentukan sesuai dengan sebagai paket Java dari file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berlokasi di foo/bar/a.txt.

runtime_deps

Daftar label; default adalah []

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

{i>Integer<i} (Bilangan bulat): default-nya adalah 0

Apakah ingin mengenkode informasi build ke dalam biner. Nilai yang mungkin:
  • stamp = 1: Selalu tambahkan informasi build ke dalam biner, bahkan dalam --nostamp build. Ini harus dihindari, karena berpotensi mematikan caching jarak jauh untuk biner dan tindakan downstream apa pun yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstanta. Ini memberikan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh Tanda --[no]stamp.

Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah.

test_class

String; default-nya adalah ""

Class Java yang akan dimuat oleh runner pengujian.

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

use_launcher

Boolean; default-nya adalah True

Apakah biner harus menggunakan peluncur kustom.

Jika atribut ini ditetapkan ke false, atribut launcher dan atribut terkait Tanda --java_launcher 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 produk. Emulator ini dapat dimulai melalui bazel run perintah atau dengan mengeksekusi skrip yang dihasilkan secara langsung. Sangat disarankan untuk bergantung pada aturan android_device yang ada daripada menentukan aturan Anda sendiri.

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

android_device mendukung pembuatan image KVM jika system_image berbasis X86 dan dioptimalkan untuk maksimal 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 atau 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 membuat gambar dan skrip awal. Anda dapat memulai emulator secara lokal dengan menjalankan bazel run :nexus_s -- --action=start. Skrip mengekspos flag berikut:

  • --adb_port: Port untuk mengekspos adb. Jika Anda ingin mengeluarkan adb perintah ke emulator. Ini adalah port yang akan Anda keluarkan dari adb connect tempat mesin terhubung.
  • --emulator_port: Port untuk mengekspos pengelolaan telnet emulator konsol aktif.
  • --enable_display: Memulai emulator dengan tampilan jika true (default) ke salah (false).
  • --action: Start atau kill.
  • --apks_to_install: daftar apk yang akan diinstal pada emulator.

Argumen

Atribut
name

Nama; wajib diisi

Nama unik untuk target ini.

cache

{i>Integer<i} (Bilangan bulat): wajib diisi

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

Label; default adalah None

Satu file properti yang akan ditempatkan di /default.prop pada emulator. Hal ini memungkinkan pembuat aturan mengonfigurasi emulator lebih lanjut agar tampak seperti di perangkat sungguhan (Secara khusus mengontrol string UserAgent-nya dan perilaku yang dapat menyebabkan aplikasi atau server berperilaku berbeda terhadap perangkat tertentu). Properti dalam file ini akan menggantikan hanya baca yang biasanya ditetapkan oleh emulator, seperti ro.product.model.
horizontal_resolution

{i>Integer<i} (Bilangan bulat): wajib diisi

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

Daftar label; default adalah []

Daftar APK yang akan diinstal pada perangkat pada saat booting.
ram

{i>Integer<i} (Bilangan bulat): wajib diisi

Jumlah RAM dalam megabyte yang diemulasikan untuk perangkat. Ini untuk seluruh perangkat, tidak hanya untuk aplikasi tertentu yang diinstal di perangkat. Tujuan adalah 64 megabyte.
screen_density

{i>Integer<i} (Bilangan bulat): wajib diisi

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

Label; wajib diisi

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 pada saat 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 (untuk misalnya Intel menyediakan gambar x86).
vertical_resolution

{i>Integer<i} (Bilangan bulat): wajib diisi

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

{i>Integer<i} (Bilangan bulat): wajib diisi

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 pembangunan target Android dengan pada kode sumber.

Perhatikan bahwa implementasi android_ndk_repository ini diganti dengan implementasinya di Starlark. Dukungan untuk versi NDK mendatang termasuk versi 25 dan yang lebih baru akan diterapkan dalam android_ndk_repository versi Starlark. Lihat rules_android_ndk untuk Starlark .

Perhatikan bahwa membuat aplikasi untuk Android juga memerlukan aturan android_sdk_repository di File WORKSPACE.

Untuk informasi selengkapnya, baca dokumentasi lengkap tentang cara menggunakan Android NDK dengan Bazel.

Contoh

android_ndk_repository(
    name = "androidndk",
)

Contoh di atas akan menemukan Android NDK 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 terletak di dalam ruang kerja Anda di ./android-ndk-r20. Library ini akan menggunakan library API level 24 saat mengompilasi JNI Anda pada kode sumber.

{i>cpufeatures<i}

Android NDK berisi library cpufeatures yang dapat digunakan untuk mendeteksi CPU perangkat pada saat {i>runtime<i}. Contoh berikut menunjukkan cara menggunakan {i>cpufeatures<i} 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 diisi

Nama unik untuk target ini.

api_level

{i>Integer<i} (Bilangan bulat): tidak dapat dikonfigurasi; default adalah 0

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

String; tidak dapat dikonfigurasi; default adalah ""

Jalur absolut atau relatif ke Android NDK. Baik atribut ini maupun Variabel lingkungan $ANDROID_NDK_HOME harus ditetapkan.

Android NDK dapat didownload dari situs developer Android .

repo_mapping

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

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

Misalnya, entri "@foo": "@bar" mendeklarasikan bahwa, untuk setiap saat repositori bergantung pada "@foo" (seperti dependensi pada "@foo//some:target"), kode ini harus benar-benar 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

Batas minimum untuk menyiapkan Android SDK untuk Bazel adalah menetapkan aturan android_sdk_repository bernama "androidsdk" dalam file WORKSPACE dan setel $ANDROID_HOME variabel lingkungan ke jalur Android SDK Anda. Bazel akan menggunakan level API Android tertinggi dan versi alat build yang diinstal di Android SDK secara default.
android_sdk_repository(
    name = "androidsdk",
)

Untuk memastikan build yang dapat direproduksi, path, api_level, dan Atribut build_tools_version dapat ditetapkan ke nilai tertentu. Build akan gagal jika Android SDK tidak menginstal API level atau versi alat build yang ditetapkan.

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. Ini adalah berguna jika Android SDK merupakan bagian dari ruang kerja Bazel Anda (mis. jika di-check in ke versi ).

Support Library

Support Library tersedia di Android SDK Manager sebagai "Android Support Repository". Ini adalah serangkaian pustaka Android umum berversi, seperti pustaka Dukungan dan AppCompat, yang dikemas sebagai repositori Maven lokal. android_sdk_repository menghasilkan Bazel target untuk setiap library ini yang dapat digunakan dalam dependensi android_binary dan android_library target.

Nama-nama target yang dihasilkan berasal dari koordinat Maven library di bagian Android Support Repository, diformat sebagai @androidsdk//${group}:${artifact}-${version}. Contoh berikut menunjukkan cara android_library bergantung pada versi 25.0.0 Library compat 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

Nama; wajib diisi

Nama unik untuk target ini.

api_level

{i>Integer<i} (Bilangan bulat): tidak dapat dikonfigurasi; default adalah 0

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

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

Versi alat build Android yang akan digunakan dari dalam Android SDK. Jika tidak ditentukan, versi {i>build tools<i} terbaru yang diinstal akan digunakan.

Bazel memerlukan alat build versi 30.0.0 atau yang lebih baru.

path

String; tidak dapat dikonfigurasi; default adalah ""

Jalur absolut atau relatif ke Android SDK. Baik atribut ini maupun Variabel lingkungan $ANDROID_HOME harus ditetapkan.

Android SDK dapat didownload dari situs developer Android.

repo_mapping

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

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

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