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

إنّ علامات الإنشاء هي ثوابت وقت الإنشاء ولا يمكن تغييرها أثناء وقت التشغيل. تُستخدَم هذه العلامات في الحالات التي لا يمكن فيها استخدام علامات 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

في ملف الإنشاء، يكون علم الإنشاء متغيّرًا للقراءة فقط. يصل نموذج ملف 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.