علامات الإنشاء هي ثوابت وقت الإنشاء ولا يمكن تغييرها أثناء وقت التشغيل. يتم استخدام هذه العلامات في الحالات التي لا يمكن فيها استخدام علامات 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
أو السلسلة الفارغة للقيمة "خطأ".-
workflow
هو إماLAUNCH
أوPREBUILT
. استخدِمLAUNCH
للعلامات اللامتناهية التي تنتقل منfalse
إلىtrue
، تمامًا مثل علامات إطلاق الميزات. استخدِمPREBUILT
للعلامات التي تحدّد إصدارًا، عادةً من إصدار مُعدّ مسبقًا. containers
نوع الرمز الذي تكتبه، مثل "مورّد" لرمز المورّد أو "منتج" لرمز المنتج إذا لم تكن متأكّدًا من القيمة التي يجب استخدامها، استخدِم جميع أنواع الحاويات الأربعة كما هو موضّح في العيّنة السابقة.
- يحتوي
استخدام علامة إنشاء في ملف 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
في ملف make، علامة الإنشاء هي متغيّر 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
تم ضبطه على PREBUILT
في
RELEASE_PACKAGE_NFC_STACK.textproto
وقيمة سلسلة هي
com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
ملف قيم العلامات لإعدادات تطوير trunk_staging
.