تحديد علامة إنشاء واستخدامها

علامات الإنشاء هي ثوابت وقت الإنشاء ولا يمكن تغييرها أثناء وقت التشغيل. يتم استخدام هذه العلامات في الحالات التي لا يمكن فيها استخدام علامات aconfig، مثل

  • لديك قطعة رمز تم تجميعها أو إنشاؤها مسبقًا تريد تضمينها اختياريًا في إصدار.
  • إذا كنت تريد إجراء تغييرات على نظام التشغيل نفسه
  • إذا أردت وضع علامات حول التبعيات لإدارة حجم الرمز
  • تريد إدارة إطلاق ميزة، ولكن عليك التحقّق من قيمة العلامة قبل أن يُتيح النظام علامات aconfig.

تحديد علامة إنشاء

يتمّ الإعلان عن علامات الإنشاء في ملفات 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 على مساحة الاسم للمساهمات. عليك العمل مع المراجع المعيّن من 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.