Mendeklarasikan dan menggunakan flag build

Flag build adalah konstanta waktu build dan tidak dapat diubah selama runtime. Flag ini digunakan dalam situasi saat flag aconfig tidak dapat digunakan, seperti

  • Anda memiliki potongan kode yang telah dikompilasi atau dibuat sebelumnya yang ingin Anda sertakan secara opsional dalam build.
  • Anda ingin membuat perubahan pada sistem build itu sendiri.
  • Anda ingin menempatkan flag di sekitar dependensi untuk mengelola ukuran kode.
  • Anda ingin mengelola peluncuran fitur, tetapi Anda perlu memeriksa nilai flag sebelum flag aconfig tersedia oleh sistem.

Mendeklarasikan flag build

Flag build dideklarasikan dalam file textproto. Untuk mendeklarasikan flag build:

  1. Navigasikan ke WORKING_DIRECTORY/build/release/flag_declarations/
  2. Buat file bernama RELEASE_MY_FLAG_NAME.textproto.
  3. Edit file dan tambahkan entri yang mirip dengan berikut ini:

    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"
    

    Dalam hal ini:

    • name berisi nama flag yang didahului dengan RELEASE_. Hanya huruf besar dan garis bawah yang diizinkan.
    • namespace berisi namespace untuk kontribusi. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukan namespace Anda. Jika menggunakan flag peluncuran fitur untuk mempertahankan stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan namespace sesuai keinginan.
    • value adalah jenis dan nilai awal untuk flag. Jenisnya dapat berupa bool_value atau string_value. Jika jenisnya adalah string_value, nilainya harus dalam tanda kutip. Jika tidak ditentukan, nilainya adalah string kosong. Nilai boolean diwakili sebagai true atau string kosong untuk false.
    • workflow adalah LAUNCH atau PREBUILT. Gunakan LAUNCH untuk flag boolean yang maju dari false ke true, mirip dengan flag peluncuran fitur. Gunakan PREBUILT untuk flag yang menetapkan versi, biasanya versi bawaan.
    • containers jenis kode yang Anda tulis, seperti "vendor" untuk kode vendor atau "product" untuk kode produk. Jika Anda ragu dengan nilai yang akan digunakan, gunakan keempat jenis penampung seperti yang ditunjukkan dalam contoh sebelumnya.

Menggunakan flag build dalam file Soong

Dalam file build dan modul tempat Anda ingin membuat kueri nilai tanda, gunakan kondisional untuk membuat cabang pada nilai tanda. Misalnya, dalam cuplikan berikut, nilai tanda RELEASE__READ_FROM_NEW_STORAGE dikueri:

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

Jika nilai tanda ini adalah true, modul libaconfig_storage_read_api_cc akan ditautkan secara dinamis ke dalam modul cc_defaults.

Jika nilai flag ini adalah false, tidak ada yang terjadi (default: [],).

Menggunakan flag build dalam makefile

Dalam file make, flag build adalah variabel make hanya baca. Contoh makefile berikut mengakses flag build yang disebut 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

Deklarasi tanda ini memiliki kolom workflow yang ditetapkan ke PREBUILT di RELEASE_PACKAGE_NFC_STACK.textproto dan nilai string com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto file nilai tanda untuk konfigurasi pengembangan trunk_staging.