Khai báo và sử dụng cờ bản dựng

Cờ bản dựng là các hằng số trong thời gian tạo và không thể thay đổi trong thời gian chạy. Những cờ này được dùng trong trường hợp không dùng được cờ aconfig, chẳng hạn như

  • Bạn có một đoạn mã được biên dịch trước hoặc tạo sẵn mà bạn muốn tuỳ ý đưa vào bản dựng.
  • Bạn muốn thay đổi chính hệ thống bản dựng.
  • Bạn muốn đặt cờ xung quanh các phần phụ thuộc để quản lý kích thước mã.
  • Bạn muốn quản lý việc ra mắt một tính năng, nhưng cần kiểm tra giá trị của cờ trước khi hệ thống cung cấp các cờ aconfig.

Khai báo cờ dựng

Cờ bản dựng được khai báo trong các tệp textproto. Cách khai báo cờ bản dựng:

  1. Điều hướng đến WORKING_DIRECTORY/build/release/flag_declarations/
  2. Tạo một tệp có tên là RELEASE_MY_FLAG_NAME.textproto.
  3. Chỉnh sửa tệp và thêm một mục tương tự như sau:

    name: "RELEASE_MY_FLAG_NAME"
    namespace: "android_UNKNOWN"
    description: "Control if we should read from new storage."
    workflow: LAUNCH
    containers: "product"
    containers: "system"
    containers: "system_ext"
    containers: "vendor"
    

    Trong trường hợp:

    • name chứa tên của cờ, trước đó là RELEASE_. Bạn chỉ được dùng chữ cái viết hoa và dấu gạch dưới.
    • namespace chứa không gian tên cho các đóng góp. Bạn phải làm việc với người đánh giá được chỉ định của Google để xác định không gian tên của mình. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì tính ổn định của bản sao AOSP của riêng mình, bạn có thể sử dụng không gian tên theo ý muốn.
    • value là kiểu và giá trị ban đầu cho cờ. Loại này có thể là bool_value hoặc string_value. Nếu loại là string_value thì giá trị phải nằm trong dấu ngoặc kép. Nếu bạn không chỉ định, giá trị sẽ là một chuỗi trống. Giá trị boolean được biểu thị là true hoặc chuỗi trống cho giá trị false.
    • workflowLAUNCH hoặc PREBUILT. Sử dụng LAUNCH cho các cờ boolean chuyển từ false sang true, tương tự như cờ ra mắt tính năng. Sử dụng PREBUILT cho các cờ đặt một phiên bản, thường là của một phiên bản được tạo sẵn.
    • containers loại mã mà bạn đang viết, chẳng hạn như "nhà cung cấp" cho mã nhà cung cấp hoặc "sản phẩm" cho mã sản phẩm. Nếu bạn không chắc chắn về giá trị cần sử dụng, hãy sử dụng cả 4 loại vùng chứa như trong mẫu trước.

Sử dụng cờ bản dựng trong tệp Soong

Trong tệp bản dựng và mô-đun mà bạn muốn truy vấn giá trị cờ, hãy sử dụng một điều kiện để phân nhánh trên giá trị cờ. Ví dụ: trong đoạn mã sau, giá trị của cờ RELEASE__READ_FROM_NEW_STORAGE sẽ được truy vấn:

cc_defaults {
  name: "aconfig_lib_cc_shared_link.defaults",
  shared_libs: select(release_flag("RELEASE_READ_FROM_NEW_STORAGE"), {
    true: ["libaconfig_storage_read_api_cc],
    default: [],
  }),
}

Nếu giá trị của cờ này là true, thì mô-đun libaconfig_storage_read_api_cc sẽ được liên kết linh hoạt vào mô-đun cc_defaults.

Nếu giá trị của cờ này là false, thì sẽ không có gì xảy ra (default: [],).

Sử dụng cờ bản dựng trong tệp makefile

Trong tệp make, cờ bản dựng là một biến make chỉ đọc. Mẫu makefile sau đây truy cập vào một cờ bản dựng có tên là RELEASED_PACKAGE_NFC_STCK:

# NFC and Secure Element packages
PRODUCT_PACKAGES += \
    $(RELEASE_PACKAGE_NFC_STACK) \
    Tag \
    SecureElement \
    android.hardware.nfc-service.st \
    android.hardware.secure_element@1.0-service.st \
    NfcOverlayCoral

Khai báo của cờ này có trường workflow được đặt thành PREBUILT trong RELEASE_PACKAGE_NFC_STACK.textproto và giá trị chuỗi là com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto tệp giá trị cờ cho cấu hình phát triển trunk_staging.