Quy tắc
- 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)
Tạo các tệp gói ứng dụng Android (.apk).
Các mục tiêu đầu ra ngầm ẩn
name.apk
: Một ứng dụng Android tệp của gói được ký bằng khoá gỡ lỗi và zipaligned có thể dùng để phát triển và gỡ lỗi cho ứng dụng của bạn. Bạn không thể phát hành ứng dụng của mình khi được ký bằng khoá gỡ lỗi.name_unsigned.apk
: Phiên bản chưa ký của tệp ở trên có thể được ký bằng các khoá phát hành trước khi phát hành sang cho cộng đồng.name_deploy.jar
: Một kho lưu trữ Java chứa đóng bắc cầu của mục tiêu này.Tệp triển khai chứa tất cả các lớp mà một trình tải lớp đã tìm kiếm đường dẫn lớp thời gian chạy của mục tiêu này từ đầu đến cuối.
name_proguard.jar
: Một kho lưu trữ Java chứa kết quả của việc chạy ProGuard trênname_deploy.jar
Đầu ra này chỉ được tạo nếu Thuộc tính proguard_specs là đã chỉ định.name_proguard.map
: Kết quả tệp ánh xạ của chạy ProGuard trênname_deploy.jar
. Đầu ra này chỉ được tạo nếu Thuộc tính proguard_specs là được chỉ định và proguard_generate_mapping hoặc shrink_resources được đặt.
Ví dụ
Bạn có thể xem ví dụ về các quy tắc Android trong thư mục examples/android
của
Cây nguồn Bazel.
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
android_library ,
java_library với điều kiện ràng buộc android và
cc_library gói hoặc tạo .so thư viện gốc cho
Nền tảng nhắm mục tiêu Android.
|
srcs
|
Hệ thống biên dịch các tệp
|
assets
|
glob của tất cả các tệp trong
Thư mục assets . Bạn cũng có thể tham khảo các quy tắc khác (bất kỳ quy tắc nào tạo ra
tệp) hoặc tệp được xuất trong các gói khác, miễn là tất cả các tệp đó nằm trong
Thư mục assets_dir trong gói tương ứng.
|
assets_dir
|
assets .
Cặp assets và assets_dir mô tả gói được đóng gói
chỉ cung cấp thành phần và cả hai thuộc tính hoặc không cung cấp thuộc tính nào.
|
crunch_png
|
|
custom_package
|
|
debug_key
|
CẢNH BÁO: Không sử dụng khoá sản xuất. Các khoá này phải được bảo vệ nghiêm ngặt và không được lưu giữ trong cây nguồn. |
debug_signing_keys
|
CẢNH BÁO: Không sử dụng khoá sản xuất. Các khoá này phải được bảo vệ nghiêm ngặt và không được lưu giữ trong cây nguồn. |
debug_signing_lineage_file
|
CẢNH BÁO: Không sử dụng khoá sản xuất. Các khoá này phải được bảo vệ nghiêm ngặt và không được lưu giữ trong cây nguồn. |
densities
|
|
dex_shards
|
Lưu ý rằng mỗi phân đoạn sẽ dẫn đến ít nhất một tệp dex trong ứng dụng cuối cùng. Vì lý do này, bạn không nên đặt giá trị này thành nhiều hơn 1 cho tệp nhị phân phát hành. |
dexopts
|
|
enable_data_binding
|
Để tạo một ứng dụng Android có liên kết dữ liệu, bạn cũng phải làm như sau:
|
incremental_dexing
|
|
instruments
|
Mục tiêu Nếu bạn đặt thuộc tính này, |
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn của trình biên dịch chung. |
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 được đặt thành legacy .
|
manifest
|
AndroidManifest.xml .
Phải được xác định nếu tệp resource_file hoặc nội dung đã được xác định.
|
manifest_values
|
|
multidex
|
Các giá trị có thể có:
|
nocompress_extensions
|
|
package_id
|
Xem đối số |
plugins
|
java_plugin được chỉ định trong
thuộc tính trình bổ trợ sẽ được chạy bất cứ khi nào
mục tiêu này sẽ được tạo. Tài nguyên được tạo bởi
plugin sẽ được bao gồm trong ngăn kết quả của
mục tiêu.
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
proguard_generate_mapping tạo
được sử dụng lại để áp dụng cùng một mối liên kết cho bản dựng mới.
|
proguard_generate_mapping
|
proguard_specs được
đã chỉ định. Tệp này sẽ liệt kê mối liên kết giữa ban đầu và
lớp, phương thức và tên trường bị làm rối mã nguồn.
CẢNH BÁO: Nếu thuộc tính này được sử dụng, Proguard
quy cách không được chứa |
proguard_specs
|
|
resource_configuration_filters
|
en_XA và/hoặc ar_XB .
|
resource_files
|
glob của tất cả các tệp trong
Thư mục res .
Các tệp đã tạo (từ genrules) có thể được tham chiếu bằng Bạn cũng có thể Gắn nhãn tại đây. Hạn chế duy nhất là các dữ liệu đầu ra được tạo phải nằm trong cùng một " res " như bất kỳ thư mục nào khác
tệp tài nguyên được bao gồm.
|
shrink_resources
|
manifest và resource_files ) đồng thời yêu cầu ProGuard.
Công cụ này hoạt động gần như giống với trình rút gọn tài nguyên Gradle
(https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
Điểm khác biệt đáng chú ý:
name_files/resource_shrinker.log
cũng sẽ được tạo để cung cấp thông tin chi tiết về quá trình phân tích và xoá đã được thực hiện.
Các loại tệp có thể được thu thập dữ liệu bao gồm:
|
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)
Quy tắc này cho phép sử dụng tệp .aar
làm thư viện cho
android_library
và
android_binary
quy tắc.
Ví dụ
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"], )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
aar
|
.aar để cung cấp cho các mục tiêu Android phụ thuộc vào mục tiêu này.
|
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)
Quy tắc này biên dịch và lưu trữ các nguồn vào một tệp .jar
.
Thư viện Android Runtime android.jar
được ngầm thiết lập
đường dẫn lớp biên dịch.
Các mục tiêu đầu ra ngầm ẩn
libname.jar
: Một tệp lưu trữ Java.libname-src.jar
: Tệp lưu trữ chứa nguồn ("jar nguồn").name.aar
: Một "aar" trên Android gói chứa kho lưu trữ java và tài nguyên của mục tiêu này. Tham số này không chứa đóng bắt buộc.
Ví dụ
Bạn có thể xem ví dụ về các quy tắc Android trong thư mục examples/android
của
Cây nguồn Bazel.
Ví dụ sau cho thấy
cách thiết lập idl_import_root
.
Cho phép //java/bazel/helloandroid/BUILD
chứa:
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"], )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
android_library ,
java_library với điều kiện ràng buộc android và
cc_library gói hoặc tạo .so thư viện gốc
cho nền tảng mục tiêu Android.
|
srcs
|
.java hoặc .srcjar
được xử lý để tạo mục tiêu.
Hệ thống biên dịch các tệp
Nếu |
assets
|
glob của tất cả các tệp trong
Thư mục assets . Bạn cũng có thể tham khảo các quy tắc khác (bất kỳ quy tắc nào tạo ra
tệp) hoặc tệp được xuất trong các gói khác, miễn là tất cả các tệp đó nằm trong
Thư mục assets_dir trong gói tương ứng.
|
assets_dir
|
assets .
Cặp assets và assets_dir mô tả gói được đóng gói
chỉ cung cấp thành phần và cả hai thuộc tính hoặc không cung cấp thuộc tính nào.
|
custom_package
|
|
enable_data_binding
|
Để tạo một ứng dụng Android có liên kết dữ liệu, bạn cũng phải làm như sau:
|
exported_plugins
|
java_plugin (ví dụ: chú giải
bộ xử lý) để xuất sang các thư viện phụ thuộc trực tiếp vào thư viện này.
Danh sách |
exports
|
exports
được coi là phần phụ thuộc trực tiếp của bất kỳ quy tắc nào phụ thuộc trực tiếp vào
mục tiêu bằng exports .
|
exports_manifest
|
android_binary hay không
phụ thuộc vào mục tiêu này. Thuộc tính uses-permissions không bao giờ được xuất.
|
idl_import_root
|
Đường dẫn này sẽ được dùng làm gốc nhập khi xử lý các nguồn không hoạt động phụ thuộc vào thư viện này. Khi bạn chỉ định Xem ví dụ. |
idl_parcelables
|
android_library phụ thuộc trực tiếp vào thư viện này
hoặc qua đóng bắc cầu, nhưng sẽ không được dịch sang Java
hoặc được biên dịch.
Chỉ có Bạn phải đặt các tệp này ở vị trí phù hợp để trình biên dịch AIdl tìm được tệp. Xem mô tả về idl_import_root để biết thông tin về ý nghĩa của điều này. |
idl_preprocessed
|
android_library phụ thuộc trực tiếp vào thư viện này
hoặc qua đóng bắc cầu, nhưng sẽ không được dịch sang Java
hoặc được biên dịch.
Chỉ những tệp |
idl_srcs
|
srcs .
Các tệp này sẽ được cung cấp dưới dạng tệp nhập cho bất kỳ
Mục tiêu Bạn phải đặt các tệp này ở vị trí phù hợp để trình biên dịch AIdl tìm được tệp. Xem mô tả về idl_import_root để biết thông tin về ý nghĩa của điều này. |
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn của trình biên dịch chung. |
manifest
|
AndroidManifest.xml .
Phải được xác định nếu tệp resource_file hoặc nội dung đã được xác định.
|
neverlink
|
neverlink sẽ không được dùng trong
Tạo .apk . Hữu ích nếu thư viện được cung cấp bởi
môi trường thời gian chạy trong quá trình thực thi.
|
plugins
|
java_plugin được chỉ định trong
thuộc tính trình bổ trợ sẽ được chạy bất cứ khi nào
mục tiêu này sẽ được tạo. Tài nguyên được tạo bởi
plugin sẽ được bao gồm trong ngăn kết quả của
mục tiêu.
|
proguard_specs
|
android_binary nào tuỳ thuộc vào thư viện này.
Các tệp được đưa vào đây chỉ được có các quy tắc không thay đổi giá trị như -dontnote, -dontwarn,
giả định tác dụng không mong muốn và các quy tắc bắt đầu bằng -keep. Các lựa chọn khác chỉ có thể xuất hiện trong
proguard_specs của android_binary để đảm bảo hợp nhất không tự động.
|
resource_files
|
glob của tất cả các tệp trong
Thư mục res .
Các tệp đã tạo (từ genrules) có thể được tham chiếu bằng Bạn cũng có thể Gắn nhãn tại đây. Hạn chế duy nhất là các dữ liệu đầu ra được tạo phải nằm trong cùng một " res " như bất kỳ thư mục nào khác
tệp tài nguyên được bao gồm.
|
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)
Quy tắc android_instrumentation_test
chạy kiểm thử đo lường Android. Việc này sẽ
khởi động trình mô phỏng, cài đặt ứng dụng đang được kiểm thử, ứng dụng kiểm thử và
bất kỳ ứng dụng cần thiết nào khác và chạy các kiểm thử được xác định trong gói kiểm thử.
Thuộc tính test_app chỉ định
android_binary
chứa hoạt động kiểm thử này. Lần lượt android_binary
này
chỉ định ứng dụng android_binary
đang được kiểm thử thông qua
thuộc tính Instruments (thiết bị đo lường).
Ví dụ:
# 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", )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
support_apks
|
|
target_device
|
android_device sẽ chạy kiểm thử. Để chạy kiểm thử trên một trình mô phỏng đã chạy hoặc trên thiết bị thực, hãy sử dụng
các đối số này:
|
test_app
|
android_binary phải chỉ định mục tiêu mà nó đang thử nghiệm thông qua
thuộc tính instruments .
|
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)
Quy tắc này dành cho các quy tắc android_library
kiểm thử đơn vị trên thiết bị
(chứ không phải trên thiết bị).
Công cụ này hoạt động với khung kiểm thử Android Robolectric.
Xem trang web Android Robolectric để biết chi tiết về
viết chương trình kiểm thử Robolectric.
Các mục tiêu đầu ra ngầm ẩn
name.jar
: Tệp lưu trữ Java của kiểm thử.name-src.jar
: Tệp lưu trữ chứa các nguồn ("jar nguồn").name_deploy.jar
: Lưu trữ triển khai Java phù hợp để triển khai (chỉ tạo khi được yêu cầu rõ ràng).
Ví dụ
Để sử dụng Robolectric với android_local_test
, hãy thêm
Robolectric của
kho lưu trữ vào tệp WORKSPACE
:
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
cần thiết cho Robolectric.
Sau đó, mỗi quy tắc android_local_test
sẽ phụ thuộc vào
@robolectric//bazel:robolectric
Hãy xem ví dụ bên dưới.
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", )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách các quy tắc được phép trong |
srcs
|
Hệ thống biên dịch các tệp
Tất cả các tệp khác sẽ bị bỏ qua, miễn là có ít nhất một tệp thuộc loại tệp được mô tả ở trên. Nếu không, đã xảy ra lỗi.
Thuộc tính |
custom_package
|
test_class .
|
densities
|
|
enable_data_binding
|
|
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn của trình biên dịch chung. |
jvm_flags
|
Tập lệnh trình bao bọc cho một tệp nhị phân Java bao gồm định nghĩa CLASSPATH
(để tìm tất cả các tệp jar phụ thuộc) và gọi trình thông dịch Java phù hợp.
Dòng lệnh do tập lệnh trình bao bọc tạo ra bao gồm tên của
lớp chính theo sau là Xin lưu ý rằng thuộc tính này không ảnh hưởng đến |
manifest
|
AndroidManifest.xml .
Phải được xác định nếu resource_file hoặc nội dung được xác định hoặc nếu bất kỳ tệp kê khai nào từ
các thư viện đang được kiểm thử có chứa thẻ minSdkVersion .
|
manifest_values
|
applicationId , versionCode , versionName
minSdkVersion , targetSdkVersion và
maxSdkVersion cũng sẽ ghi đè các thuộc tính tương ứng
của tệp kê khai và
sử dụng-sdk thẻ. packageName sẽ bị bỏ qua và được thiết lập từ
applicationId nếu
đã chỉ định hoặc gói trong tệp kê khai.
Bạn không cần phải có tệp kê khai trong quy tắc để sử dụng manifest_values.
|
nocompress_extensions
|
|
plugins
|
java_plugin được chỉ định trong thuộc tính này sẽ chạy bất cứ khi nào quy tắc này
sẽ được xây dựng. Thư viện cũng có thể kế thừa trình bổ trợ từ các phần phụ thuộc sử dụng
exported_plugins . Tài liệu tham khảo
do trình bổ trợ tạo ra sẽ được đưa vào ngăn chứa kết quả của quy tắc này.
|
resource_configuration_filters
|
|
resource_jars
|
|
resource_strip_prefix
|
Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong |
runtime_deps
|
deps thông thường, các thành phần này sẽ xuất hiện trên đường dẫn lớp thời gian chạy, nhưng không giống như
chúng, chứ không phải trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần đến trong thời gian chạy phải là
được liệt kê tại đây. Các công cụ phân tích phần phụ thuộc nên bỏ qua các mục tiêu xuất hiện trong cả
runtime_deps và deps .
|
stamp
|
Tệp nhị phân đã đóng dấu không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi. |
test_class
|
Thuộc tính này chỉ định tên của lớp Java sẽ được chạy
kiểm tra này. Việc thiết lập chế độ này hiếm khi xảy ra. Nếu đối số này bị bỏ qua, lớp Java
có tên tương ứng với |
use_launcher
|
Nếu bạn đặt thuộc tính này thành false, thì
trình chạy và thuộc tính có liên quan
Cờ |
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)
Quy tắc này tạo một trình mô phỏng Android được định cấu hình với thông số kỹ thuật. Bạn có thể khởi động trình mô phỏng này thông qua chạy bazel hoặc bằng cách trực tiếp thực thi tập lệnh đã tạo. Nên phụ thuộc vào trên các quy tắc android_device hiện tại thay vì tự xác định.
Quy tắc này là mục tiêu phù hợp cho cờ --run_under để thử nghiệm và kích hoạt chạy. Thao tác này sẽ khởi động một trình mô phỏng, sao chép mục tiêu đang được kiểm thử/chạy vào trình mô phỏng. rồi thử nghiệm hoặc chạy công cụ đó khi thích hợp.
android_device
hỗ trợ tạo hình ảnh KVM nếu
system_image dựa trên X86 và
được tối ưu hoá cho tối đa kiến trúc CPU I686. Để sử dụng KVM, hãy thêm
tags = ['requires-kvm']
cho quy tắc android_device
.
Các mục tiêu đầu ra ngầm ẩn
name_images/userdata.dat
: Chứa tệp hình ảnh và ảnh chụp nhanh để khởi động trình mô phỏngname_images/emulator-meta-data.pb
: Chứa thông tin được chuyển đổi tuần tự cần thiết để truyền vào trình mô phỏng khởi động lại nó.
Ví dụ
Ví dụ sau cho biết cách sử dụng android_device.
//java/android/helloandroid/BUILD
chứa
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
chứa:
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
Quy tắc này sẽ tạo hình ảnh và một tập lệnh khởi động. Bạn có thể khởi động trình mô phỏng cục bộ bằng cách thực thi bazel run :nexus_s -- --action=start. Tập lệnh hiển thị cờ sau:
- --adb_port: Cổng để hiển thị adb. Nếu bạn muốn phát hành adb các lệnh cho trình mô phỏng, đây là cổng bạn sẽ phát hành adb connect sang.
- --emulator_port: Cổng để hiển thị tính năng quản lý telnet của trình mô phỏng bảng điều khiển bật.
- --enable_display: Khởi động trình mô phỏng bằng một màn hình nếu giá trị là true (mặc định) thành false).
- --action: Bắt đầu hoặc dừng.
- --apks_to_install: danh sách tệp APK để cài đặt trên trình mô phỏng.
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
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)
Định cấu hình cho Bazel sử dụng Android NDK nhằm hỗ trợ việc tạo mục tiêu Android bằng mã gốc .
Xin lưu ý rằng việc xây dựng cho Android cũng yêu cầu quy tắc android_sdk_repository
trong
WORKSPACE
.
Để biết thêm thông tin, hãy đọc tài liệu đầy đủ về cách sử dụng Android NDK với Bazel.
Ví dụ
android_ndk_repository( name = "androidndk", )
Ví dụ ở trên sẽ định vị Android NDK qua $ANDROID_NDK_HOME
và phát hiện
cấp độ API cao nhất mà hệ thống hỗ trợ.
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
Ví dụ trên sẽ sử dụng Android NDK nằm bên trong không gian làm việc của bạn trong
./android-ndk-r20
. Thư viện này sẽ sử dụng thư viện API cấp 24 khi biên dịch JNI
.
tính năng cpu
Android NDK chứa thư viện cpufeatures có thể dùng để phát hiện CPU của thiết bị trong thời gian chạy. Ví dụ sau đây minh hoạ cách sử dụng cpufeatures bằng Bazel.
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
api_level
|
|
path
|
$ANDROID_NDK_HOME .
Bạn có thể tải Android NDK xuống từ trang web dành cho nhà phát triển Android |
repo_mapping
|
Ví dụ: mục nhập |
android_sdk_repository
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Định cấu hình Bazel để sử dụng SDK Android cục bộ nhằm hỗ trợ tạo mục tiêu Android.
Ví dụ
Cách tối thiểu để thiết lập SDK Android cho Bazel là đặt quy tắcandroid_sdk_repository
có tên là "androidsdk" trong tệp WORKSPACE
và đặt $ANDROID_HOME
biến môi trường vào đường dẫn của SDK Android của bạn. Bazel sẽ sử dụng cấp độ API Android cao nhất
và phiên bản công cụ xây dựng được cài đặt trong SDK Android theo mặc định.
android_sdk_repository( name = "androidsdk", )
Để đảm bảo các bản dựng có thể tái tạo, path
, api_level
và
Bạn có thể đặt các thuộc tính build_tools_version
thành các giá trị cụ thể. Quá trình tạo sẽ không thành công nếu
SDK Android chưa cài đặt cấp độ API hoặc phiên bản công cụ bản dựng được chỉ định.
android_sdk_repository( name = "androidsdk", path = "./sdk", api_level = 19, build_tools_version = "25.0.0", )
Ví dụ ở trên cũng minh hoạ việc sử dụng đường dẫn tương đối với không gian làm việc đến SDK Android. Đây là hữu ích nếu SDK Android là một phần trong không gian làm việc Bazel của bạn (ví dụ: nếu SDK đó được kiểm tra trong phiên bản kiểm soát).
Thư viện hỗ trợ
Thư viện hỗ trợ có trong Trình quản lý SDK Android dưới dạng "Kho lưu trữ hỗ trợ Android".
Đây là tập hợp các thư viện Android phổ biến được lập phiên bản, chẳng hạn như thư viện Support và AppCompat,
được đóng gói dưới dạng kho lưu trữ Maven cục bộ. android_sdk_repository
tạo Bazel
mục tiêu cho mỗi thư viện trong số này. Các mục tiêu này có thể được sử dụng trong các phần phụ thuộc của
Mục tiêu android_binary
và android_library
.
Tên của các mục tiêu đã tạo được lấy từ toạ độ Maven của các thư viện trong
Kho lưu trữ hỗ trợ Android, có định dạng là @androidsdk//${group}:${artifact}-${version}
.
Ví dụ sau đây cho thấy cách android_library
có thể phụ thuộc vào phiên bản 25.0.0 của
thư viện 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"], )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
api_level
|
Để xem tất cả |
build_tools_version
|
Bazel yêu cầu công cụ xây dựng phiên bản 30.0.0 trở lên. |
path
|
$ANDROID_HOME .
Bạn có thể tải SDK Android xuống từ trang web dành cho nhà phát triển Android. |
repo_mapping
|
Ví dụ: mục nhập |