Aturan
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
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
: 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; wajib diisi Nama unik untuk target ini. |
deps
|
Daftar label; default 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
|
assets
|
Daftar label; default 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 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 |
custom_package
|
String; default-nya adalah |
debug_key
|
Label; default adalah 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 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 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 |
dex_shards
|
{i>Integer<i} (Bilangan bulat): default-nya adalah 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 |
enable_data_binding
|
Boolean; default-nya adalah Untuk membangun aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:
|
incremental_dexing
|
{i>Integer<i} (Bilangan bulat): tidak dapat dikonfigurasi; default adalah |
instruments
|
Label; default adalah Target Jika atribut ini ditetapkan, |
javacopts
|
Daftar {i>string<i}; default-nya adalah Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
key_rotation_min_sdk
|
String; default-nya adalah |
main_dex_list
|
Label; default adalah 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
|
Daftar {i>string<i}; default-nya adalah |
main_dex_proguard_specs
|
Daftar label; default adalah multidex disetel ke legacy .
|
manifest
|
Label; wajib diisi Nama file manifes Android, biasanyaAndroidManifest.xml .
Harus ditentukan jika resource_files atau aset ditentukan.
|
manifest_values
|
Kamus: String -> String; default-nya adalah
Setiap instance
Jika |
multidex
|
String; default-nya adalah Nilai yang mungkin:
|
nocompress_extensions
|
Daftar {i>string<i}; default-nya adalah |
package_id
|
{i>Integer<i} (Bilangan bulat): default-nya adalah Lihat argumen |
plugins
|
Daftar label; default adalah 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 |
proguard_apply_mapping
|
Label; default adalah proguard_generate_mapping akan
digunakan kembali untuk menerapkan pemetaan yang sama ke build baru.
|
proguard_generate_mapping
|
Boolean; tidak dapat dikonfigurasi; default adalah 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
|
Daftar label; default adalah |
resource_configuration_filters
|
Daftar {i>string<i}; default-nya adalah en_XA dan/atau ar_XB .
|
resource_files
|
Daftar label; default 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 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
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
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 |
srcjar
|
Label; default adalah |
android_library
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 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 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 .java atau .srcjar yang
akan diproses untuk membuat target.
Jika |
assets
|
Daftar label; default 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 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 |
enable_data_binding
|
Boolean; default-nya adalah Untuk membangun aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:
|
exported_plugins
|
Daftar label; default adalah java_plugin (mis. anotasi
pemroses) untuk mengekspor ke library yang bergantung langsung pada library ini.
Daftar |
exports
|
Daftar label; default adalah exports
dianggap sebagai dependensi langsung dari aturan apa pun yang secara langsung bergantung pada
target dengan exports .
|
exports_manifest
|
{i>Integer<i} (Bilangan bulat): default-nya adalah android_binary target atau tidak
yang bergantung pada target ini. Atribut uses-permissions tidak pernah diekspor.
|
idl_import_root
|
String; default-nya adalah Jalur ini akan digunakan sebagai root impor saat memproses sumber IDL yang bergantung pada library ini. Jika Lihat contoh. |
idl_parcelables
|
Daftar label; default adalah 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
|
Daftar label; default adalah 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
|
Daftar label; default adalah 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
|
Daftar {i>string<i}; default-nya adalah Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
manifest
|
Label; default adalah AndroidManifest.xml .
Harus ditentukan jika resource_files atau aset ditentukan.
|
neverlink
|
Boolean; default-nya adalah neverlink tidak akan digunakan di
Pembuatan .apk . Berguna jika library akan disediakan oleh
selama proses eksekusi.
|
plugins
|
Daftar label; default adalah 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 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 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 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. 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 |
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_app
|
Label; wajib diisi Target android_binary yang berisi class pengujian. Targetandroid_binary harus menentukan target yang diuji
atribut instruments -nya.
|
android_local_test
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 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()
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 aturan yang diizinkan di |
srcs
|
Daftar label; default adalah
Semua file lainnya diabaikan, selama setidaknya ada satu file dari jenis file yang dijelaskan di atas. Jika tidak, error dimunculkan.
Atribut |
custom_package
|
String; default-nya adalah test_class juga.
|
densities
|
Daftar {i>string<i}; default-nya adalah |
enable_data_binding
|
Boolean; default-nya adalah |
javacopts
|
Daftar {i>string<i}; default-nya adalah Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
jvm_flags
|
Daftar {i>string<i}; default-nya adalah 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
|
Label; default adalah 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 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 |
plugins
|
Daftar label; default adalah 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 |
resource_jars
|
Daftar label; default adalah |
resource_strip_prefix
|
String; default-nya adalah
Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam |
runtime_deps
|
Daftar label; default adalah 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
Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah. |
test_class
|
String; default-nya adalah
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
|
Boolean; default-nya adalah Jika atribut ini ditetapkan ke false, atribut
launcher dan atribut terkait
Tanda |
android_device
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 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; 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 |
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 |
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:
|
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 aturanandroid_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 |
path
|
String; tidak dapat dikonfigurasi; default adalah $ANDROID_NDK_HOME harus ditetapkan.
Android NDK dapat didownload dari situs developer Android . |
repo_mapping
|
Kamus: String -> String; default-nya adalah Misalnya, entri |
android_sdk_repository
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
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; wajib diisi Nama unik untuk target ini. |
api_level
|
{i>Integer<i} (Bilangan bulat): tidak dapat dikonfigurasi; default adalah Level API yang digunakan untuk build tertentu dapat diganti oleh Untuk melihat semua target |
build_tools_version
|
String; tidak dapat dikonfigurasi; default adalah Bazel memerlukan alat build versi 30.0.0 atau yang lebih baru. |
path
|
String; tidak dapat dikonfigurasi; default adalah $ANDROID_HOME harus ditetapkan.
Android SDK dapat didownload dari situs developer Android. |
repo_mapping
|
Kamus: String -> String; default-nya adalah Misalnya, entri |