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 các tệp gói ứng dụng Android (.apk).
Các 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à zipaligned, có thể dùng để phát triển và gỡ lỗi ứng dụng. Bạn không thể phát hành ứng dụng khi 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 khoá phát hành trước khi phát hành công khai.name_deploy.jar
: Một tệp lưu trữ Java có chứa đó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à trình tải lớp tìm thấy trong đườ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 tệp lưu trữ Java chứa kết quả của việc chạy ProGuard trênname_deploy.jar
. Kết quả này chỉ được tạo nếu bạn chỉ định thuộc tính proguard_specs.name_proguard.map
: Kết quả tệp ánh xạ của việc chạy ProGuard trênname_deploy.jar
. Kết quả 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 duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là android_library , java_library có quy tắc ràng buộc android và cc_library bao bọc hoặc tạo 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 mọi tệp trong thư mục assets . Bạn cũng có thể tham chiếu các quy tắc khác (mọi quy tắc 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 đó đều 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 cả.
|
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 các khoá này và không lưu trữ 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 các khoá này và không lưu trữ 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 các khoá này và không lưu trữ trong cây nguồn. |
densities
|
Danh sách chuỗi; mặc định là |
dex_shards
|
Số nguyên; mặc định là Xin lưu ý rằng mỗi phân mảnh sẽ tạo ra í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 các tệp nhị phân phát hành. |
dexopts
|
Danh sách chuỗi; mặc định là |
enable_data_binding
|
Boolean; 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; giá trị 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 chuỗi; mặc định là Các tuỳ chọn trình biên dịch này được truyền đến javac sau các tuỳ chọn trình biên dịch toàn cục. |
key_rotation_min_sdk
|
Chuỗi; 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.classPhải được sử dụng với multidex="manual_main_dex" .
|
main_dex_list_opts
|
Danh sách chuỗi; mặc định là |
main_dex_proguard_specs
|
Danh sách nhãn; mặc định là multidex được đặt thành legacy .
|
manifest
|
Nhãn; bắt buộc Tên của tệp kê khai Android, thường làAndroidManifest.xml .
Phải được xác định nếu resource_files hoặc tài sả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 |
multidex
|
Chuỗi; giá trị mặc định là Có thể dùng các giá trị sau:
|
nocompress_extensions
|
Danh sách chuỗi; mặc định là |
package_id
|
Số nguyên; 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ẽ được 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 sẽ được 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
|
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 lớp, phương thức và trường đã 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ì thông số kỹ thuật Proguard không được chứa |
proguard_specs
|
Danh sách nhãn; mặc định là |
resource_configuration_filters
|
Danh sách 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 đã tạo (từ genrules) cũng có thể được tham chiếu bằng 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 thư mục " res " với mọi tệp tài nguyên khác đi kèm.
|
shrink_resources
|
Số nguyên; mặc định là manifest và resource_files ) và yêu cầu ProGuard.
Công cụ này hoạt động gần như theo cách tương tự như trình thu 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, trong đó nêu chi tiết về việc phân tích và xoá.
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 tệp .aar
làm thư viện cho 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 duy nhất cho mục tiêu này. |
aar
|
Nhãn; bắt buộc Tệp.aar để 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 nó vào một tệp .jar
.
Thư viện Android Runtime android.jar
được ngầm đưa vào đường dẫn lớp biên dịch.
Mục tiêu đầu ra ngầm ẩn
libname.jar
: Một kho lưu trữ Java.libname-src.jar
: Một tệp lưu trữ chứa các nguồn ("tệp nguồn").name.aar
: Gói Android "aar" chứa kho lưu trữ java và các tài nguyên của mục tiêu này. Tập hợp này không chứa tập hợp đó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 đặt 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 duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là android_library , java_library có quy tắc ràng buộc android và cc_library bao bọc hoặc tạo 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 (mọi quy tắc 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 đó đều 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 cả.
|
custom_package
|
Chuỗi; mặc định là |
enable_data_binding
|
Boolean; 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 trực tiếp phụ thuộc vào thư viện này.
Danh sách |
exports
|
Danh sách nhãn; mặc định là exports được coi là phần phụ thuộc trực tiếp của bất kỳ quy tắc nào trực tiếp phụ thuộc vào mục tiêu có exports .
|
exports_manifest
|
Số nguyên; 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; mặc định là Đường dẫn này sẽ được dùng làm thư mục gốc để nhập khi xử lý các nguồn idl phụ thuộc vào thư viện này. Khi bạn chỉ định 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 phép đó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 một cách thích hợp để trình biên dịch aidl có thể tìm thấy. Hãy xem nội dung mô tả về idl_import_root để biết thông tin về ý nghĩa của thuộc tính 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 phép đó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 |
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 tệp nhập cho mọi mục tiêu Bạn phải đặt các tệp này một cách thích hợp để trình biên dịch aidl có thể tìm thấy. Hãy xem nội dung mô tả về idl_import_root để biết thông tin về ý nghĩa của lệnh này. |
javacopts
|
Danh sách chuỗi; mặc định là Các tuỳ chọn trình biên dịch này được truyền đến javac sau các tuỳ chọn trình biên dịch toàn cục. |
manifest
|
Nhãn; mặc định là AndroidManifest.xml .
Phải được xác định nếu resource_files hoặc tài sả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 đượ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ẽ được 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 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 giá trị không thay đổi, cụ thể là -dontnote, -dontwarn, giả định và các quy tắc bắt đầu bằng -keep. Các tuỳ chọn khác chỉ có thể xuất hiện trong proguard_specs của android_binary để đảm bảo việc hợp nhất không phải là tự độ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 đã tạo (từ genrules) cũng có thể được tham chiếu bằng Nhãn tại đây. Quy định hạn chế duy nhất là kết quả được tạo phải nằm trong cùng thư mục " res " với 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 chương trình kiểm thử đo lường của Android. Công 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à mọi ứng dụng cần thiết khác, đồng thời chạy các chương trình 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ử. Đổi lại, android_binary
này chỉ định ứng dụng android_binary
đang được kiểm thử thông qua thuộc tính công cụ.
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 duy nhất 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à kiểm thử sẽ chạy 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 sử 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ùng để kiểm thử đơn vị các quy tắc android_library
cục bộ (thay vì trên thiết bị).
Công cụ 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 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
: Một tệp lưu trữ chứa các nguồn ("jar nguồn").name_deploy.jar
: Một tệp lưu trữ triển khai Java phù hợp với việc 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()Thao tác này sẽ đưa các quy tắc
maven_jar
cần thiết vào 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ụ bên dưới.
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 duy nhất 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 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ẽ xuất hiện.
Thuộc tính |
custom_package
|
Chuỗi; mặc định là test_class .
|
densities
|
Danh sách chuỗi; mặc định là |
enable_data_binding
|
Boolean; giá trị mặc định là |
javacopts
|
Danh sách chuỗi; mặc định là 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
|
Danh sách chuỗi; mặc định là Tập lệnh trình bao bọc cho 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à Lưu ý rằng thuộc tính này không ảnh hưởng đến đầu ra |
manifest
|
Nhãn; mặc định là AndroidManifest.xml .
Bạn phải 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ừ thư viện đang được kiểm thử có chứa thẻ minSdkVersion .
|
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 thiết lập 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 trong quy tắc để sử dụng manifest_values.
|
nocompress_extensions
|
Danh sách 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ẽ được chạy bất cứ khi nào quy tắc này được tạo. Thư viện cũng có thể kế thừa các trình bổ trợ từ các 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 thu được của quy tắc này.
|
resource_configuration_filters
|
Danh sách chuỗi; mặc định là |
resource_jars
|
Danh sách nhãn; mặc định là |
resource_strip_prefix
|
Chuỗi; 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 đó, không xuất hiện trên đường dẫn lớp thời gian biên dịch. Bạn chỉ nên liệt kê các phần phụ thuộc cần thiết trong thời gian chạy tại đây. Các công cụ phân tích phần phụ thuộc phải bỏ qua các mục tiêu xuất hiện trong cả runtime_deps và deps .
|
stamp
|
Số nguyên; mặc định là
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
|
Chuỗi; 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. Việc thiết lập chế độ này hiếm khi xảy ra. Nếu đối số này bị bỏ qua, thì 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, thuộc tính trình chạy 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 sẽ tạo một trình mô phỏng Android được định cấu hình với các thông số kỹ thuật nhất định. Bạn có thể khởi động trình mô phỏng này thông qua lệnh chạy bazel hoặc bằng cách trực tiếp thực thi 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ột mục tiêu phù hợp cho cờ --run_under để kiểm thử bazel và chạy blaze. 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 kiểm thử hoặc chạy mục tiêu đó khi thích hợp.
android_device
hỗ trợ 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 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.
Ví dụ
Ví dụ sau đây cho thấy 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à tập lệnh khởi động. Bạn có thể khởi động trình mô phỏng trên máy bằng cách thực thi bazel run :nexus_s -- --action=start. Tập lệnh này cho thấy các cờ sau:
- --adb_port: Cổng để hiển thị adb. Nếu bạn muốn đưa ra lệnh adb cho trình mô phỏng, đây là cổng mà bạn sẽ đưa ra lệnh kết nối adb.
- --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 bằng màn hình nếu đúng (mặc định là sai).
- --action: Bắt đầu hoặc dừng.
- --apks_to_install: danh sách các tệp 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 duy nhất 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 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 theo chiều 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 để mô phỏng cho thiết bị. Chế độ này áp dụng 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 pixel trên mỗi inch. Giá trị tối thiểu của thông số 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 Dung lượng tính bằng megabyte của vùng nhớ khối xếp máy ảo mà Android sẽ 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 mục tiêu Android bằng mã gốc.
Xin lưu ý rằng cách triển khai android_ndk_repository
này đang được thay thế bằng cách triển khai trong Starlark. Tính năng hỗ trợ 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
. Xem rules_android_ndk cho phiên bản Starlark.
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 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í Android NDK 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 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 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 duy nhất 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 mục tiêu Android.
Ví dụ
Yêu cầu tối thiểu để thiết lập SDK Android cho Bazel là đặt quy tắcandroid_sdk_repository
có tên "androidsdk" vào 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ể. Bản dựng sẽ không thành công nếu SDK Android không cài đặt cấp độ API hoặc phiên bản công cụ xây 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ạ cách sử dụng đường dẫn tương ứng với không gian làm việc đến SDK Android. Điều này sẽ hữu ích nếu SDK Android là một phần của không gian làm việc Bazel (ví dụ: nếu SDK Android được kiểm tra vào kiểm soát phiên bản).
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à một bộ phiên bản của các thư viện Android phổ biến, chẳng hạn như thư viện Hỗ trợ và AppCompat, được đóng gói dưới dạng 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 trong số này. Bạn có thể sử dụng các mục tiêu này trong 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 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 phiên bản 7.
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 duy nhất cho mục tiêu này. |
api_level
|
Số nguyên; không thể định cấu hình; mặc định là Cờ Để xem tất cả mục tiêu |
build_tools_version
|
Chuỗi; không thể định cấu hình; giá trị mặc định là Bazel yêu cầu công cụ xây 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 SDK Android 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 |