ビルドフラグを宣言して使用する

ビルドフラグはビルド時の定数であり、実行時に変更できません。これらのフラグは、次のような 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_value または string_value です。型が string_value の場合、値は引用符で囲む必要があります。指定しない場合、値は空の文字列になります。ブール値は、true または false の場合は空の文字列で表されます。
    • workflowLAUNCH または PREBUILT です。機能起動フラグと同様に、false から true に進むブール値フラグには LAUNCH を使用します。バージョン(通常はビルド済み)を設定するフラグには PREBUILT を使用します。
    • containers 作成するコードの種類(ベンダーコードの場合は「vendor」、商品コードの場合は「product」など)。使用する値が不明な場合は、前の例に示すように、4 つのコンテナタイプすべてを使用します。

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.textprotoworkflow フィールドが PREBUILT に設定され、文字列値 com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textprototrunk_staging 開発構成のフラグ値ファイル)があります。