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

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

استخدام علامة إصدار في ملف Sayg

في ملف الإصدار والوحدة حيث تريد الاستعلام عن قيمة العلامة، استخدم شرطيًا للتشعّب على قيمة العلامة. على سبيل المثال، في المقتطف التالي، يتم طلب قيمة العلامة 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.