پرچمهای ساخت، ثابتهای زمان ساخت هستند و در زمان اجرا قابل تغییر نیستند. این پرچمها در شرایطی استفاده میشوند که نمیتوان از پرچمهای aconfig استفاده کرد، مانند
- شما یک قطعه کد از پیش کامپایل شده یا از پیش ساخته شده دارید که میخواهید به صورت اختیاری در یک build قرار دهید.
- شما میخواهید تغییراتی برای ساخت خود سیستم ایجاد کنید.
- شما میخواهید برای مدیریت حجم کد، پرچمهایی (flags) را در اطراف وابستگیها قرار دهید.
- شما میخواهید راهاندازی یک ویژگی را مدیریت کنید، اما باید قبل از اینکه پرچمهای پیکربندی توسط سیستم در دسترس قرار گیرند، مقدار پرچم را بررسی کنید.
اعلام پرچم ساخت
پرچمهای ساخت در فایلهای 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شامل namespace برای مشارکتها است. شما باید با بررسیکنندهی تعیینشدهی گوگل برای تعیین namespace خود همکاری کنید. اگر از پرچمهای راهاندازی ویژگی برای حفظ پایداری آینهی AOSP خود استفاده میکنید، میتوانید از namespace به هر شکلی که دوست دارید استفاده کنید. -
valueنوع و مقدار اولیه برای flag است. نوع میتواندbool_valueیاstring_valueباشد. اگر typestring_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 دارد.