پرچمهای ساخت ثابتهای زمان ساخت هستند و نمیتوان آنها را در زمان اجرا تغییر داد. این پرچم ها در شرایطی استفاده می شوند که از پرچم های aconfig نمی توان استفاده کرد، مانند
- شما یک قطعه کد از پیش کامپایل شده یا از پیش ساخته شده دارید که می خواهید به صورت اختیاری در یک بیلد قرار دهید.
- شما می خواهید تغییراتی ایجاد کنید تا خود سیستم را بسازید.
- شما می خواهید پرچم هایی را در اطراف وابستگی ها قرار دهید تا اندازه کد را مدیریت کنید.
- شما میخواهید راهاندازی یک ویژگی را مدیریت کنید، اما قبل از اینکه پرچمهای aconfig توسط سیستم در دسترس قرار گیرند، باید مقدار پرچم را بررسی کنید.
پرچم ساخت را اعلام کنید
پرچم های ساخت در فایل های textproto اعلان می شوند. برای اعلام پرچم ساخت:
- به
WORKING_DIRECTORY /build/release/flag_declarations/بروید - فایلی به نام
RELEASE_ MY_FLAG_NAME .textprotoایجاد کنید. فایل را ویرایش کنید و یک ورودی شبیه به زیر اضافه کنید:
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یاLAUNCHیاPREBUILTاست. ازLAUNCHبرای پرچمهای بولی که ازfalseبهtrueپیش میروند، مشابه پرچمهای راهاندازی ویژگی استفاده کنید.PREBUILTبرای پرچم هایی که یک نسخه را تنظیم می کنند، معمولاً یک نسخه از پیش ساخته شده، استفاده کنید. -
containersنوع کدی است که می نویسید، مانند "فروشنده" برای کد فروشنده یا "محصول" برای کد محصول. اگر در مورد ارزش استفاده شک دارید، از هر چهار نوع کانتینر همانطور که در نمونه قبلی نشان داده شده است استفاده کنید.
-
از build flag در فایل 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: [], ) اتفاق نمیافتد.
از build flag در 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
اعلامیه این پرچم دارای یک فیلد workflow است که در RELEASE_PACKAGE_NFC_STACK.textproto روی PREBUILT تنظیم شده است و یک مقدار رشته ای از com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto فایل مقادیر پرچم برای پیکربندی توسعه trunk_staging .