يمكنك استخدام علامات aconfig في رمز Java وC وC++ وRust. يُطلق نظام إنشاء AOSP أداة باسم aconfig تُستخدَم لإنشاء مكتبة خاصة باللغة تتضمّن طرقًا يمكنك استخدامها للوصول إلى قيمة كل علامة. قبل أن تتمكّن من إنشاء المكتبة، عليك تعريف العلامات وإضافتها إلى الإصدار.
تعريف علامة aconfig لتطبيق Java
لتعريف علامة aconfig لتطبيق Java، اتّبِع الخطوات التالية:
في دليل يتضمّن الرمز الجديد، أنشئ ملفًا بالامتداد
.aconfig
، مثلmy_new_aconfig_flag_declarations.aconfig
. ملف aconfig هو ملف نصي أولي يتّبع مخططًا عاديًا.أضِف تعريف علامة مشابهًا لما يلي:
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
المكان:
package
، عند دمجه مع اسم العلامة، يوفّر مفتاحًا فريدًا. في Java، يؤدي ضبطpackage
علىfoo.bar
إلى إنشاء فئة تلقائيًا باسمfoo.bar.Flags
. في لغة C++، ستُسمّى طرق الوصول إلى العلاماتfoo::bar::"flagname"
. تنتمي العلامات في ملف البيان نفسه إلى الحزمة نفسها، ولكن يمكن أن تساهم ملفات بيان متعددة في إضافة علامات إلى الحزمة نفسها.تحدّد
container
مجموعة من الرموز البرمجية التي يتم إنشاؤها وشحنها معًا كملف ثنائي. الحاويات الصالحة هيsystem
وvendor
وsystem_ext
وproduct
وname.of.apex
وname.of.apk
.يحتوي
name
على اسم العلامة الذي يتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط.تحتوي
namespace
على مساحة الاسم الخاصة بالمساهمات. عليك العمل مع المراجع المعيّن من Google لتحديد مساحة الاسم. إذا كنت تستخدم علامات إطلاق الميزات للحفاظ على استقرار نسخة AOSP الخاصة بك، يمكنك استخدام مساحة الاسم بالطريقة التي تريدها.يحتوي
description
على وصف موجز للميزة أو التغيير الذي تم وضع علامة عليه.
bug
هو رقم الخطأ المرتبط بالمساهمة الجديدة في الرمز. عليك التعاون مع المراجع المعيّن من Google لتحديدbug
. إذا كنت تستخدم علامات إطلاق الميزات للحفاظ على ثبات نسخة AOSP الخاصة بك، يمكنك استخدام رقم تتبُّع الأخطاء أو استخدام<none>
.
احفظ الملف واخرج من المحرّر.
إعداد الإصدار
بعد تعريف العلامة، عليك إعداد الإصدار لكي يتمكّن من إنشاء رمز المكتبة المستخدَم للوصول إلى قيمة العلامة.
في ملف الإنشاء
Android.bp
، أضِف قسمaconfig_declarations
مشابهًا لما يلي:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
المكان:
- يحتوي
name
على اسم التصريح الذي يتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط. - يحتوي
package
على اسم الحزمة نفسه المستخدَم في البيان. - يحتوي
srcs
على اسم ملف.aconfig
الذي تم فيه تعريف العلامة.
- يحتوي
احفظ الملف واخرج من المحرّر.
تعريف علامة aconfig للغة C وC++
لتعريف علامة aconfig للغة C وC++، اتّبِع الخطوات التالية:
في دليل يتضمّن الرمز الجديد، أنشئ ملفًا بالامتداد
.aconfig
، مثلmy_new_aconfig_flag_declarations.aconfig
. ملف aconfig هو ملف نصي أولي يتّبع مخططًا عاديًا.أضِف تعريف علامة مشابهًا لما يلي:
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
المكان:
package
، عند دمجه مع اسم العلامة، يوفّر مفتاحًا فريدًا. في Java، يؤدي ضبطpackage
علىfoo.bar
إلى إنشاء فئة تلقائيًا باسمfoo.bar.Flags
. في لغة C++، ستُسمّى طرق الوصول إلى العلاماتfoo::bar::"flagname"
. تنتمي العلامات في ملف البيان نفسه إلى الحزمة نفسها، ولكن يمكن أن تساهم ملفات بيان متعددة في إضافة علامات إلى الحزمة نفسها.تحدّد
container
مجموعة من الرموز البرمجية التي يتم إنشاؤها وشحنها معًا كملف ثنائي. الحاويات الصالحة هيsystem
وvendor
وsystem_ext
وproduct
وname.of.apex
وname.of.apk
.يحتوي
name
على اسم العلامة الذي يتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط.تحتوي
namespace
على مساحة الاسم الخاصة بالمساهمات. عليك العمل مع المراجع المعيّن من Google لتحديد مساحة الاسم. إذا كنت تستخدم علامات إطلاق الميزات للحفاظ على استقرار نسخة AOSP الخاصة بك، يمكنك استخدام مساحة الاسم بالطريقة التي تريدها.يحتوي
description
على وصف موجز للميزة أو التغيير الذي تم وضع علامة عليه.
bug
هو رقم الخطأ المرتبط بالمساهمة الجديدة في الرمز. عليك التعاون مع المراجع المعيّن من Google لتحديدbug
. إذا كنت تستخدم علامات إطلاق الميزات للحفاظ على ثبات نسخة AOSP الخاصة بك، يمكنك استخدام رقم تتبُّع الأخطاء أو استخدام<none>
.
احفظ الملف واخرج من المحرّر.
إعداد الإصدار
بعد تعريف العلامة، عليك إعداد الإصدار لكي يتمكّن من إنشاء رمز المكتبة المستخدَم للوصول إلى قيمة العلامة.
في ملف الإنشاء
Android.bp
، أضِف قسمaconfig_declarations
مشابهًا لما يلي:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
المكان:
- يحتوي
name
على اسم التصريح الذي يتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط. - يحتوي
package
على اسم الحزمة نفسه المستخدَم في البيان. - يحتوي
srcs
على اسم ملف aconfig الذي تم فيه تعريف العلامة.
- يحتوي
في الملف نفسه، أنشئ هدفًا
cc_aconfig_library
مشابهًا لما يلي:cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }
المكان:
- يحتوي
name
على اسم المكتبة التي تتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط. - يحتوي
aconfig_declarations
علىname
نفسه المستخدَم في البيان.
يستدعي هدف الإنشاء
cc_aconfig_library
Codegen للغة C أو C++، ما يؤدي إلى إنشاء مكتبة تتضمّن الرمز البرمجي الذي تم إنشاؤه في وقت الإنشاء.تشبه مكتبة CC aconfig هدف مكتبة CC، ولكنها تتضمّن خيارات مثل
vendor_available
وproduct_available
وhost_supported
وvndk
. إذا كان هدف الإصدار الذي يعتمد علىcc_aconfig_library
يتطلّب نوعًا معيّنًا من الصيغ، قد تحتاج أيضًا إلى إضافة الإعداد المقابل في هدف مكتبة CC aconfig. على سبيل المثال، إذا كان هدف الإصدار الرئيسي مضبوطًا علىvendor_available
true
، قد تحتاج أيضًا إلى ضبطvendor_available
علىtrue
في هدف الإصدارcc_aconfig_library
هذا.بعد إضافة هدف الإنشاء هذا، يمكن أن يصل الرمز البرمجي إلى هذه المكتبة. يمكنك تضمين هذه المكتبة باستخدام بنية
static_lib
أوshared_lib
. يُرجى العِلم أنّه إذا أردت إضافة هذه المكتبة كـstatic_lib
، عليك إضافة تبعيةshared_lib
إلىserver_configurable_flags
. تعرض الخطوة 3 كيفية تضمين مكتبة العلامات التي تم إنشاؤها باستخدام الرمز البرمجي فيlibexample_cpp_lib
.- يحتوي
أنشئ هدفًا يستخدِم علامات aconfig، مثل المثال التالي
cc_library
:cc_library { name: "libexample_cpp_lib", srcs: ["src/example_cpp_lib.cc"], double_loadable: true, cflags: [ "-Wall", "-Werror", "-Wno-unused-function", "-Wno-unused-parameter", ], header_libs: [ "jni_headers", ], shared_libs: [ "server_configurable_flags", ], static_libs: [ "aconfig_demo_flags_c_lib", ], export_include_dirs: ["src/include"], }
المكان:
- يتضمّن
shared_libs
تبعيات إضافية مطلوبة لعلامات aconfig. -
static_libs
هو اسم المكتبة التي تم إنشاؤها بواسطة الإصدار وفقًا للحقلcc_aconfig_library
name
في الخطوة 2. من خلال إنشاء إدخالcc_library
باستخدام اسم المكتبة الثابتة، يمكنك الآن استخدام علامات aconfig في الرمز البرمجي.
- يتضمّن
تعريف علامة aconfig لـ Rust
لتعريف علامة aconfig في Rust، اتّبِع الخطوات التالية:
في دليل يتضمّن الرمز الجديد، أنشئ ملفًا بالامتداد
.aconfig
، مثلmy_new_aconfig_flag_declarations.aconfig
. ملف aconfig هو ملف نصي أولي يتّبع مخططًا عاديًا.أضِف تعريف علامة مشابهًا لما يلي:
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
المكان:
package
، عند دمجه مع اسم العلامة، يوفّر مفتاحًا فريدًا. في Java، يؤدي ضبطpackage
علىfoo.bar
إلى إنشاء فئة تلقائيًا باسمfoo.bar.Flags
. في لغة C++، ستُسمّى طرق الوصول إلى العلاماتfoo::bar::"flagname"
. تنتمي العلامات في ملف البيان نفسه إلى الحزمة نفسها، ولكن يمكن أن تساهم ملفات بيان متعددة في إضافة علامات إلى الحزمة نفسها.تحدّد
container
مجموعة من الرموز البرمجية التي يتم إنشاؤها وشحنها معًا كملف ثنائي. الحاويات الصالحة هيsystem
وvendor
وsystem_ext
وproduct
وname.of.apex
وname.of.apk
.يحتوي
name
على اسم العلامة الذي يتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط.تحتوي
namespace
على مساحة الاسم الخاصة بالمساهمات. عليك العمل مع المراجع المعيّن من Google لتحديد مساحة الاسم. إذا كنت تستخدم علامات إطلاق الميزات للحفاظ على استقرار نسخة AOSP الخاصة بك، يمكنك استخدام مساحة الاسم بالطريقة التي تريدها.يحتوي
description
على وصف موجز للميزة أو التغيير الذي تم وضع علامة عليه.
bug
هو رقم الخطأ المرتبط بالمساهمة الجديدة في الرمز. عليك التعاون مع المراجع المعيّن من Google لتحديدbug
. إذا كنت تستخدم علامات إطلاق الميزات للحفاظ على ثبات نسخة AOSP الخاصة بك، يمكنك استخدام رقم تتبُّع الأخطاء أو استخدام<none>
.
احفظ الملف واخرج من المحرّر.
إعداد الإصدار
بعد تعريف العلامة، عليك إعداد الإصدار لكي يتمكّن من إنشاء رمز المكتبة المستخدَم للوصول إلى قيمة العلامة.
في ملف إنشاء
Android.bp
، أضِف قسمaconfig_declarations
مشابهًا لما يلي:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
المكان:
- يحتوي
name
على اسم التصريح الذي يتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط. - يحتوي
package
على اسم الحزمة نفسه المستخدَم في البيان. - يحتوي
srcs
على اسم ملف aconfig الذي تم فيه تعريف العلامة.
- يحتوي
أنشئ
rust_aconfig_library
هدفًا مشابهًا للمثال التالي. يستدعي هذا الهدف Rust Codegen وينشئ مكتبة Rust تتضمّن الرمز البرمجي الذي تم إنشاؤه أثناء وقت الإنشاء.rust_aconfig_library { name: "libaconfig_demo_flags_rust", crate_name: "aconfig_demo_flags_rust", aconfig_declarations: "aconfig_demo_flags", }
المكان:
- يحتوي
name
على اسم التصريح الذي يتضمّن أحرفًا صغيرة وشرطات سفلية وأرقامًا فقط. - يحتوي
crate_name
على اسم الحزمة نفسه المستخدَم في البيان. - يحتوي
aconfig_declarations
علىname
نفسه المستخدَم في البيان.
من خلال هذا التغيير، يمكن أن يعتمد الرمز البرمجي على مكتبة Rust هذه.
- يحتوي
في الملف نفسه، أنشئ إدخال
rust_library
مشابهًا لما يلي:rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }
يسمح هذا النموذج لأهداف إنشاء رمز المصدر
libexample_demo_flags_rust
بتضمين مكتبة العلامات التي تم إنشاؤها.احفظ الملف واخرج من المحرّر.