宣告及使用建構旗標

建構標記是建構時間常數,無法在執行階段變更。這些旗標用於無法使用 aconfig 旗標的情況,例如

  • 您有預先編譯或建構的程式碼片段,想要選擇性地納入建構作業。
  • 您想變更建構系統本身。
  • 您想在依附元件周圍加上標記,以便管理程式碼大小。
  • 您想管理功能發布作業,但需要先檢查標記的值,系統才會提供 aconfig 標記。

宣告建構旗標

建構標記會在 textproto 檔案中宣告。如要宣告建構標記:

  1. 導航到WORKING_DIRECTORY/build/release/flag_declarations/
  2. 建立名為 RELEASE_MY_FLAG_NAME.textproto 的檔案。
  3. 編輯檔案,並新增類似下列的項目:

    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_valuestring_value。如果類型為 string_value,則值必須以引號括住。如未指定,則值為空字串。布林值會以 true 或空字串表示 false。
    • workflowLAUNCHPREBUILT。使用 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