Aturan
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
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 padaname_deploy.jar
. Output ini hanya dihasilkan jika Atribut proguard_specs saat ini adalah yang ditentukan.name_proguard.map
: Hasil file pemetaan dari menjalankan ProGuard padaname_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 unik untuk target ini. |
deps
|
android_library ,
java_library dengan batasan android dan
cc_library menggabungkan atau menghasilkan library native .so untuk
Platform target Android.
|
srcs
|
|
assets
|
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
|
assets .
Pasangan assets dan assets_dir mendeskripsikan paket
aset dan salah satu dari kedua atribut
tersebut harus disediakan atau tidak sama sekali.
|
crunch_png
|
|
custom_package
|
|
debug_key
|
PERINGATAN: Jangan gunakan kunci produksi, karena kunci tersebut seharusnya dilindungi dengan ketat dan tidak disimpan di hierarki sumber. |
debug_signing_keys
|
PERINGATAN: Jangan gunakan kunci produksi, karena kunci tersebut seharusnya dilindungi dengan ketat dan tidak disimpan di hierarki sumber. |
debug_signing_lineage_file
|
PERINGATAN: Jangan gunakan kunci produksi, karena kunci tersebut seharusnya dilindungi dengan ketat dan tidak disimpan di hierarki sumber. |
densities
|
|
dex_shards
|
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
|
|
enable_data_binding
|
Untuk membangun aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:
|
incremental_dexing
|
|
instruments
|
Target Jika atribut ini ditetapkan, |
javacopts
|
Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
key_rotation_min_sdk
|
|
main_dex_list
|
android/support/multidex/MultiDex$V19.class android/support/multidex/MultiDex.class android/support/multidex/MultiDexApplication.class com/google/common/base/Objects.class multidex="manual_main_dex" .
|
main_dex_list_opts
|
|
main_dex_proguard_specs
|
multidex disetel ke legacy .
|
manifest
|
AndroidManifest.xml .
Harus ditentukan jika resource_files atau aset ditentukan.
|
manifest_values
|
|
multidex
|
Nilai yang mungkin:
|
nocompress_extensions
|
|
package_id
|
Lihat argumen |
plugins
|
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
|
|
proguard_apply_mapping
|
proguard_generate_mapping akan
digunakan kembali untuk menerapkan pemetaan yang sama ke build baru.
|
proguard_generate_mapping
|
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 |
proguard_specs
|
|
resource_configuration_filters
|
en_XA dan/atau ar_XB .
|
resource_files
|
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
|
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:
name_files/resource_shrinker.log
juga akan dibuat, dengan memerinci analisis dan penghapusan yang dilakukan.
Kemungkinan nilai:
|
aar_import
aar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)
Aturan ini mengizinkan penggunaan file .aar
sebagai library untuk
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 unik untuk target ini. |
aar
|
.aar yang akan disediakan ke target Android yang bergantung pada target ini.
|
exports
|
|
srcjar
|
|
android_library
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 unik untuk target ini. |
deps
|
android_library ,
java_library dengan batasan android dan
cc_library menggabungkan atau menghasilkan .so library native
untuk platform target Android.
|
srcs
|
.java atau .srcjar yang
akan diproses untuk membuat target.
Jika |
assets
|
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
|
assets .
Pasangan assets dan assets_dir mendeskripsikan paket
aset dan salah satu dari kedua atribut
tersebut harus disediakan atau tidak sama sekali.
|
custom_package
|
|
enable_data_binding
|
Untuk membangun aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:
|
exported_plugins
|
java_plugin (mis. anotasi
pemroses) untuk mengekspor ke library yang bergantung langsung pada library ini.
Daftar |
exports
|
exports
dianggap sebagai dependensi langsung dari aturan apa pun yang secara langsung bergantung pada
target dengan exports .
|
exports_manifest
|
android_binary target atau tidak
yang bergantung pada target ini. Atribut uses-permissions tidak pernah diekspor.
|
idl_import_root
|
Jalur ini akan digunakan sebagai root impor saat memproses sumber IDL yang bergantung pada library ini. Jika Lihat contoh. |
idl_parcelables
|
android_library target yang bergantung pada library ini, secara langsung
atau melalui penutupan transitifnya, tetapi tidak akan diterjemahkan ke Java
atau dikompilasi.
Hanya File-file ini harus ditempatkan dengan tepat agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mendapatkan informasi tentang apa artinya ini. |
idl_preprocessed
|
android_library target yang bergantung pada library ini, secara langsung
atau melalui penutupan transitifnya, tetapi tidak akan diterjemahkan ke Java
atau dikompilasi.
Hanya file |
idl_srcs
|
srcs .
File ini akan tersedia sebagai impor untuk
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
|
Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
manifest
|
AndroidManifest.xml .
Harus ditentukan jika resource_files atau aset ditentukan.
|
neverlink
|
neverlink tidak akan digunakan di
Pembuatan .apk . Berguna jika library akan disediakan oleh
selama proses eksekusi.
|
plugins
|
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
|
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
|
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
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 unik untuk target ini. |
support_apks
|
|
target_device
|
android_device tempat pengujian harus dijalankan. Untuk menjalankan pengujian pada emulator yang sudah berjalan atau di perangkat fisik, gunakan
argumen berikut:
|
test_app
|
android_binary harus menentukan target yang diuji
atribut instruments -nya.
|
android_local_test
android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)
Aturan ini ditujukan untuk 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/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-<COMMIT>", sha256 = "<HASH>", ) load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") robolectric_repositories()
maven_jar
yang diperlukan untuk Robolectric.
Kemudian setiap aturan android_local_test
harus bergantung pada
@robolectric//bazel:robolectric
. Lihat contoh di bawah.
android_local_test( name = "SampleTest", srcs = [ "SampleTest.java", ], manifest = "LibManifest.xml", deps = [ ":sample_test_lib", "@robolectric//bazel:robolectric", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
Daftar aturan yang diizinkan di |
srcs
|
Semua file lainnya diabaikan, selama setidaknya ada satu file dari jenis file yang dijelaskan di atas. Jika tidak, error dimunculkan.
Atribut |
custom_package
|
test_class juga.
|
densities
|
|
enable_data_binding
|
|
javacopts
|
Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
jvm_flags
|
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 Perhatikan bahwa atribut ini tidak berpengaruh pada |
manifest
|
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
|
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
|
|
plugins
|
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
|
|
resource_jars
|
|
resource_strip_prefix
|
Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam |
runtime_deps
|
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
|
Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah. |
test_class
|
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 |
use_launcher
|
Jika atribut ini ditetapkan ke false, atribut
launcher dan atribut terkait
Tanda |
android_device
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 emulatorname_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 unik untuk target ini. |
cache
|
|
default_properties
|
|
horizontal_resolution
|
|
platform_apks
|
|
ram
|
|
screen_density
|
|
system_image
|
|
vertical_resolution
|
|
vm_heap
|
|
android_ndk_repository
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 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 unik untuk target ini. |
api_level
|
|
path
|
$ANDROID_NDK_HOME harus ditetapkan.
Android NDK dapat didownload dari situs developer Android . |
repo_mapping
|
Misalnya, entri |
android_sdk_repository
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Mengonfigurasi Bazel untuk menggunakan Android SDK lokal guna mendukung pembuatan target Android.
Contoh
Batas minimum untuk menyiapkan Android SDK untuk Bazel adalah menetapkan aturanandroid_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 unik untuk target ini. |
api_level
|
Level API yang digunakan untuk build tertentu dapat diganti oleh Untuk melihat semua target |
build_tools_version
|
Bazel memerlukan alat build versi 30.0.0 atau yang lebih baru. |
path
|
$ANDROID_HOME harus ditetapkan.
Android SDK dapat didownload dari situs developer Android. |
repo_mapping
|
Misalnya, entri |