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
Xem nguồn quy tắcandroid_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 ra các tệp gói ứng dụng Android (.apk).
Mục tiêu đầu ra ngầm ẩn
name.apk
: Tệp gói ứng dụng Android được ký bằng khoá gỡ lỗi và được căn chỉnh theo tệp zip, có thể dùng để phát triển và gỡ lỗi ứng dụng của bạn. Bạn không thể phát hành ứng dụng khi ký bằng khoá gỡ lỗi.name_unsigned.apk
: Một phiên bản chưa ký của tệp nêu trên có thể được ký bằng khoá phát hành trước khi phát hành cho công chúng.name_deploy.jar
: Một kho lưu trữ Java chứa bao đóng bắc cầu của mục tiêu này.Tệp jar triển khai chứa tất cả các lớp mà một trình tải lớp sẽ tìm thấy khi 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 bạn chỉ định thuộc tính proguard_specs.name_proguard.map
: Kết quả của tệp ánh xạ khi chạy ProGuard trênname_deploy.jar
. Đầu ra này chỉ được tạo nếu bạn chỉ định thuộc tính proguard_specs và đặt proguard_generate_mapping hoặc shrink_resources.
Ví dụ
Bạn có thể tìm thấy các ví dụ về 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; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là android_library , java_library có ràng buộc android và cc_library bao bọc hoặc tạo ra các thư viện gốc .so cho nền tảng mục tiêu Android.
|
srcs
|
Danh sách nhãn; mặc định là Các tệp Các tệp |
assets
|
Danh sách nhãn; mặc định là glob của tất cả các tệp trong thư mục assets . Bạn cũng có thể tham chiếu các quy tắc khác (bất kỳ quy tắc nào tạo ra tệp) hoặc tệp đã 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
|
Chuỗi; giá trị mặc định là assets .
Cặp assets và assets_dir mô tả các tài sản được đóng gói và bạn phải cung cấp cả hai thuộc tính hoặc không cung cấp thuộc tính nào.
|
crunch_png
|
Boolean; giá trị mặc định là |
custom_package
|
Chuỗi; giá trị mặc định là |
debug_key
|
Nhãn; mặc định là CẢNH BÁO: Không sử dụng khoá phát hành chính thức, bạn phải bảo vệ nghiêm ngặt và không lưu trữ khoá này trong cây nguồn. |
debug_signing_keys
|
Danh sách nhãn; mặc định là CẢNH BÁO: Không sử dụng khoá phát hành chính thức, bạn phải bảo vệ nghiêm ngặt và không lưu trữ khoá này trong cây nguồn. |
debug_signing_lineage_file
|
Nhãn; mặc định là CẢNH BÁO: Không sử dụng khoá phát hành chính thức, bạn phải bảo vệ nghiêm ngặt và không lưu trữ khoá này trong cây nguồn. |
densities
|
Danh sách các chuỗi; mặc định là |
dex_shards
|
Số nguyên; giá trị mặc định là Lưu ý rằng mỗi phân đoạn sẽ tạo ra ít nhất một 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 lớn hơn 1 cho các tệp nhị phân phát hành. |
dexopts
|
Danh sách các chuỗi; mặc định là |
enable_data_binding
|
Boolean; giá trị mặc định là Để 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
|
Số nguyên; không thể định cấu hình; mặc định là |
instruments
|
Nhãn; mặc định là Mục tiêu Nếu bạn đặt thuộc tính này, |
javacopts
|
Danh sách các chuỗi; mặc định là Các lựa chọn trình biên dịch này được truyền đến javac sau các lựa chọn trình biên dịch chung. |
key_rotation_min_sdk
|
Chuỗi; giá trị mặc định là |
main_dex_list
|
Nhãn; mặc định là 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
|
Danh sách các chuỗi; mặc định là |
main_dex_proguard_specs
|
Danh sách nhãn; mặc định là multidex thành legacy .
|
manifest
|
Nhãn; bắt buộc Tên của tệp kê khai Android, thường làAndroidManifest.xml .
Bạn phải xác định nếu resource_files hoặc thành phần được xác định.
|
manifest_values
|
Từ điển: Chuỗi -> Chuỗi; mặc định là
Mọi thực thể của
Khi bạn đặt |
multidex
|
Chuỗi; giá trị mặc định là Các giá trị có thể:
|
nocompress_extensions
|
Danh sách các chuỗi; mặc định là |
package_id
|
Số nguyên; giá trị mặc định là Hãy xem đối số |
plugins
|
Danh sách nhãn; mặc định là java_plugin được chỉ định trong thuộc tính trình bổ trợ sẽ chạy bất cứ khi nào mục tiêu này được tạo. Các tài nguyên do trình bổ trợ tạo sẽ được đưa vào tệp jar kết quả của mục tiêu.
|
proguard_apply_dictionary
|
Nhãn; mặc định là |
proguard_apply_mapping
|
Nhãn; mặc định là proguard_generate_mapping tạo ra để được sử dụng lại nhằm áp dụng cùng một hoạt động ánh xạ cho một bản dựng mới.
|
proguard_generate_mapping
|
Boolean; không thể định cấu hình; mặc định là proguard_specs . Tệp này sẽ liệt kê mối liên kết giữa tên lớp, phương thức và trường ban đầu với tên đã bị làm rối mã nguồn.
CẢNH BÁO: Nếu bạn sử dụng thuộc tính này, thì quy cách Proguard không được chứa |
proguard_specs
|
Danh sách nhãn; mặc định là |
resource_configuration_filters
|
Danh sách các chuỗi; mặc định là en_XA và/hoặc ar_XB .
|
resource_files
|
Danh sách nhãn; mặc định là glob của tất cả các tệp trong thư mục res .
Các tệp được tạo (từ genrules) cũng có thể được tham chiếu theo Nhãn tại đây. Hạn chế duy nhất là các đầu ra được tạo phải nằm trong cùng một thư mục " res " như mọi tệp tài nguyên khác được đưa vào.
|
shrink_resources
|
Số nguyên; giá trị mặc định là manifest và resource_files ) và yêu cầu ProGuard.
Công cụ này hoạt động theo cách tương tự như công cụ rút gọn tài nguyên Gradle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
Những điểm khác biệt đáng chú ý:
name_files/resource_shrinker.log cũng sẽ được tạo, nêu chi tiết về quy trình phân tích và xoá đã thực hiện.
Các loại tệp có thể được thu thập dữ liệu bao gồm:
|
aar_import
Xem nguồn quy tắcaar_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 các tệp .aar
làm thư viện cho các quy tắc android_library
và android_binary
.
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; bắt buộc Tên riêng cho mục tiêu này. |
aar
|
Nhãn; bắt buộc Tệp.aar cần cung cấp cho các mục tiêu Android phụ thuộc vào mục tiêu này.
|
exports
|
Danh sách nhãn; mặc định là |
srcjar
|
Nhãn; mặc định là |
android_library
Xem nguồn quy tắcandroid_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 của quy tắc vào một tệp .jar
.
Thư viện thời gian chạy Android android.jar
được đặt ngầm trên đường dẫn lớp biên dịch.
Mục tiêu đầu ra ngầm ẩn
libname.jar
: Kho lưu trữ Java.libname-src.jar
: Một kho lưu trữ chứa các nguồn ("source jar").name.aar
: Một gói "aar" của Android chứa kho lưu trữ java và tài nguyên của mục tiêu này. Không chứa bao đóng bắc cầu.
Ví dụ
Bạn có thể tìm thấy các ví dụ về quy tắc Android trong thư mục examples/android
của cây nguồn Bazel.
Ví dụ sau đây 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; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là android_library , java_library có ràng buộc android và cc_library bao bọc hoặc tạo ra các thư viện gốc .so cho nền tảng mục tiêu Android.
|
srcs
|
Danh sách nhãn; mặc định là .java hoặc .srcjar được xử lý để tạo mục tiêu.
Các tệp Các tệp Nếu bạn bỏ qua |
assets
|
Danh sách nhãn; mặc định là glob của tất cả các tệp trong thư mục assets . Bạn cũng có thể tham chiếu các quy tắc khác (bất kỳ quy tắc nào tạo ra tệp) hoặc tệp đã 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
|
Chuỗi; giá trị mặc định là assets .
Cặp assets và assets_dir mô tả các tài sản được đóng gói và bạn phải cung cấp cả hai thuộc tính hoặc không cung cấp thuộc tính nào.
|
custom_package
|
Chuỗi; giá trị mặc định là |
enable_data_binding
|
Boolean; giá trị mặc định là Để 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
|
Danh sách nhãn; mặc định là java_plugin (ví dụ: trình xử lý chú thích) để 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
|
Danh sách nhãn; mặc định là exports được coi là các 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 có exports .
|
exports_manifest
|
Số nguyên; giá trị mặc định là android_binary phụ thuộc vào mục tiêu này hay không. Thuộc tính uses-permissions không bao giờ được xuất.
|
idl_import_root
|
Chuỗi; giá trị mặc định là Đường dẫn này sẽ được dùng làm gốc nhập khi xử lý các nguồn idl phụ thuộc vào thư viện này. Khi Xem ví dụ. |
idl_parcelables
|
Danh sách nhãn; mặc định là android_library phụ thuộc vào thư viện này, trực tiếp hoặc thông qua bao đóng bắc cầu, nhưng sẽ không được dịch sang Java hoặc biên dịch.
Chỉ nên đưa vào các tệp Bạn phải đặt các tệp này đúng cách để trình biên dịch aidl tìm thấy chúng. Hãy xem phần mô tả về idl_import_root để biết thông tin về ý nghĩa của tham số này. |
idl_preprocessed
|
Danh sách nhãn; mặc định là android_library phụ thuộc vào thư viện này, trực tiếp hoặc thông qua bao đóng bắc cầu, nhưng sẽ không được dịch sang Java hoặc biên dịch.
Bạn chỉ nên thêm các tệp |
idl_srcs
|
Danh sách nhãn; mặc định là srcs .
Các tệp này sẽ được cung cấp dưới dạng các mục nhập cho mọi mục tiêu Bạn phải đặt các tệp này đúng cách để trình biên dịch aidl tìm thấy chúng. Hãy xem phần mô tả về idl_import_root để biết thông tin về ý nghĩa của tham số này. |
javacopts
|
Danh sách các chuỗi; mặc định là Các lựa chọn trình biên dịch này được truyền đến javac sau các lựa chọn trình biên dịch chung. |
manifest
|
Nhãn; mặc định là AndroidManifest.xml .
Bạn phải xác định nếu resource_files hoặc thành phần được xác định.
|
neverlink
|
Boolean; giá trị mặc định là neverlink sẽ không được dùng trong quá trình tạo .apk . Hữu ích nếu thư viện sẽ được môi trường thời gian chạy cung cấp trong quá trình thực thi.
|
plugins
|
Danh sách nhãn; mặc định là java_plugin được chỉ định trong thuộc tính trình bổ trợ sẽ chạy bất cứ khi nào mục tiêu này được tạo. Các tài nguyên do trình bổ trợ tạo sẽ được đưa vào tệp jar kết quả của mục tiêu.
|
proguard_specs
|
Danh sách nhãn; mặc định là android_binary tuỳ thuộc vào thư viện này.
Các tệp có trong đây chỉ được có các quy tắc bất biến, cụ thể là -dontnote, -dontwarn, assumenosideeffects 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 các lần hợp nhất không trùng lặp.
|
resource_files
|
Danh sách nhãn; mặc định là glob của tất cả các tệp trong thư mục res .
Các tệp được tạo (từ genrules) cũng có thể được tham chiếu theo Nhãn tại đây. Hạn chế duy nhất là các đầu ra được tạo phải nằm trong cùng một thư mục " res " như mọi tệp tài nguyên khác được đưa vào.
|
android_instrumentation_test
Xem nguồn quy tắcandroid_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 các kiểm thử đo lường của Android. Thao tác này sẽ khởi động một trình mô phỏng, cài đặt ứng dụng đang được kiểm thử, ứng dụng kiểm thử và mọi ứng dụng cần thiết khác, đồng thời 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 kiểm thử. Đế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.
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; bắt buộc Tên riêng cho mục tiêu này. |
support_apks
|
Danh sách nhãn; mặc định là |
target_device
|
Nhãn; bắt buộc android_device mà bạn nên chạy kiểm thử trên đó. Để chạy kiểm thử trên một trình mô phỏng đang chạy hoặc trên một thiết bị thực, hãy dùng các đối số sau:
|
test_app
|
Nhãn; bắt buộc Mục tiêu android_binary chứa các lớp kiểm thử. Mục tiêuandroid_binary phải chỉ định mục tiêu mà nó đang kiểm thử thông qua thuộc tính instruments .
|
android_local_test
Xem nguồn quy tắcandroid_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 kiểm thử đơn vị android_library
các quy tắc cục bộ (thay vì trên thiết bị).
Thư viện này hoạt động với khung kiểm thử Robolectric của Android.
Hãy xem trang web Android Robolectric để biết thông tin chi tiết về cách viết các kiểm thử Robolectric.
Mục tiêu đầu ra ngầm ẩn
name.jar
: Kho lưu trữ Java của kiểm thử.name-src.jar
: Một kho lưu trữ chứa các nguồn ("source jar").name_deploy.jar
: Một kho lưu trữ triển khai Java phù hợp để triển khai (chỉ được tạo nếu được yêu cầu rõ ràng).
Ví dụ
Để sử dụng Robolectric với android_local_test
, hãy thêm kho lưu trữ của Robolectric vào tệp 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
cần thiết cho Robolectric.
Sau đó, mỗi quy tắc android_local_test
phải phụ thuộc vào @robolectric//bazel:robolectric
. Hãy xem ví dụ dưới đây.
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", )
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là
Danh sách các quy tắc được phép trong |
srcs
|
Danh sách nhãn; mặc định là Các tệp Các tệp Tất cả các tệp khác đều 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, lỗi sẽ xảy ra.
Bạn phải cung cấp thuộc tính |
custom_package
|
Chuỗi; giá trị mặc định là test_class .
|
densities
|
Danh sách các chuỗi; mặc định là |
enable_data_binding
|
Boolean; giá trị mặc định là |
javacopts
|
Danh sách các chuỗi; mặc định là Các lựa chọn trình biên dịch này được truyền đến javac sau các lựa chọn trình biên dịch chung. |
jvm_flags
|
Danh sách các chuỗi; mặc định là Tập lệnh trình bao bọc cho một tệp nhị phân Java bao gồm một đị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 các đầu ra |
manifest
|
Nhãn; mặc định là AndroidManifest.xml .
Bạn phải xác định nếu resource_files hoặc assets được xác định hoặc nếu bất kỳ tệp kê khai nào trong số các thư viện đang được kiểm thử có thẻ minSdkVersion trong đó.
|
manifest_values
|
Từ điển: Chuỗi -> Chuỗi; mặc định là 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à thẻ uses-sdk. packageName sẽ bị bỏ qua và được đặt từ applicationId (nếu được chỉ định) hoặc gói trong tệp kê khai.
Bạn không cần phải có tệp kê khai trên quy tắc để sử dụng manifest_values.
|
nocompress_extensions
|
Danh sách các chuỗi; mặc định là |
plugins
|
Danh sách nhãn; mặc định là 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 được tạo. Một thư viện cũng có thể kế thừa các trình bổ trợ từ những phần phụ thuộc sử dụng exported_plugins . Các tài nguyên do trình bổ trợ tạo sẽ được đưa vào tệp jar kết quả của quy tắc này.
|
resource_configuration_filters
|
Danh sách các chuỗi; mặc định là |
resource_jars
|
Danh sách nhãn; mặc định là |
resource_strip_prefix
|
Chuỗi; giá trị mặc định là
Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong thuộc tính |
runtime_deps
|
Danh sách nhãn; mặc định là deps thông thường, các tệp 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ư các tệp đó, các tệp này sẽ không xuất hiện trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần trong thời gian chạy sẽ được liệt kê ở đây. Các công cụ phân tích phần phụ thuộc sẽ bỏ qua những mục tiêu xuất hiện trong cả runtime_deps và deps .
|
stamp
|
Số nguyên; giá trị mặc định là
Các tệp nhị phân được đóng dấu sẽ không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi. |
test_class
|
Chuỗi; giá trị mặc định là
Thuộc tính này chỉ định tên của một lớp Java sẽ được chạy bằng kiểm thử này. Bạn hiếm khi cần đặt thông số này. Nếu bạn bỏ qua đối số này, lớp Java có tên tương ứng với |
use_launcher
|
Boolean; giá trị mặc định là Nếu bạn đặt thuộc tính này thành false, thì thuộc tính launcher và cờ |
android_device
Xem nguồn quy tắcandroid_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 theo các thông số kỹ thuật đã cho. Bạn có thể khởi động trình mô phỏng này thông qua lệnh bazel run hoặc bằng cách thực thi trực tiếp tập lệnh đã tạo. Bạn nên phụ thuộc vào các quy tắc android_device hiện có thay vì xác định quy tắc của riêng mình.
Quy tắc này là mục tiêu phù hợp cho cờ --run_under đối với bazel test và blaze run. 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 và kiểm thử hoặc chạy mục tiêu đó nếu thích hợp.
android_device
hỗ trợ việc tạo hình ảnh KVM nếu system_image cơ bản 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']
vào quy tắc android_device
.
Mục tiêu đầu ra ngầm ẩn
name_images/userdata.dat
: Chứa các 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 đến trình mô phỏng nhằm khởi động lại trình mô phỏng.
Ví dụ
Ví dụ sau đây minh hoạ 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 ra 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 này hiển thị các cờ sau:
- --adb_port: Cổng để hiển thị adb. Nếu muốn gửi lệnh adb đến trình mô phỏng, thì đây là cổng mà bạn sẽ gửi lệnh adb connect đến.
- --emulator_port: Cổng để hiển thị bảng điều khiển quản lý telnet của trình mô phỏng.
- --enable_display: Khởi động trình mô phỏng có màn hình nếu đúng (mặc định là sai).
- --action: Bắt đầu hoặc kết thúc.
- --apks_to_install: danh sách các apk cần cài đặt trên trình mô phỏng.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên riêng cho mục tiêu này. |
cache
|
Số nguyên; bắt buộc Kích thước tính bằng megabyte của phân vùng bộ nhớ đệm của trình mô phỏng. Giá trị tối thiểu của tham số này là 16 megabyte. |
default_properties
|
Nhãn; mặc định là |
horizontal_resolution
|
Số nguyên; bắt buộc Độ phân giải màn hình ngang tính bằng pixel để mô phỏng. Giá trị tối thiểu là 240. |
platform_apks
|
Danh sách nhãn; mặc định là |
ram
|
Số nguyên; bắt buộc Dung lượng RAM (tính bằng megabyte) cần mô phỏng cho thiết bị. Đây là chế độ cài đặt cho toàn bộ thiết bị, chứ không chỉ cho một ứng dụng cụ thể được cài đặt trên thiết bị. Giá trị tối thiểu là 64 megabyte. |
screen_density
|
Số nguyên; bắt buộc Mật độ của màn hình được mô phỏng, tính bằng số pixel trên mỗi inch. Giá trị tối thiểu của thông tin này là 30 ppi. |
system_image
|
Nhãn; bắt buộc Một nhóm tệp chứa các tệp sau:
|
vertical_resolution
|
Số nguyên; bắt buộc Độ phân giải màn hình dọc tính bằng pixel để mô phỏng. Giá trị tối thiểu là 240. |
vm_heap
|
Số nguyên; bắt buộc Kích thước tính bằng megabyte của vùng nhớ khối xếp máy ảo mà Android sẽ dùng cho mỗi quy trình. Giá trị tối thiểu là 16 megabyte. |
android_ndk_repository
Xem nguồn quy tắcandroid_ndk_repository(name, api_level, path, repo_mapping)
Định cấu hình Bazel để sử dụng Android NDK nhằm hỗ trợ việc tạo các mục tiêu Android bằng mã gốc.
Xin lưu ý rằng việc triển khai android_ndk_repository
này đang được thay thế bằng một việc triển khai trong Starlark. Tính năng hỗ trợ cho các phiên bản NDK trong tương lai, bao gồm cả phiên bản 25 trở lên, sẽ được triển khai trong phiên bản Starlark của android_ndk_repository
. Hãy xem rules_android_ndk để biết phiên bản Starlark.
Xin lưu ý rằng việc tạo bản dựng cho Android cũng yêu cầu quy tắc android_sdk_repository
trong tệp 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ẽ xác định vị trí NDK Android của bạn từ $ANDROID_NDK_HOME
và phát hiện cấp độ API cao nhất mà NDK đó 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 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 các thư viện API cấp 24 khi biên dịch mã JNI.
cpufeatures
Android NDK chứa thư viện cpufeatures. Bạn có thể dùng thư viện này để 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 với 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; bắt buộc Tên riêng cho mục tiêu này. |
api_level
|
Số nguyên; không thể định cấu hình; mặc định là |
path
|
Chuỗi; không thể định cấu hình; mặc định là $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
|
Từ điển: Chuỗi -> Chuỗi; mặc định là Ví dụ: một mục |
android_sdk_repository
Xem nguồn quy tắcandroid_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ợ việc tạo các mục tiêu Android.
Ví dụ
Để thiết lập SDK Android cho Bazel, bạn chỉ cần đặt một quy tắcandroid_sdk_repository
có tên "androidsdk" trong tệp WORKSPACE
và đặt biến môi trường $ANDROID_HOME
thành đường dẫn của SDK Android. Theo mặc định, 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.
android_sdk_repository( name = "androidsdk", )
Để đảm bảo các bản dựng có thể tái tạo, bạn có thể đặt các thuộc tính path
, api_level
và build_tools_version
thành các giá trị cụ thể. Quá trình tạo sẽ thất bại nếu SDK Android không cài đặt cấp độ API hoặc phiên bản công cụ tạo đượ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ạ cách sử dụng đường dẫn tương đối của không gian làm việc đến SDK Android. Điều này rất hữu ích nếu Android SDK là một phần trong không gian làm việc Bazel của bạn (ví dụ: nếu SDK này được kiểm tra trong tính năng kiểm soát phiên bản).
Thư viện hỗ trợ
Các Thư viện hỗ trợ có trong Android SDK Manager dưới dạng "Kho lưu trữ hỗ trợ của Android".
Đây là một bộ thư viện Android phổ biến có phiên bản, chẳng hạn như thư viện Hỗ trợ và AppCompat, được đóng gói dưới dạng một kho lưu trữ Maven cục bộ. android_sdk_repository
tạo các mục tiêu Bazel cho từng thư viện này. Các mục tiêu này có thể được 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 được tạo bắt nguồn 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; bắt buộc Tên riêng cho mục tiêu này. |
api_level
|
Số nguyên; không thể định cấu hình; mặc định là Bạn có thể ghi đè cấp độ API được dùng cho một bản dựng nhất định bằng cờ Để xem tất cả các mục tiêu |
build_tools_version
|
Chuỗi; không thể định cấu hình; mặc định là Bazel yêu cầu công cụ tạo bản dựng phiên bản 30.0.0 trở lên. |
path
|
Chuỗi; không thể định cấu hình; mặc định là $ANDROID_HOME .
Bạn có thể tải Android SDK xuống từ trang web dành cho nhà phát triển Android. |
repo_mapping
|
Từ điển: Chuỗi -> Chuỗi; mặc định là Ví dụ: một mục |