建構標記是建構時間常數,無法在執行階段變更。這些旗標用於無法使用 aconfig 旗標的情況,例如
- 您有預先編譯或建構的程式碼片段,想要選擇性地納入建構作業。
- 您想變更建構系統本身。
- 您想在依附元件周圍加上標記,以便管理程式碼大小。
- 您想管理功能發布作業,但需要先檢查標記的值,系統才會提供 aconfig 標記。
宣告建構旗標
建構標記會在 textproto 檔案中宣告。如要宣告建構標記:
- 導航到
WORKING_DIRECTORY/build/release/flag_declarations/
- 建立名為
RELEASE_MY_FLAG_NAME.textproto
的檔案。 編輯檔案,並新增類似下列的項目:
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"
其中:
name
包含旗標名稱,前面加上RELEASE_
。只能使用大寫字母和底線。namespace
包含貢獻內容的命名空間。您必須與指派的 Google 審查員合作,決定命名空間。如果您使用功能發布標記來維護自己的 AOSP 鏡像穩定性,可以隨意使用命名空間。value
是旗標的初始類型和值。類型可以是bool_value
或string_value
。如果類型為string_value
,則值必須以引號括住。如未指定,則值為空字串。布林值會以true
或空字串表示 false。workflow
是LAUNCH
或PREBUILT
。使用LAUNCH
做為布林值旗標,從false
前進至true
,類似於功能發布旗標。使用PREBUILT
設定版本 (通常是預先建構的版本) 的旗標。containers
你要編寫的代碼類型,例如供應商代碼的「vendor」,或是產品代碼的「product」。如果不確定要使用哪個值,請使用前一個範例中顯示的全部四種容器類型。
在 Soong 檔案中使用建構旗標
在要查詢標記值的建構檔案和模組中,使用條件式根據標記值進行分支。舉例來說,在下列程式碼片段中,系統會查詢 RELEASE__READ_FROM_NEW_STORAGE
旗標的值:
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: [],
}),
}
如果這個旗標的值為 true
,系統會將 libaconfig_storage_read_api_cc
模組動態連結至 cc_defaults
模組。
如果這個標記的值為 false
,則不會發生任何情況 (default: [],
)。
在 Makefile 中使用建構旗標
在 make 檔案中,建構標記是唯讀的 make 變數。下列 makefile 範例會存取名為 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
這個旗標的宣告在 RELEASE_PACKAGE_NFC_STACK.textproto
中設有 workflow
欄位,且旗標值檔案的 trunk_staging
開發設定中含有 com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
旗標值。PREBUILT