يمكنك استخدام علامات 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_libraryCodegen للغة C أو C++، ما يؤدي إلى إنشاء مكتبة تتضمّن الرمز البرمجي الذي تم إنشاؤه في وقت الإنشاء.تشبه مكتبة CC aconfig هدف مكتبة CC، ولكنها تتضمّن خيارات مثل
vendor_availableوproduct_availableوhost_supportedوvndk. إذا كان هدف الإصدار الذي يعتمد علىcc_aconfig_libraryيتطلّب نوعًا معيّنًا من الصيغ، قد تحتاج أيضًا إلى إضافة الإعداد المقابل في هدف مكتبة CC aconfig. على سبيل المثال، إذا كان هدف الإصدار الرئيسي مضبوطًا علىvendor_availabletrue، قد تحتاج أيضًا إلى ضبط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_librarynameفي الخطوة 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بتضمين مكتبة العلامات التي تم إنشاؤها.احفظ الملف واخرج من المحرّر.