Aturan
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
biner_android
Lihat sumber aturanandroid_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)
Menghasilkan file paket aplikasi Android (.apk).
Target output implisit
name.apk
: File paket aplikasi Android yang ditandatangani dengan kunci debug dan yang di-zip, dapat digunakan untuk mengembangkan dan men-debug aplikasi Anda. Anda tidak dapat merilis aplikasi saat ditandatangani dengan kunci debug.name_unsigned.apk
: Versi file yang tidak ditandatangani di atas yang dapat ditandatangani dengan kunci rilis sebelum dirilis ke publik.name_deploy.jar
: Arsip Java yang berisi penutupan transitif target ini.Jar deployment berisi semua class yang akan ditemukan oleh classloader yang menelusuri classpath runtime target ini dari awal hingga akhir.
name_proguard.jar
: Arsip Java yang berisi hasil menjalankan ProGuard padaname_deploy.jar
. Output ini hanya dihasilkan jika atribut proguard_specs ditentukan.name_proguard.map
: Hasil file pemetaan dari menjalankan ProGuard padaname_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
hierarki sumber Bazel.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
android_library , java_library dengan batasan android , dan cc_library yang menggabungkan atau memproduksi library native .so untuk platform target Android.
|
srcs
|
File File |
assets
|
glob dari semua file pada direktori assets . Anda juga dapat mereferensikan aturan lain (aturan mana pun yang menghasilkan
file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada dalam
direktori assets_dir dalam paket yang sesuai.
|
assets_dir
|
assets .
Pasangan assets dan assets_dir menjelaskan aset
terpaket dan kedua atribut tersebut harus disediakan atau tidak satu pun.
|
crunch_png
|
|
custom_package
|
|
debug_key
|
PERINGATAN: Jangan gunakan kunci produksi Anda karena kunci tersebut harus diamankan dengan ketat dan tidak disimpan di hierarki sumber Anda. |
debug_signing_keys
|
PERINGATAN: Jangan gunakan kunci produksi Anda karena kunci tersebut harus diamankan dengan ketat dan tidak disimpan di hierarki sumber Anda. |
debug_signing_lineage_file
|
PERINGATAN: Jangan gunakan kunci produksi Anda karena kunci tersebut harus diamankan dengan ketat dan tidak disimpan di hierarki sumber Anda. |
densities
|
|
dex_shards
|
Perhatikan bahwa setiap shard akan menghasilkan setidaknya satu dex dalam aplikasi akhir. Oleh karena itu, setelan ini tidak boleh digunakan lebih dari 1 untuk biner rilis. |
dexopts
|
|
enable_data_binding
|
Untuk mem-build 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.classHarus digunakan dengan 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 dalam atribut plugin akan dijalankan setiap kali target ini dibuat. Resource yang dihasilkan oleh plugin akan disertakan dalam jar hasil target.
|
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
ditentukan. File ini akan mencantumkan pemetaan antara nama class, metode, dan class asli serta yang di-obfuscate.
PERINGATAN: Jika atribut ini digunakan, spesifikasi
Proguard tidak boleh berisi |
proguard_specs
|
|
resource_configuration_filters
|
en_XA dan/atau ar_XB .
|
resource_files
|
glob dari semua file pada direktori res .
File yang dihasilkan (dari genrules) juga dapat dirujuk oleh Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di direktori " res " yang sama dengan file resource
lainnya yang disertakan.
|
shrink_resources
|
manifest dan resource_files ) dan memerlukan ProGuard.
Cara 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, yang menguraikan analisis dan penghapusan yang dilakukan.
Kemungkinan nilai:
|
aar_import
Lihat sumber aturanaar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)
Aturan ini mengizinkan penggunaan file .aar
sebagai library untuk
aturan android_library
dan
android_binary
.
Contoh
aar_import( name = "google-vr-sdk", aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar", ) android_binary( name = "app", manifest = "AndroidManifest.xml", srcs = glob(["**.java"]), deps = [":google-vr-sdk"], )
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
aar
|
.aar untuk diberikan ke target Android yang bergantung pada target ini.
|
exports
|
|
srcjar
|
|
library_android
Lihat sumber aturanandroid_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)
Aturan ini mengompilasi dan mengarsipkan sumbernya menjadi file .jar
.
Library runtime Android android.jar
secara implisit ditempatkan di
jalur class kompilasi.
Target output implisit
libname.jar
: Arsip Java.libname-src.jar
: Arsip yang berisi sumber ("jar sumber").name.aar
: Paket 'aar' android yang berisi arsip java dan resource target ini. Tidak berisi penutupan transitif.
Contoh
Contoh aturan Android dapat ditemukan di direktori examples/android
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 yang menggabungkan atau memproduksi library native .so untuk platform target Android.
|
srcs
|
.java atau .srcjar yang diproses untuk membuat target.
File File Jika |
assets
|
glob dari semua file pada direktori assets . Anda juga dapat mereferensikan aturan lain (aturan mana pun yang menghasilkan
file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada dalam
direktori assets_dir dalam paket yang sesuai.
|
assets_dir
|
assets .
Pasangan assets dan assets_dir menjelaskan aset
terpaket dan kedua atribut tersebut harus disediakan atau tidak satu pun.
|
custom_package
|
|
enable_data_binding
|
Untuk mem-build aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:
|
exported_plugins
|
java_plugin (misalnya pemroses anotasi) untuk diekspor ke library yang secara langsung bergantung pada library ini.
Daftar |
exports
|
exports
dianggap sebagai dependensi langsung dari setiap aturan yang bergantung secara langsung pada
target menggunakan exports .
|
exports_manifest
|
android_binary yang bergantung pada target ini atau tidak. 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 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 benar agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mengetahui arti masalahnya. |
idl_preprocessed
|
android_library 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 setiap target File ini harus ditempatkan dengan benar agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mengetahui arti masalahnya. |
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 dalam
pembuatan .apk . Berguna jika library akan disediakan oleh lingkungan runtime selama eksekusi.
|
plugins
|
java_plugin yang ditentukan dalam atribut plugin akan dijalankan setiap kali target ini dibuat. Resource yang dihasilkan oleh plugin akan disertakan dalam jar hasil target.
|
proguard_specs
|
android_binary mana pun, bergantung pada library ini.
File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn,
asumsi dan efek, serta aturan yang dimulai dengan -keep. Opsi lainnya hanya dapat muncul di
proguard_spec android_binary , untuk memastikan penggabungan non-otomatis.
|
resource_files
|
glob dari semua file pada direktori res .
File yang dihasilkan (dari genrules) juga dapat dirujuk oleh Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di direktori " res " yang sama dengan file resource
lainnya yang disertakan.
|
uji_instrumentasi_android
Lihat sumber aturanandroid_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)
Aturan android_instrumentation_test
menjalankan uji instrumentasi Android. Emulator 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 kemudian
menentukan aplikasi android_binary
yang sedang diuji melalui
atribut instruments-nya.
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 pada perangkat fisik, gunakan
argumen ini:
|
test_app
|
android_binary harus menentukan target mana yang diuji melalui
atribut instruments miliknya.
|
pengujian_android_lokal
Lihat sumber aturanandroid_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)
Aturan ini untuk pengujian unit aturan android_library
secara lokal
(bukan di perangkat).
Ini berfungsi dengan framework pengujian Robolectric Android.
Lihat situs Android Robolectric untuk detail tentang
menulis pengujian Robolectric.
Target output implisit
name.jar
: Arsip Java dari pengujian.name-src.jar
: Arsip yang berisi sumber (" jar sumber").name_deploy.jar
: Arsip deployment Java yang cocok 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()Ini 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 unik untuk target ini. |
deps
|
Daftar aturan yang diizinkan di |
srcs
|
File File Semua file lainnya akan diabaikan, selama ada setidaknya satu file dari jenis file yang dijelaskan di atas. Jika tidak, akan muncul error.
Atribut |
custom_package
|
test_class .
|
densities
|
|
enable_data_binding
|
|
javacopts
|
Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
jvm_flags
|
Skrip wrapper untuk biner Java mencakup definisi CLASSPATH
(untuk menemukan semua jar dependen) dan memanggil penafsir Java yang tepat.
Command line yang dihasilkan oleh skrip wrapper mencakup nama class utama diikuti dengan Perhatikan bahwa atribut ini tidak berpengaruh pada output |
manifest
|
AndroidManifest.xml .
Harus ditentukan jika resource_file atau aset ditentukan atau jika salah satu 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 tag manifes dan
use-sdk. packageName akan diabaikan dan akan disetel dari
applicationId jika
ditentukan atau paket dalam manifes.
Anda 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
dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakan
exported_plugins . Resource yang dihasilkan oleh plugin akan disertakan dalam jar hasil dari aturan ini.
|
resource_configuration_filters
|
|
resource_jars
|
|
resource_strip_prefix
|
Jika ditentukan, awalan jalur ini akan dihilangkan dari setiap file dalam atribut |
runtime_deps
|
deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti itu, bukan di classpath waktu kompilasi. Dependensi yang diperlukan hanya pada runtime dapat dicantumkan di sini. Alat analisis dependensi harus mengabaikan target yang muncul di
runtime_deps dan deps .
|
stamp
|
Biner yang diberi stempel tidak dibuat ulang kecuali jika dependensinya berubah. |
test_class
|
Atribut ini menentukan nama class Java yang akan dijalankan oleh 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
peluncur dan tanda
|
perangkat_android
Lihat sumber aturanandroid_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)
Aturan ini membuat emulator Android yang dikonfigurasi dengan spesifikasi tertentu. Emulator ini dapat dimulai melalui perintah bazel run atau dengan menjalankan skrip yang dihasilkan secara langsung. Sebaiknya Anda bergantung pada aturan android_device yang sudah ada, bukan menetapkan aturan Anda sendiri.
Aturan ini merupakan target yang cocok untuk flag --run_under untuk pengujian bazel dan blaze run. Memulai emulator, menyalin target yang sedang diuji/dijalankan ke emulator, dan mengujinya atau menjalankannya sesuai kebutuhan.
android_device
mendukung pembuatan image KVM jika system_image yang mendasarinya berbasis X86 dan dioptimalkan untuk sebagian besar arsitektur CPU I686. Untuk menggunakan KVM, tambahkan tags = ['requires-kvm']
ke aturan android_device
.
Target output implisit
name_images/userdata.dat
: Berisi snapshot dan file gambar untuk memulai emulatorname_images/emulator-meta-data.pb
: Berisi informasi serial yang diperlukan untuk diteruskan ke emulator guna memulai ulang.
Contoh
Contoh berikut menunjukkan cara menggunakan android_device.
//java/android/helloandroid/BUILD
berisi
android_device( name = "nexus_s", cache = 32, default_properties = "nexus_s.properties", horizontal_resolution = 480, ram = 512, screen_density = 233, system_image = ":emulator_images_android_16_x86", vertical_resolution = 800, vm_heap = 32, ) filegroup( name = "emulator_images_android_16_x86", srcs = glob(["androidsdk/system-images/android-16/**"]), )
//java/android/helloandroid/nexus_s.properties
berisi:
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
Aturan ini akan menghasilkan gambar dan skrip awal. Anda dapat memulai emulator secara lokal dengan menjalankan bazel run :nexus_s -- --action=start. Skrip ini mengekspos flag berikut:
- --adb_port: Port tempat mengekspos adb. Jika Anda ingin memberikan perintah adb ke emulator, ini adalah port yang perlu Anda hubungkan ke adb.
- --emulator_port: Port untuk mengekspos konsol pengelolaan telnet emulator.
- --enable_display: Memulai emulator dengan tampilan jika true (setelan defaultnya adalah false).
- --action: Start atau kill.
- --apks_to_install: daftar apk yang akan diinstal di 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
|
|
Repositori_android_ndk_
Lihat sumber aturanandroid_ndk_repository(name, api_level, path, repo_mapping)
Mengonfigurasi Bazel untuk menggunakan Android NDK guna mendukung pembuatan target Android dengan kode native.
Perhatikan bahwa implementasi android_ndk_repository
ini akan diganti dengan implementasi di Starlark. Dukungan untuk NDK versi mendatang termasuk versi 25 dan yang lebih baru akan
diterapkan di android_ndk_repository
versi Starlark. Lihat rules_android_ndk untuk versi Starlark.
Perhatikan bahwa proses build untuk Android juga memerlukan aturan android_sdk_repository
di file WORKSPACE
.
Untuk informasi selengkapnya, baca dokumentasi lengkap tentang penggunaan Android NDK dengan Bazel.
Contoh
android_ndk_repository( name = "androidndk", )
Contoh di atas akan mencari Android NDK dari $ANDROID_NDK_HOME
dan mendeteksi
API level tertinggi yang didukungnya.
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
Contoh di atas akan menggunakan Android NDK yang terletak di dalam ruang kerja di
./android-ndk-r20
. Library ini akan menggunakan library API level 24 saat mengompilasi kode JNI Anda.
fitur cpu
Android NDK berisi library cpufeatures yang dapat digunakan untuk mendeteksi CPU perangkat 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 unik untuk target ini. |
api_level
|
|
path
|
$ANDROID_NDK_HOME harus ditetapkan.
Android NDK dapat didownload dari situs developer Android . |
repo_mapping
|
Misalnya, entri |
Repositori_android_sdk
Lihat sumber aturanandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Mengonfigurasi Bazel untuk menggunakan Android SDK lokal guna mendukung pembuatan target Android.
Contoh
Minimum untuk menyiapkan Android SDK untuk Bazel adalah menempatkan aturanandroid_sdk_repository
bernama "androidsdk" di file WORKSPACE
dan menetapkan variabel lingkungan $ANDROID_HOME
ke jalur Android SDK Anda. Bazel akan menggunakan API level Android
tertinggi dan versi alat build yang diinstal di Android SDK secara default.
android_sdk_repository( name = "androidsdk", )
Untuk memastikan build yang dapat direproduksi, atribut path
, api_level
, dan
build_tools_version
dapat ditetapkan ke nilai tertentu. Build akan gagal jika
Android SDK tidak menginstal API level atau versi alat build yang ditentukan.
android_sdk_repository( name = "androidsdk", path = "./sdk", api_level = 19, build_tools_version = "25.0.0", )
Contoh di atas juga menunjukkan penggunaan jalur relatif ruang kerja ke Android SDK. Hal ini berguna jika Android SDK adalah bagian dari ruang kerja Bazel Anda (misalnya, jika diperiksa ke dalam kontrol versi).
Library Dukungan
Support Library tersedia di Android SDK Manager sebagai "Android Support Repository".
Ini adalah serangkaian versi library Android umum, seperti library Dukungan dan AppCompat,
yang dikemas sebagai repositori Maven lokal. android_sdk_repository
menghasilkan target Bazel untuk setiap library ini yang dapat digunakan dalam dependensi target android_binary
dan android_library
.
Nama target yang dihasilkan berasal dari koordinat Maven library di
Android Support Repository, yang diformat sebagai @androidsdk//${group}:${artifact}-${version}
.
Contoh berikut menunjukkan bagaimana android_library
dapat bergantung pada 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 unik untuk target ini. |
api_level
|
API level yang digunakan untuk build tertentu dapat diganti dengan flag Untuk melihat semua |
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 |