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

ビルドフラグはビルド時の定数であり、実行時に変更できません。このフラグは、次のような 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 の場合は空の文字列で表されます。
    • workflow は、LAUNCHPREBUILT のいずれかです。機能リリースフラグと同様に、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 でビルドフラグを使用する

makefile では、ビルドフラグは読み取り専用の 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 に設定され、RELEASE_PACKAGE_NFC_STACK.textprototrunk_staging 開発構成のフラグ値ファイル)で文字列値 com.android.nfcservices が設定されています。