Quy tắc
- android_binary
- aar_import
- android_library
- android_Instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android sdk_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 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ó chữ ký khoá gỡ lỗi và căn chỉnh zip, 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
: Một 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 kho lưu trữ Java chứa mục đích đóng tạm thời 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 sẽ tìm thấy trên đườ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ả 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ả của tệp ánh xạ khi 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 duy nhất cho mục tiêu này. |
deps
|
android_library ,
java_library với quy tắc 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
|
Các tệp Các tệp |
assets
|
glob của tất cả tệp trong thư mục assets . Bạn cũng có thể tham chiếu đến 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
|
assets .
Cặp assets và assets_dir mô tả những tài sản đóng gói. Bạn cần cung cấp cả hai thuộc tính hoặc không cung cấp thuộc tính nào trong số đó.
|
crunch_png
|
|
custom_package
|
|
debug_key
|
CẢNH BÁO: Không sử dụng khóa sản xuất nên được bảo vệ nghiêm ngặt và không được giữ trong cây nguồn của bạn. |
debug_signing_keys
|
CẢNH BÁO: Không sử dụng khóa sản xuất nên được bảo vệ nghiêm ngặt và không được giữ trong cây nguồn của bạn. |
debug_signing_lineage_file
|
CẢNH BÁO: Không sử dụng khóa sản xuất nên được bảo vệ nghiêm ngặt và không được giữ trong cây nguồn của bạn. |
densities
|
|
dex_shards
|
Xin lưu ý rằng mỗi phân đoạn sẽ dẫn đến í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 nhiều hơn 1 cho các tệp nhị phân của bả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, thì |
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển sang javac sau các tuỳ chọn 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.classPhải được dùng với multidex="manual_main_dex" .
|
main_dex_list_opts
|
|
main_dex_proguard_specs
|
multidex thành legacy .
|
manifest
|
AndroidManifest.xml .
Phải được xác định nếu resource_files hoặc nội dung được xác định.
|
manifest_values
|
|
multidex
|
Các giá trị có thể là:
|
nocompress_extensions
|
|
package_id
|
Xem đối số |
plugins
|
java_plugin được chỉ định trong thuộc tính plugin sẽ chạy bất cứ khi nào mục tiêu này được tạo. Tài nguyên do trình bổ trợ tạo ra sẽ được đưa vào tệp kết quả tìm kiếm của mục tiêu.
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
proguard_generate_mapping tạo sẽ được sử dụng lại để áp dụng cùng một bản đồ ánh xạ cho bản dựng mới.
|
proguard_generate_mapping
|
proguard_specs . Tệp này sẽ liệt kê bản đồ ánh xạ giữa tên lớp, phương thức và tên trường ban đầu và 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ông số kỹ thuật của Proguard sẽ không được chứa cả |
proguard_specs
|
|
resource_configuration_filters
|
en_XA và/hoặc ar_XB .
|
resource_files
|
glob của tất cả tệp trong thư mục res .
Bạn cũng có thể tham chiếu các tệp đã tạo (từ quy tắc tạo) bằng Nhãn tại đây. Hạn chế duy nhất là các kết quả đầu ra đượ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ó trong đó.
|
shrink_resources
|
manifest và resource_files ) và yêu cầu ProGuard.
Cách thức hoạt động chủ yếu tương tự như trình rút gọn tài nguyên Gradle
(https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
Những 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á tài khoản.
Các loại tệp có thể được thu thập dữ liệu bao gồm:
|
aar_nhập
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 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
|
|
thư viện_android
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 thành tệp .jar
.
Thư viện thời gian chạy Android android.jar
được ngầm đặt trên đườ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 ("jar jar").name.aar
: Một gói Android 'aar' chứa tệp lưu trữ java và các tài nguyên của mục tiêu này. Nó không chứa phần đóng cửa 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 cho thấy cách đặt idl_import_root
.
Cho //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 quy tắc 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.
Các tệp Các tệp Nếu bạn bỏ qua |
assets
|
glob của tất cả tệp trong thư mục assets . Bạn cũng có thể tham chiếu đến 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
|
assets .
Cặp assets và assets_dir mô tả những tài sản đóng gói. Bạn cần cung cấp cả hai thuộc tính hoặc không cung cấp thuộc tính nào trong số đó.
|
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ụ: trình xử lý chú giải) để 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 trực tiếp phụ thuộc vào
mục tiêu có exports .
|
exports_manifest
|
android_binary phụ thuộc vào mục tiêu này hay không. Không bao giờ xuất các thuộc tính uses-permissions .
|
idl_import_root
|
Đường dẫn này sẽ được dùng làm thư mục gốc khi nhập khi xử lý các nguồn không hợp lệ phụ thuộc vào thư viện này. Khi Xem ví dụ. |
idl_parcelables
|
android_library nào phụ thuộc vào thư viện này, trực tiếp
hoặc thông qua việc đóng chuyển tiếp, nhưng sẽ không được dịch sang Java
hoặc biên dịch.
Bạn chỉ nên bao gồm các tệp Bạn phải đặt các tệp này sao cho phù hợp để trình biên dịch aidl tìm thấy chúng. Hãy 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 nào phụ thuộc vào thư viện này, trực tiếp
hoặc thông qua việc đóng chuyển tiếp, nhưng sẽ không được dịch sang Java
hoặc biên dịch.
Bạn chỉ nên đưa các tệp |
idl_srcs
|
srcs .
Những 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 sao cho phù hợp để trình biên dịch aidl tìm thấy chúng. Hãy 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 sang javac sau các tuỳ chọn trình biên dịch chung. |
manifest
|
AndroidManifest.xml .
Phải được xác định nếu resource_files hoặc nội dung được xác định.
|
neverlink
|
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
|
java_plugin được chỉ định trong thuộc tính plugin sẽ chạy bất cứ khi nào mục tiêu này được tạo. Tài nguyên do trình bổ trợ tạo ra sẽ được đưa vào tệp kết quả tìm kiếm của mục tiêu.
|
proguard_specs
|
android_binary nào tùy thuộc vào thư viện này.
Các tệp được bao gồm ở đây chỉ được có các quy tắc rõ ràng, cụ thể là -dontnote, -dontwarn,
nonosideEffect 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 dữ liệu tự động.
|
resource_files
|
glob của tất cả tệp trong thư mục res .
Bạn cũng có thể tham chiếu các tệp đã tạo (từ quy tắc tạo) bằng Nhãn tại đây. Hạn chế duy nhất là các kết quả đầu ra đượ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ó trong đó.
|
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 bài kiểm thử đo lường của Android. Hoạt động 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à bất kỳ ứng dụng cần thiết nào 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 nội dung kiểm thử. android_binary
lần lượt 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 duy nhất cho mục tiêu này. |
support_apks
|
|
target_device
|
android_device nơi thử nghiệm sẽ chạy. Để chạy kiểm thử trên trình mô phỏng đang chạy hoặc trên thiết bị thực tế, bạn hãy sử dụng các đối số sau: |
test_app
|
android_binary phải chỉ định mục tiêu nào đang được 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 các quy tắc kiểm thử đơn vị android_library
cục bộ (trái ngược với trên thiết bị).
Hoạt động này hoạt động với khung kiểm thử Android Robolectric.
Hãy xem trang web Android Robolectric để biết thông tin chi tiết về
cách viết thử nghiệm Robolectric.
Mục tiêu đầu ra ngầm ẩn
name.jar
: Bản 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 jar").name_deploy.jar
: Tệp 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()Phương thức này lấy các quy tắc
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
. 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 duy nhất cho mục tiêu này. |
deps
|
Danh sách quy tắc được phép trong |
srcs
|
Các tệp 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, hệ thống sẽ phát sinh 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 sang javac sau các tuỳ chọn trình biên dịch chung. |
jvm_flags
|
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 phiên 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 kết quả |
manifest
|
AndroidManifest.xml .
Phải được xác định nếu xác định resource_files hoặc thành phần, hoặc nếu có bất kỳ tệp kê khai nào từ các thư viện đang kiểm thử có 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à thẻ use-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.
Không cần phải có tệp kê khai trên 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 mỗi khi bạn tạo quy tắc này. 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 nguyên
do trình bổ trợ tạo ra sẽ được đưa vào tệp kết quả chứ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 thuộc tính |
runtime_deps
|
deps thông thường, các mục 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ư 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 phải được liệt kê ở đâ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
|
Các tệp nhị phân có dấu không được tạo lại trừ khi các phần phụ thuộc thay đổi. |
test_class
|
Thuộc tính này chỉ định tên của một lớp Java sẽ được chạy bằng chương trình kiểm thử này. Hiếm khi cần đặt giá trị này. Nếu đối số này bị bỏ qua, thì 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, thuộc tính launcher và cờ |
thiết bị_android
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 bằng các thông số kỹ thuật cụ thể. Bạn có thể bắt đầu trình mô phỏng này thông qua lệnh chạy bazel hoặc bằng cách thực thi trực tiếp tập lệnh đã tạo. Bạn nên dựa vào các quy tắc hiện có của android_device 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 để gắn cờ --run_under để kiểm thử bazel và chạy blaze. Bắt đầu 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, thử nghiệm hoặc chạy mục tiêu đó nếu phù 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 hóa cho hầu hết 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 để chuyển đến trình mô phỏng nhằm khởi động lại.
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à tập lệnh bắt đầu. 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 sẽ hiển thị các cờ sau:
- --adb_port: Cổng để hiển thị adb. Nếu muốn đưa ra các lệnh adb cho trình mô phỏng, thì đây là cổng mà bạn sẽ tạo adb kết nối.
- --emulator_port: Cổng để hiển thị bảng điều khiển quản lý viễn thông của trình mô phỏng.
- --enable_display: Bắt đầu trình mô phỏng bằng màn hình nếu là true (mặc định là false).
- --hành động: Bắt đầu hoặc tiêu diệt.
- --apks_to_install: danh sách các 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
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ợ xây dựng các mục tiêu Android bằng mã gốc.
Lưu ý rằng phương thức triển khai này của android_ndk_repository
sẽ được thay thế bằng phương thức triển khai trong Starlark. Việc 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
. 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
của bạn.
Để 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 từ $ANDROID_NDK_HOME
và phát hiện cấp API cao nhất mà Android 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
. Công cụ 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 ccpufeatures có thể dùng để phát hiện CPU của thiết bị trong thời gian chạy. Ví dụ sau 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 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 qua trang web dành cho nhà phát triển Android. |
repo_mapping
|
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ợ xây dựng các mục tiêu Android.
Ví dụ
Việc tối thiểu để thiết lập SDK Android cho Bazel là đặ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 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 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 chưa cài đặt cấp độ API hoặc phiên bản công cụ xây dựng đã 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 họa việc sử dụng đường dẫn tương đối không gian làm việc đến SDK Android. Điều này 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 được kiểm tra vào chế độ kiểm soát phiên bản).
Thư viện hỗ trợ
Thư viện hỗ trợ hiện có trong Trình quản lý SDK Android dưới dạng "Kho lưu trữ hỗ trợ Android".
Đây là một nhóm các thư viện Android phổ biến, chẳng hạn như thư viện Hỗ trợ và thư viện 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 mỗi thư viện có thể 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 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 duy nhất cho mục tiêu này. |
api_level
|
Cấp độ API dùng cho một bản dựng cụ thể có thể bị cờ Để xem tất cả mục tiêu |
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ột mục |