宣告及使用建構旗標

建構標記是建構時間常數,無法在執行階段變更。這些旗標可用於無法使用 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。
    • workflow 可以是 LAUNCHPREBUILT。將 LAUNCH 用於從 false 進展至 true 的布林值旗標,類似於功能啟動旗標。將 PREBUILT 用於設定版本的標記,通常是預先建構的版本。
    • containers 您要編寫的程式碼類型,例如供應商代碼的「供應商」或產品代碼的「產品」。如果您不確定要使用的值,請使用前述範例中顯示的所有四種容器類型。

在 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: [],
  }),
}

如果此標記的值為 truelibaconfig_storage_read_api_cc 模組會動態連結至 cc_defaults 模組。

如果此標記的值為 false,則不會發生任何情況 (default: [],)。

在 makefile 中使用建構旗標

在 Make 檔案中,建構標記是唯讀的 Make 變數。以下是存取名為 RELEASED_PACKAGE_NFC_STCK 的建構標記的範例 makefile:

# 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 欄位設為 PREBUILT,並將 com.android.nfcservices 字串值設為 RELEASE_PACKAGE_NFC_STACK.textproto trunk_staging 開發設定的旗標值檔案。