Cờ bản dựng là hằng số trong thời gian xây dựng và không thể thay đổi trong thời gian chạy. Các cờ này được dùng trong những trường hợp không thể dùng 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 xây 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 bạn cần kiểm tra giá trị của cờ trước khi hệ thống cung cấp cờ aconfig.
Khai báo cờ bản 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:
- Chuyển đến
WORKING_DIRECTORY/build/release/flag_declarations/ - Tạo một tệp có tên là
RELEASE_MY_FLAG_NAME.textproto. 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:
namechứa tên của cờ, đứng trước làRELEASE_. Bạn chỉ được dùng chữ cái viết hoa và dấu gạch dưới.namespacechứa không gian tên cho các đóng góp. Bạn phải làm việc với người xem xét được chỉ định của Google để xác định không gian tên của mình. Nếu đang dùng cờ ra mắt 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ể dùng không gian tên theo ý muốn.valuelà loại và giá trị ban đầu cho cờ. Loại có thể làbool_valuehoặcstring_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 rỗng. Giá trị boolean được biểu thị làtruehoặc chuỗi rỗng cho giá trị false.workflowlàLAUNCHhoặcPREBUILT. DùngLAUNCHcho các cờ boolean chuyển từfalsesangtrue, tương tự như cờ ra mắt tính năng. DùngPREBUILTcho các cờ đặt một phiên bản, thường là phiên bản tạo sẵn.containerslà loại mã bạn đang viết, chẳng hạn như "vendor" cho mã nhà cung cấp hoặc "product" cho mã sản phẩm. Nếu bạn không chắc chắn về giá trị cần dùng, hãy dùng cả 4 loại vùng chứa như trong mẫu trước.
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 dùng điều kiện để phân nhánh theo giá trị cờ. Ví dụ: trong đoạn mã sau, giá trị của cờ RELEASE__READ_FROM_NEW_STORAGE đượ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, mô-đun libaconfig_storage_read_api_cc sẽ được liên kết động 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: [],).
Dùng cờ bản dựng trong tệp makefile
Trong tệp make, cờ bản dựng là biến make chỉ đọc. Mẫu makefile sau đây truy cập vào 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
Phần khai báo 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.