Aturan
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Melihat 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 zipaligned, dapat digunakan untuk mengembangkan dan men-debug aplikasi Anda. Anda tidak dapat merilis aplikasi jika ditandatangani dengan kunci debug.name_unsigned.apk
: Versi file di atas yang tidak ditandatangani yang dapat ditandatangani dengan kunci rilis sebelum dirilis ke publik.name_deploy.jar
: Arsip Java yang berisi penutupan transitif target ini.Jar 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 diname_deploy.jar
. Output ini hanya dihasilkan jika atribut proguard_specs ditentukan.name_proguard.map
: Hasil file pemetaan dari menjalankan ProGuard diname_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
dari
hierarki sumber Bazel.
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; default-nya adalah android_library ,
java_library dengan batasan android , dan
cc_library yang menggabungkan atau menghasilkan library native .so untuk
platform target Android.
|
srcs
|
Daftar label; default-nya adalah File File |
assets
|
Daftar label; default-nya adalah glob dari semua file dalam
direktori assets . Anda juga dapat mereferensikan aturan lain (aturan apa pun yang menghasilkan
file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada di
direktori assets_dir dalam paket yang sesuai.
|
assets_dir
|
String; default-nya adalah assets .
Pasangan assets dan assets_dir menjelaskan aset
yang dipaketkan dan kedua atribut harus disediakan atau tidak sama sekali.
|
crunch_png
|
Boolean; default-nya adalah |
custom_package
|
String; default-nya adalah |
debug_key
|
Label; default-nya adalah PERINGATAN: Jangan gunakan kunci produksi Anda, kunci tersebut harus dilindungi dengan ketat dan tidak disimpan di hierarki sumber Anda. |
debug_signing_keys
|
Daftar label; default-nya adalah PERINGATAN: Jangan gunakan kunci produksi Anda, kunci tersebut harus dilindungi dengan ketat dan tidak disimpan di hierarki sumber Anda. |
debug_signing_lineage_file
|
Label; default-nya adalah PERINGATAN: Jangan gunakan kunci produksi Anda, kunci tersebut harus dilindungi dengan ketat dan tidak disimpan di hierarki sumber Anda. |
densities
|
Daftar string; default-nya adalah |
dex_shards
|
Bilangan bulat; default-nya adalah Perhatikan bahwa setiap shard akan menghasilkan setidaknya satu dex di aplikasi akhir. Oleh karena itu, menetapkannya ke lebih dari 1 tidak direkomendasikan untuk biner rilis. |
dexopts
|
Daftar string; default-nya adalah |
enable_data_binding
|
Boolean; default-nya adalah Untuk mem-build aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:
|
incremental_dexing
|
Bilangan bulat; tidak dapat dikonfigurasi; defaultnya adalah |
instruments
|
Label; default-nya adalah Target Jika atribut ini ditetapkan, |
javacopts
|
Daftar string; 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-nya 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 string; default-nya adalah |
main_dex_proguard_specs
|
Daftar label; default-nya adalah multidex ditetapkan 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 string; default-nya adalah |
package_id
|
Bilangan bulat; default-nya adalah Lihat argumen |
plugins
|
Daftar label; default-nya adalah java_plugin yang ditentukan dalam
atribut plugin akan dijalankan setiap kali
target ini di-build. Resource yang dihasilkan oleh
plugin akan disertakan dalam jar hasil
target.
|
proguard_apply_dictionary
|
Label; default-nya adalah |
proguard_apply_mapping
|
Label; default-nya adalah proguard_generate_mapping untuk
digunakan kembali guna menerapkan pemetaan yang sama ke build baru.
|
proguard_generate_mapping
|
Boolean; tidak dapat dikonfigurasi; defaultnya adalah proguard_specs ditentukan. File ini akan mencantumkan pemetaan antara nama class, metode, dan kolom asli dan
yang di-obfuscate.
PERINGATAN: Jika atribut ini digunakan, spesifikasi Proguard
tidak boleh berisi |
proguard_specs
|
Daftar label; default-nya adalah |
resource_configuration_filters
|
Daftar string; default-nya adalah en_XA dan/atau ar_XB .
|
resource_files
|
Daftar label; default-nya adalah glob dari semua file dalam
direktori res .
File yang dihasilkan (dari genrules) juga dapat direferensikan oleh Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di direktori " res " yang sama dengan file
resource lain yang disertakan.
|
shrink_resources
|
Bilangan bulat; default-nya adalah manifest dan atribut resource_files ) dan memerlukan ProGuard.
Alat ini beroperasi dengan cara yang hampir 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 menjelaskan analisis dan penghapusan yang dilakukan.
Kemungkinan nilai:
|
aar_import
Melihat 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 memungkinkan penggunaan file .aar
sebagai library untuk
aturan android_library
dan
android_binary
.
Contoh
aar_import( name = "google-vr-sdk", aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar", ) android_binary( name = "app", manifest = "AndroidManifest.xml", srcs = glob(["**.java"]), deps = [":google-vr-sdk"], )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
aar
|
Label; wajib diisi File.aar yang akan disediakan ke target Android yang bergantung pada target ini.
|
exports
|
Daftar label; default-nya adalah |
srcjar
|
Label; default-nya adalah |
android_library
Melihat 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
secara implisit ditempatkan di
jalur class kompilasi.
Target output implisit
libname.jar
: Arsip Java.libname-src.jar
: Arsip yang berisi sumber ("source jar").name.aar
: 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
dari
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 Nama unik untuk target ini. |
deps
|
Daftar label; default-nya adalah android_library ,
java_library dengan batasan android , dan
cc_library yang menggabungkan atau menghasilkan library native .so
untuk platform target Android.
|
srcs
|
Daftar label; default-nya adalah .java atau .srcjar yang
diproses untuk membuat target.
File File Jika |
assets
|
Daftar label; default-nya adalah glob dari semua file dalam
direktori assets . Anda juga dapat mereferensikan aturan lain (aturan apa pun yang menghasilkan
file) atau file yang diekspor dalam paket lain, selama semua file tersebut berada di
direktori assets_dir dalam paket yang sesuai.
|
assets_dir
|
String; default-nya adalah assets .
Pasangan assets dan assets_dir menjelaskan aset
yang dipaketkan dan kedua atribut harus disediakan atau tidak sama sekali.
|
custom_package
|
String; default-nya adalah |
enable_data_binding
|
Boolean; default-nya adalah Untuk mem-build aplikasi Android dengan data binding, Anda juga harus melakukan hal berikut:
|
exported_plugins
|
Daftar label; default-nya adalah java_plugin (misalnya, pemroses
anotasi) untuk diekspor ke library yang secara langsung bergantung pada library ini.
Daftar |
exports
|
Daftar label; default-nya adalah exports dianggap sebagai dependensi langsung dari aturan apa pun yang secara langsung bergantung pada target dengan exports .
|
exports_manifest
|
Bilangan bulat; default-nya adalah android_binary
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-nya adalah android_library apa pun 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 mengetahui informasi tentang artinya. |
idl_preprocessed
|
Daftar label; default-nya adalah android_library apa pun 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-nya adalah srcs .
File ini akan tersedia sebagai impor untuk
target File ini harus ditempatkan dengan tepat agar compiler aidl dapat menemukannya. Lihat deskripsi idl_import_root untuk mengetahui informasi tentang artinya. |
javacopts
|
Daftar string; default-nya adalah Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
manifest
|
Label; default-nya adalah AndroidManifest.xml .
Harus ditentukan jika resource_files atau aset ditentukan.
|
neverlink
|
Boolean; default-nya adalah neverlink tidak akan digunakan dalam pembuatan .apk . Berguna jika library akan disediakan oleh
lingkungan runtime selama eksekusi.
|
plugins
|
Daftar label; default-nya adalah java_plugin yang ditentukan dalam
atribut plugin akan dijalankan setiap kali
target ini di-build. Resource yang dihasilkan oleh
plugin akan disertakan dalam jar hasil
target.
|
proguard_specs
|
Daftar label; default-nya adalah android_binary apa pun yang bergantung pada library ini.
File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn,
assumenosideeffects, dan aturan yang dimulai dengan -keep. Opsi lain hanya dapat muncul di
proguard_specs android_binary , untuk memastikan penggabungan yang tidak tautologis.
|
resource_files
|
Daftar label; default-nya adalah glob dari semua file dalam
direktori res .
File yang dihasilkan (dari genrules) juga dapat direferensikan oleh Label di sini. Satu-satunya batasan adalah output yang dihasilkan harus berada di direktori " res " yang sama dengan file
resource lain yang disertakan.
|
android_instrumentation_test
Melihat 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. Tindakan ini akan
memulai emulator, menginstal aplikasi yang sedang diuji, aplikasi pengujian, dan
aplikasi lain yang diperlukan, serta menjalankan pengujian yang ditentukan dalam paket pengujian.
Atribut test_app menentukan
android_binary
yang berisi pengujian. android_binary
ini pada gilirannya
menentukan aplikasi android_binary
yang sedang diuji melalui
atribut instruments.
Contoh
# java/com/samples/hello_world/BUILD android_library( name = "hello_world_lib", srcs = ["Lib.java"], manifest = "LibraryManifest.xml", resource_files = glob(["res/**"]), ) # The app under test android_binary( name = "hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_lib"], )
# javatests/com/samples/hello_world/BUILD android_library( name = "hello_world_test_lib", srcs = ["Tests.java"], deps = [ "//java/com/samples/hello_world:hello_world_lib", ... # test dependencies such as Espresso and Mockito ], ) # The test app android_binary( name = "hello_world_test_app", instruments = "//java/com/samples/hello_world:hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_test_lib"], ) android_instrumentation_test( name = "hello_world_uiinstrumentation_tests", target_device = ":some_target_device", test_app = ":hello_world_test_app", )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
support_apks
|
Daftar label; default-nya adalah |
target_device
|
Label; wajib diisi android_device tempat pengujian akan dijalankan. Untuk menjalankan pengujian di emulator yang sudah berjalan atau di perangkat fisik, gunakan
argumen ini:
|
test_app
|
Label; wajib diisi Target android_binary yang berisi class pengujian. Targetandroid_binary harus menentukan target yang diuji melalui
atribut instruments .
|
android_local_test
Melihat 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 digunakan 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 pengujian Robolectric.
Target output implisit
name.jar
: Arsip Java pengujian.name-src.jar
: Arsip yang berisi sumber ("source jar").name_deploy.jar
: Arsip deployment Java yang cocok untuk deployment (hanya di-build jika diminta secara eksplisit).
Contoh
Untuk menggunakan Robolectric dengan android_local_test
, tambahkan
repositori
Robolectric ke file WORKSPACE
:
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 Nama unik untuk target ini. |
deps
|
Daftar label; default-nya adalah
Daftar aturan yang diizinkan di |
srcs
|
Daftar label; default-nya adalah File File Semua file lainnya akan diabaikan, selama ada setidaknya satu file dari jenis file yang dijelaskan di atas. Jika tidak, error akan ditampilkan.
Atribut |
custom_package
|
String; default-nya adalah test_class .
|
densities
|
Daftar string; default-nya adalah |
enable_data_binding
|
Boolean; default-nya adalah |
javacopts
|
Daftar string; default-nya adalah Opsi compiler ini diteruskan ke javac setelah opsi compiler global. |
jvm_flags
|
Daftar string; 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 yang diikuti dengan Perhatikan bahwa atribut ini tidak berpengaruh pada output
|
manifest
|
Label; default-nya adalah AndroidManifest.xml .
Harus ditentukan jika resource_files atau aset 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 tag manifes dan
uses-sdk. packageName akan diabaikan dan akan ditetapkan dari
applicationId jika
ditentukan atau paket dalam manifes.
Anda tidak perlu memiliki manifes pada aturan untuk menggunakan manifest_values.
|
nocompress_extensions
|
Daftar string; default-nya adalah |
plugins
|
Daftar label; default-nya adalah java_plugin yang ditentukan dalam atribut ini akan dijalankan setiap kali aturan ini
dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakan
exported_plugins . Resource
yang dihasilkan oleh plugin akan disertakan dalam jar yang dihasilkan dari aturan ini.
|
resource_configuration_filters
|
Daftar string; default-nya adalah |
resource_jars
|
Daftar label; default-nya adalah |
resource_strip_prefix
|
String; default-nya adalah
Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut
|
runtime_deps
|
Daftar label; default-nya adalah deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti
classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus
dicantumkan di sini. Alat analisis dependensi harus mengabaikan target yang muncul di
runtime_deps dan deps .
|
stamp
|
Bilangan bulat; default-nya adalah
Biner yang dicap tidak akan di-build ulang kecuali jika dependensinya berubah. |
test_class
|
String; default-nya adalah
Atribut ini menentukan nama class Java yang akan dijalankan oleh
pengujian ini. Anda jarang perlu menetapkannya. Jika argumen ini dihilangkan, class Java
yang namanya sesuai dengan |
use_launcher
|
Boolean; default-nya adalah Jika atribut ini disetel ke salah (false), atribut
launcher dan flag
|
android_device
Melihat 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 yang diberikan. Emulator ini dapat dimulai melalui perintah bazel run atau dengan menjalankan skrip yang dihasilkan secara langsung. Sebaiknya bergantung pada aturan android_device yang ada, bukan menentukan aturan Anda sendiri.
Aturan ini adalah target yang sesuai untuk tanda --run_under ke pengujian bazel dan menjalankan blaze. Perintah ini memulai emulator, menyalin target yang sedang diuji/dijalankan ke emulator, dan mengujinya atau menjalankannya sebagaimana mestinya.
android_device
mendukung pembuatan image KVM jika
system_image yang mendasarinya 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 image dan snapshot untuk memulai emulatorname_images/emulator-meta-data.pb
: Berisi informasi serialisasi yang diperlukan untuk diteruskan ke emulator agar 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 untuk mengekspos adb. Jika Anda ingin mengeluarkan perintah adb ke emulator, ini adalah port tempat Anda akan mengeluarkan adb connect.
- --emulator_port: Port untuk mengekspos konsol pengelolaan telnet emulator.
- --enable_display: Memulai emulator dengan layar jika benar (defaultnya salah).
- --action: Mulai atau hentikan.
- --apks_to_install: daftar apk yang akan diinstal di emulator.
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
cache
|
Bilangan bulat; wajib diisi Ukuran partisi cache emulator dalam megabyte. Nilai minimumnya adalah 16 megabyte. |
default_properties
|
Label; default-nya adalah |
horizontal_resolution
|
Bilangan bulat; wajib diisi Resolusi layar horizontal dalam piksel yang akan diemulasi. Nilai minimumnya adalah 240. |
platform_apks
|
Daftar label; default-nya adalah |
ram
|
Bilangan bulat; wajib diisi Jumlah RAM dalam megabyte yang akan diemulasi untuk perangkat. Ini berlaku untuk seluruh perangkat, bukan hanya untuk aplikasi tertentu yang diinstal di perangkat. Nilai minimumnya adalah 64 megabyte. |
screen_density
|
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
|
Bilangan bulat; wajib diisi Resolusi layar vertikal dalam piksel yang akan diemulasi. Nilai minimumnya adalah 240. |
vm_heap
|
Bilangan bulat; wajib diisi Ukuran dalam megabyte dari heap virtual machine yang akan digunakan Android untuk setiap proses. Nilai minimumnya adalah 16 megabyte. |
android_ndk_repository
Melihat 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 penerapan android_ndk_repository
ini diganti dengan
penerapan di Starlark. Dukungan untuk versi NDK mendatang termasuk versi 25 dan yang lebih baru akan
diimplementasikan di android_ndk_repository
versi Starlark. Lihat
rules_android_ndk untuk versi
Starlark.
Perhatikan bahwa pembuatan build untuk Android juga memerlukan aturan android_sdk_repository
dalam
file WORKSPACE
Anda.
Untuk informasi selengkapnya, baca dokumentasi lengkap tentang penggunaan Android NDK dengan Bazel.
Contoh
android_ndk_repository( name = "androidndk", )
Contoh di atas akan menemukan Android NDK Anda dari $ANDROID_NDK_HOME
dan mendeteksi
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 berada di dalam ruang kerja Anda di
./android-ndk-r20
. Library ini akan menggunakan library API level 24 saat mengompilasi kode
JDK Anda.
cpufeatures
Android NDK berisi library cpufeatures yang dapat digunakan untuk mendeteksi CPU perangkat saat runtime. Contoh berikut menunjukkan cara menggunakan cpufeatures dengan Bazel.
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
api_level
|
Bilangan bulat; tidak dapat dikonfigurasi; defaultnya adalah |
path
|
String; tidak dapat dikonfigurasi; default-nya 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
Melihat 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
Hal minimum untuk menyiapkan Android SDK untuk Bazel adalah menempatkan aturanandroid_sdk_repository
bernama "androidsdk" dalam file WORKSPACE
dan menetapkan variabel lingkungan
$ANDROID_HOME
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, atribut path
, api_level
, dan
build_tools_version
dapat ditetapkan ke nilai tertentu. Build akan gagal jika
Android SDK tidak menginstal versi alat build atau API level 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 kontrol versi).
Support Library
Support Library tersedia di Android SDK Manager sebagai "Android Support Repository".
Ini adalah kumpulan library Android umum yang diberi versi, seperti library Support dan AppCompat,
yang dipaketkan 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
Repositori Dukungan Android, yang diformat sebagai @androidsdk//${group}:${artifact}-${version}
.
Contoh berikut menunjukkan cara android_library
dapat bergantung pada versi 25.0.0
library appcompat 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 Nama unik untuk target ini. |
api_level
|
Bilangan bulat; tidak dapat dikonfigurasi; defaultnya adalah API level yang digunakan untuk build tertentu dapat diganti dengan flag
Untuk melihat semua target |
build_tools_version
|
String; tidak dapat dikonfigurasi; default-nya adalah Bazel memerlukan alat build versi 30.0.0 atau yang lebih baru. |
path
|
String; tidak dapat dikonfigurasi; default-nya adalah $ANDROID_HOME harus ditetapkan.
Android SDK dapat didownload dari situs developer Android. |
repo_mapping
|
Kamus: String -> String; default-nya adalah Misalnya, entri |