اعلام کنید و از یک build flag استفاده کنید

پرچم‌های ساخت، ثابت‌های زمان ساخت هستند و در زمان اجرا قابل تغییر نیستند. این پرچم‌ها در شرایطی استفاده می‌شوند که نمی‌توان از پرچم‌های aconfig استفاده کرد، مانند

  • شما یک قطعه کد از پیش کامپایل شده یا از پیش ساخته شده دارید که می‌خواهید به صورت اختیاری در یک build قرار دهید.
  • شما می‌خواهید تغییراتی برای ساخت خود سیستم ایجاد کنید.
  • شما می‌خواهید برای مدیریت حجم کد، پرچم‌هایی (flags) را در اطراف وابستگی‌ها قرار دهید.
  • شما می‌خواهید راه‌اندازی یک ویژگی را مدیریت کنید، اما باید قبل از اینکه پرچم‌های پیکربندی توسط سیستم در دسترس قرار گیرند، مقدار پرچم را بررسی کنید.

اعلام پرچم ساخت

پرچم‌های ساخت در فایل‌های 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 شامل namespace برای مشارکت‌ها است. شما باید با بررسی‌کننده‌ی تعیین‌شده‌ی گوگل برای تعیین namespace خود همکاری کنید. اگر از پرچم‌های راه‌اندازی ویژگی برای حفظ پایداری آینه‌ی AOSP خود استفاده می‌کنید، می‌توانید از namespace به هر شکلی که دوست دارید استفاده کنید.
    • value نوع و مقدار اولیه برای flag است. نوع می‌تواند bool_value یا string_value باشد. اگر type string_value باشد، مقدار باید داخل گیومه باشد. اگر مشخص نشود، مقدار یک رشته خالی است. مقادیر بولی به صورت true یا رشته خالی برای false نمایش داده می‌شوند.
    • workflow یا LAUNCH است یا PREBUILT . LAUNCH برای پرچم‌های بولی که از false به true پیش می‌روند، مشابه پرچم‌های راه‌اندازی ویژگی، استفاده کنید. PREBUILT برای پرچم‌هایی که یک نسخه را تنظیم می‌کنند، معمولاً از یک نسخه از پیش ساخته شده، استفاده کنید.
    • نوع کدی که می‌نویسید را containers ، مانند "vendor" برای کد فروشنده یا "product" برای کد محصول. اگر در مورد مقدار مورد استفاده شک دارید، از هر چهار نوع کانتینر همانطور که در نمونه قبلی نشان داده شده است استفاده کنید.

استفاده از یک پرچم ساخت در یک فایل Soong

در فایل ساخت و ماژولی که می‌خواهید مقدار flag را در آن جستجو کنید، از یک شرط برای شاخه‌بندی روی مقدار flag استفاده کنید. برای مثال، در قطعه کد زیر، مقدار flag مربوط به 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 فقط خواندنی است. نمونه فایل make زیر به یک پرچم ساخت به نام 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

اعلان این پرچم دارای یک فیلد workflow است که در RELEASE_PACKAGE_NFC_STACK.textproto روی PREBUILT تنظیم شده و مقدار رشته‌ای com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto در فایل مقادیر پرچم برای پیکربندی توسعه trunk_staging دارد.