Quy tắc Android

Báo cáo sự cố Xem nguồn Hằng đêm · 7,3 · 7.2 · 7.1 · 7,0 · 6,5

Quy tắc

android_binary

Xem nguồn quy tắc
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ên name_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ên name_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; bắt buộc

Tên duy nhất cho mục tiêu này.

deps

Danh sách nhãn; giá trị mặc định là []

Danh sách các thư viện khác được liên kết đến mục tiêu nhị phân. Các loại thư viện được phép là: android_library, java_library với điều kiện ràng buộc androidcc_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

Danh sách nhãn; giá trị mặc định là []

Danh sách tệp nguồn được xử lý để tạo mục tiêu.

Hệ thống biên dịch các tệp srcs thuộc loại .java. Để dễ đọc, không nên đặt tên cho một đã tạo tệp nguồn .java vào srcs. Thay vào đó, hãy đặt tên quy tắc phụ thuộc vào srcs, như được mô tả bên dưới.

srcs tệp thuộc loại .srcjar được giải nén và biên dịch. (Cách này rất hữu ích nếu bạn cần tạo một tập hợp các tệp .java bằng tiện ích tạo quy tắc hoặc bản dựng).

assets

Danh sách nhãn; giá trị mặc định là []

Danh sách tài sản cần đóng gói. Đây thường là 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

String; giá trị mặc định là ""

Chuỗi cung cấp đường dẫn đến các tệp trong assets. Cặp assetsassets_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

Boolean; giá trị mặc định là True

Xử lý PNG (hoặc không nén). Điều này độc lập với quá trình xử lý 9-patch, vốn luôn xong. Đây là giải pháp tạm thời không được dùng nữa đối với lỗi aapt đã đã được khắc phục trong aapt2.
custom_package

String; giá trị mặc định là ""

Gói Java mà nguồn java sẽ được tạo. Theo mặc định, gói này được suy ra từ thư mục chứa tệp BUILD chứa quy tắc là gì. Bạn có thể chỉ định một gói khác, nhưng đây là không khuyến khích vì nó có thể gây ra xung đột đường dẫn lớp với các mà sẽ chỉ được phát hiện trong thời gian chạy.
debug_key

Nhãn; giá trị mặc định là "@bazel_tools//tools/android:debug_keystore"

Tệp chứa kho khoá gỡ lỗi được dùng để ký tệp APK gỡ lỗi. Thông thường, bạn không muốn sử dụng một khoá khác với khoá mặc định, do đó bạn nên bỏ qua thuộc tính này.

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

Danh sách nhãn; giá trị mặc định là []

Danh sách tệp, kho khoá gỡ lỗi được dùng để ký tệp APK gỡ lỗi. Thông thường, bạn không muốn sử dụng các khoá khác với khoá mặc định, do đó bạn nên bỏ qua thuộc tính này.

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

Nhãn; giá trị mặc định là None

Tệp chứa dòng ký ứng dụng cho debug_Signed_keys. Thông thường, bạn không muốn sử dụng các khoá khác với khoá mặc định, do đó bạn nên bỏ qua thuộc tính này.

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

Danh sách các chuỗi; giá trị mặc định là []

Mật độ cần lọc khi tạo APK. Thao tác này sẽ loại bỏ các tài nguyên có thể vẽ của đường quét mà thiết bị có mật độ màn hình đã chỉ định để giảm kích thước APK. Màn hình tương thích tương ứng cũng sẽ được thêm vào tệp kê khai nếu chưa chứa tập mẹ danh sách của bạn.
dex_shards

Số nguyên; giá trị mặc định là 1

Số lượng phân đoạn dex cần được phân tách thành. Điều này giúp việc tạo tệp dex nhanh hơn nhiều nhưng lại ảnh hưởng đến thời gian khởi động và cài đặt ứng dụng. Chiến lược phát hành đĩa đơn tệp nhị phân càng lớn thì càng nên sử dụng nhiều phân đoạn hơn. 25 là mức giá tốt để bắt đầu thử nghiệm.

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

Danh sách các chuỗi; giá trị mặc định là []

Các cờ dòng lệnh bổ sung cho công cụ dx khi tạo classes.dex. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.
enable_data_binding

Boolean; giá trị mặc định là False

Nếu đúng, quy tắc này sẽ xử lý dữ liệu liên kết trong tài nguyên bố cục được đưa vào thông qua Thuộc tính resource_files. Nếu không có thì biểu thức liên kết dữ liệu sẽ gây ra lỗi bản dựng.

Để 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:

  1. Đặt thuộc tính này cho tất cả các quy tắc Android phụ thuộc bắc cầu vào thuộc tính này. Điều này là do người phụ thuộc kế thừa biểu thức liên kết dữ liệu của quy tắc thông qua tài nguyên hợp nhất. Vì vậy, các em cũng cần xây dựng bằng liên kết dữ liệu để phân tích cú pháp các biểu thức đó.
  2. Thêm mục nhập deps = cho thư viện thời gian chạy liên kết dữ liệu vào tất cả mục tiêu để đặt thuộc tính này. Vị trí của thư viện này tuỳ thuộc vào cách thiết lập kho chứa của bạn.
incremental_dexing

Số nguyên; không thể định cấu hình; giá trị mặc định là -1

Buộc tạo mục tiêu có hoặc không có hoạt động tạo tệp dex tăng dần, ghi đè các giá trị mặc định và cờ tăng tiến_dexing.
instruments

Nhãn; giá trị mặc định là None

Mục tiêu android_binary để đo lường.

Nếu bạn đặt thuộc tính này, android_binary này sẽ được coi là một phép kiểm thử cho các thử nghiệm đo lường. android_instrumentation_test thì mục tiêu có thể chỉ định mục tiêu này trong Thuộc tính test_app.

javacopts

Danh sách các chuỗi; giá trị mặc định là []

Các tuỳ chọn bổ sung của trình biên dịch cho mục tiêu này. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.

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

String; giá trị mặc định là ""

Đặt phiên bản nền tảng Android tối thiểu (Cấp độ API) cho hoạt động ký xoay vòng của một tệp APK khoá nên được dùng để tạo chữ ký của APK. Khoá ký gốc cho tệp APK sẽ được sử dụng cho tất cả phiên bản nền tảng trước đó.
main_dex_list

Nhãn; giá trị mặc định là None

Tệp văn bản chứa danh sách tên tệp lớp. Các lớp được xác định bởi các tệp lớp đó là đặt vào lớp chính.dex. e.g.:
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    
Phải được sử dụng với multidex="manual_main_dex".
main_dex_list_opts

Danh sách các chuỗi; giá trị mặc định là []

Các tuỳ chọn dòng lệnh để chuyển đến trình tạo danh sách dex chính. Sử dụng tuỳ chọn này để tác động đến các lớp có trong danh sách dex chính.
main_dex_proguard_specs

Danh sách nhãn; giá trị mặc định là []

Các tệp được dùng làm thông số kỹ thuật Proguard để xác định các lớp phải được giữ trong tệp dex chính. Chỉ cho phép nếu thuộc tính 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 tệp resource_file hoặc nội dung đã được xác định.
manifest_values

Từ điển: Chuỗi -> String; giá trị mặc định là {}

Từ điển các giá trị sẽ được ghi đè trong tệp kê khai.

Mọi thực thể của ${name} trong tệp kê khai sẽ được thay thế bằng giá trị tương ứng với tên trong từ điển này.

applicationId, versionCode, versionName minSdkVersion, targetSdkVersionmaxSdkVersion cũng sẽ ghi đè các thuộc tính tương ứng trong tệp kê khai và 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.

Khi bạn đặt manifest_merger thành legacy, chỉ applicationId, versionCodeversionName sẽ đều có tác dụng.

multidex

String; giá trị mặc định là "native"

Liệu có chia mã thành nhiều tệp dex hay không.
Các giá trị có thể có:
  • native: Chia mã thành nhiều tệp dex khi giới hạn chỉ mục dex 64K bị vượt quá. Giả định rằng nền tảng gốc hỗ trợ việc tải các lớp multidex trong thời gian chạy. Tính năng này chỉ hoạt động với Android L trở lên.
  • legacy: Chia mã thành nhiều tệp dex khi giới hạn chỉ mục dex 64K bị vượt quá. Giả sử các lớp multidex được tải thông qua mã xử lý ứng dụng (tức là không có nền tảng gốc).
  • manual_main_dex: Chia mã thành nhiều tệp dex khi dex 64K đã vượt quá giới hạn chỉ mục. Nội dung của tệp dex chính cần được chỉ định bằng cung cấp danh sách các lớp trong một tệp văn bản bằng cách sử dụng main_dex_list.
  • off: Biên dịch tất cả mã thành một tệp dex, ngay cả khi tệp đó vượt quá giới hạn chỉ mục.
nocompress_extensions

Danh sách các chuỗi; giá trị mặc định là []

Danh sách đuôi tệp không nén trong APK.
package_id

Số nguyên; giá trị mặc định là 0

Mã gói được gán cho các tài nguyên trong tệp nhị phân này.

Xem đối số --package-id của AAPT2 để biết thêm thông tin. Điều này có thể (và nên) thường không được đặt, dẫn đến giá trị mặc định là 127 (0x7F).

plugins

Danh sách nhãn; giá trị mặc định là []

Các trình bổ trợ trình biên dịch Java để chạy vào thời gian biên dịch. Mỗi 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

Nhãn; giá trị mặc định là None

Tệp được dùng làm bản đồ ánh xạ cho Proguard. Một tệp phân tách bằng dòng chứa "từ" khi đổi tên lớp và thành viên trong khoảng thời gian làm rối mã nguồn.
proguard_apply_mapping

Nhãn; giá trị mặc định là None

Tệp được dùng làm bản đồ ánh xạ cho Proguard. Một tệp ánh xạ do 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

Boolean; không thể định cấu hình; giá trị mặc định là False

Liệu có tạo tệp ánh xạ Proguard hay không. Tệp ánh xạ sẽ chỉ được tạo nếu 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 -dontobfuscate hoặc -printmapping.

proguard_specs

Danh sách nhãn; giá trị mặc định là []

Các tệp dùng làm thông số kỹ thuật Proguard. Tệp này sẽ mô tả tập hợp thông số kỹ thuật mà Proguard sử dụng.
resource_configuration_filters

Danh sách các chuỗi; giá trị mặc định là []

Danh sách các bộ lọc cấu hình tài nguyên, chẳng hạn như "en" sẽ giới hạn tài nguyên trong apk chỉ cho những ứng dụng trong 'en' . Để bật tính năng giả địa hoá, hãy thêm Ngôn ngữ giả lập en_XA và/hoặc ar_XB.
resource_files

Danh sách nhãn; giá trị mặc định là []

Danh sách tài nguyên cần đóng gói. Đây thường 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ó 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

Số nguyên; giá trị mặc định là -1

Liệu có thực hiện rút gọn tài nguyên hay không. Các tài nguyên không được tệp nhị phân sử dụng sẽ được đã bị xoá khỏi APK. Điều này chỉ được hỗ trợ cho các quy tắc sử dụng tài nguyên cục bộ (ví dụ: thuộc tính manifestresource_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ú ý:

  • các tài nguyên trong values/ sẽ bị xoá cũng như các tệp tài nguyên
  • sử dụng strict mode theo mặc định
  • Tính năng xoá các tài nguyên mã nhận dạng không dùng đến chỉ được hỗ trợ với aapt2
Nếu tính năng rút gọn tài nguyên đang bật, 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:

  • shrink_resources = 1: Bật tính năng rút gọn tài nguyên Android
  • shrink_resources = 0: Tắt tính năng rút gọn tài nguyên Android
  • shrink_resources = -1: Việc thu hẹp được kiểm soát bởi Cờ --android_resource_shrinking.

android_library

Xem nguồn quy tắc
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; bắt buộc

Tên duy nhất cho mục tiêu này.

deps

Danh sách nhãn; giá trị mặc định là []

Danh sách các thư viện khác để liên kết. Các loại thư viện được phép là: android_library, java_library với điều kiện ràng buộc androidcc_library gói hoặc tạo .so thư viện gốc cho nền tảng mục tiêu Android.
srcs

Danh sách nhãn; giá trị mặc định là []

Danh sách các tệp .java hoặc .srcjar được xử lý để tạo mục tiêu.

Hệ thống biên dịch các tệp srcs thuộc loại .java. Để dễ đọc, không nên đặt tên cho một đã tạo tệp nguồn .java vào srcs. Thay vào đó, hãy đặt tên quy tắc phụ thuộc vào srcs, như được mô tả bên dưới.

srcs tệp thuộc loại .srcjar được giải nén và biên dịch. (Cách này rất hữu ích nếu bạn cần tạo một tập hợp các tệp .java bằng tiện ích tạo quy tắc hoặc bản dựng).

Nếu srcs bị bỏ qua, thì mọi phần phụ thuộc được chỉ định trong Đã xuất deps từ quy tắc này (xem java_library.exports để xem thêm về cách xuất phần phụ thuộc). Tuy nhiên, hành vi này sẽ sớm không được dùng nữa; hãy cố gắng không dựa vào tính năng này.

assets

Danh sách nhãn; giá trị mặc định là []

Danh sách tài sản cần đóng gói. Đây thường là 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

String; giá trị mặc định là ""

Chuỗi cung cấp đường dẫn đến các tệp trong assets. Cặp assetsassets_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

String; giá trị mặc định là ""

Gói Java mà nguồn java sẽ được tạo. Theo mặc định, gói này được suy ra từ thư mục chứa tệp BUILD chứa quy tắc là gì. Bạn có thể chỉ định một gói khác, nhưng đây là không khuyến khích vì nó có thể gây ra xung đột đường dẫn lớp với các mà sẽ chỉ được phát hiện trong thời gian chạy.
enable_data_binding

Boolean; giá trị mặc định là False

Nếu đúng, quy tắc này sẽ xử lý dữ liệu liên kết trong tài nguyên bố cục được đưa vào thông qua Thuộc tính resource_files. Nếu không có thì biểu thức liên kết dữ liệu sẽ gây ra lỗi bản dựng.

Để 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:

  1. Đặt thuộc tính này cho tất cả các quy tắc Android phụ thuộc bắc cầu vào thuộc tính này. Điều này là do người phụ thuộc kế thừa biểu thức liên kết dữ liệu của quy tắc thông qua tài nguyên hợp nhất. Vì vậy, các em cũng cần xây dựng bằng liên kết dữ liệu để phân tích cú pháp các biểu thức đó.
  2. Thêm mục nhập deps = cho thư viện thời gian chạy liên kết dữ liệu vào tất cả mục tiêu để đặt thuộc tính này. Vị trí của thư viện này tuỳ thuộc vào cách thiết lập kho chứa của bạn.
exported_plugins

Danh sách nhãn; giá trị mặc định là []

Danh sách các 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 java_plugin được chỉ định sẽ được áp dụng cho bất kỳ thư viện nào sẽ phụ thuộc trực tiếp vào thư viện này, giống như khi thư viện đó đã khai báo rõ ràng trong plugins.

exports

Danh sách nhãn; giá trị mặc định là []

Đã đóng tất cả quy tắc truy cập thông qua thuộc tính 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 không phải là phần phụ thuộc trực tiếp của quy tắc mà chúng thuộc về.

exports_manifest

Số nguyên; giá trị mặc định là 1

Liệu có xuất các mục nhập tệp kê khai sang mục tiêu 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

String; giá trị mặc định là ""

Đường dẫn tương đối theo gói đến gốc của cây gói java chứa idl nguồn có trong thư viện này.

Đườ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 idl_import_root, cả idl_parcelablesidl_srcs phải nằm tại đường dẫn được gói java của đối tượng chỉ định chúng đại diện cho idl_import_root. Khi idl_import_root là chưa được chỉ định, cả idl_parcelablesidl_srcs đều phải ở đường dẫn do gói của chúng chỉ định trong thư mục gốc Java.

Xem ví dụ.

idl_parcelables

Danh sách nhãn; giá trị mặc định là []

Danh sách định nghĩa IDL Android để cung cấp dưới dạng nhập. 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 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ó .aidl tệp tương ứng trực tiếp với Phải bao gồm .java nguồn trong thư viện này (ví dụ: nguồn tùy chỉnh triển khai Parcelable), nếu không idl_srcs sẽ là đã sử dụng.

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

Danh sách nhãn; giá trị mặc định là []

Danh sách các định nghĩa IDL Android đã xử lý trước để cung cấp dưới dạng dữ liệu nhập. 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 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 .aidl đã xử lý trước tương ứng trực tiếp với Phải bao gồm .java nguồn trong thư viện này (ví dụ: nguồn tùy chỉnh triển khai Parcelable), nếu không, hãy sử dụng idl_srcs cho Các định nghĩa IDL của Android cần được dịch sang giao diện Java và sử dụng idl_parcelable cho các tệp AIDL chưa được xử lý trước.

idl_srcs

Danh sách nhãn; giá trị mặc định là []

Danh sách các định nghĩa IDL của Android cần dịch sang giao diện Java. Sau khi được tạo, giao diện Java sẽ được biên dịch cùng nhau với nội dung của 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 android_library phụ thuộc trực tiếp vào thư viện này hoặc theo đường đóng bắc cầ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

Danh sách các chuỗi; giá trị mặc định là []

Các tuỳ chọn bổ sung của trình biên dịch cho mục tiêu này. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.

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

Nhãn; giá trị mặc định là None

Tên của tệp kê khai Android, thường là AndroidManifest.xml. Phải được xác định nếu tệp resource_file hoặc nội dung đã được xác định.

Boolean; giá trị mặc định là False

Chỉ dùng thư viện này để biên dịch chứ không dùng trong thời gian chạy. Kết quả của một quy tắc được đánh dấu là 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

Danh sách nhãn; giá trị mặc định là []

Các trình bổ trợ trình biên dịch Java để chạy vào thời gian biên dịch. Mỗi 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

Danh sách nhãn; giá trị mặc định là []

Các tệp dùng làm thông số kỹ thuật Proguard. Phần này mô tả tập hợp thông số kỹ thuật mà Proguard sử dụng. Nếu được chỉ định, chúng sẽ được thêm vào bất kỳ mục tiêu 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

Danh sách nhãn; giá trị mặc định là []

Danh sách tài nguyên cần đóng gói. Đây thường 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ó 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_sdk_repository

Xem nguồn quy tắc
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ắc android_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_binaryandroid_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; 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; giá trị mặc định là 0

Cấp độ API Android cần xây dựng theo mặc định. Nếu không được chỉ định, cấp độ API cao nhất cài đặt sẽ được sử dụng.

android_sdk có thể ghi đè cấp độ API dùng cho một bản dựng nhất định cờ. android_sdk_repository tạo mục tiêu android_sdk cho từng cấp độ API được cài đặt trong SDK với tên @androidsdk//:sdk-${level}, liệu thuộc tính này có được chỉ định hay không. Ví dụ: để xây dựng dựa trên một API không phải API mặc định cấp: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

Để xem tất cả android_sdk mục tiêu do android_sdk_repository tạo, bạn có thể chạy bazel query "kind(android_sdk, @androidsdk//...)".

build_tools_version

String; không thể định cấu hình; giá trị mặc định là ""

Phiên bản của bộ công cụ xây dựng Android để sử dụng trong SDK Android. Nếu không được chỉ định, phiên bản công cụ xây dựng mới nhất đã cài đặt sẽ được sử dụng.

Bazel yêu cầu công cụ xây dựng phiên bản 30.0.0 trở lên.

path

String; không thể định cấu hình; giá trị mặc định là ""

Đường dẫn tuyệt đối hoặc tương đối đến SDK Android. Thuộc tính này hoặc thuộc tính Bạn phải đặt biến môi trường $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 -> String; giá trị mặc định là {}

Một từ điển từ tên kho lưu trữ cục bộ thành tên kho lưu trữ toàn cục. Chế độ này cho phép kiểm soát giải pháp phần phụ thuộc Workspace cho các phần phụ thuộc của kho lưu trữ này.

Ví dụ: mục nhập "@foo": "@bar" khai báo rằng, bất cứ khi nào điều này kho lưu trữ phụ thuộc vào "@foo" (chẳng hạn như phần phụ thuộc trên "@foo//some:target"), thì tệp này sẽ giải quyết phần phụ thuộc đó trong "@bar" ("@bar//some:target") được khai báo toàn cầu.