يمكنك استخدام علامات aconfig في رموز Java وC وC++ وRust البرمجية. يُشغِّل نظام التصميم في مشروع Android المفتوح المصدر (AOSP) أداة تُعرف باسم aconfig تُستخدَم لإنشاء مكتبة خاصة باللغة تتضمّن طرقًا يمكنك استخدامها للوصول إلى قيمة كل علامة. قبل أن تتمكّن من إنشاء المكتبة، عليك الإعلان عن العلامات وإضافتها إلى الإصدار.
الإعلان عن علامة aconfig لـ Java
للتعريف بعلامة aconfig لـ Java:
في دليل يحتوي على الرمز البرمجي الجديد، أنشئ ملفًا بالامتداد
.aconfig، مثلاًmy_new_aconfig_flag_declarations.aconfig. ملف aconfig هو ملف نصي بتنسيق proto يتّبع مخططًا عاديًا.أضِف إعلانًا عن علامة مشابهًا لما يلي:
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 هو ملف نصي بتنسيق proto يتّبع مخططًا عاديًا.أضِف إعلانًا عن علامة مشابهًا لما يلي:
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أداة C أو C++ Codegen، التي تنشئ مكتبة تتضمّن الرمز البرمجي الذي تم إنشاؤه في مدّة التصميم.تشبه مكتبة aconfig لـ CC هدف مكتبة CC، ولكنها تتضمّن خيارات مثل
vendor_availableوproduct_availableوhost_supportedوvndk. إذا كان هدف الإصدار الذي يعتمد علىcc_aconfig_libraryهذا يتطلّب نوعًا معيّنًا من المتغيّرات، قد تحتاج أيضًا إلى إضافة الإعداد المقابل في هدف مكتبة aconfig لـ CC. على سبيل المثال، إذا كان هدف الإصدار الرئيسي مضبوطًا على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هو اسم المكتبة التي ينشئها الإصدار لكل حقلnameفيcc_aconfig_libraryفي الخطوة 2. من خلال إنشاء إدخالcc_libraryباسم المكتبة الثابتة، يمكنك الآن استخدام علامات aconfig في الرمز البرمجي.
- يتضمّن
الإعلان عن علامة aconfig لـ Rust
للتعريف بعلامة aconfig لـ Rust:
في دليل يحتوي على الرمز البرمجي الجديد، أنشئ ملفًا بالامتداد
.aconfig، مثلاًmy_new_aconfig_flag_declarations.aconfig. ملف aconfig هو ملف نصي بتنسيق proto يتّبع مخططًا عاديًا.أضِف إعلانًا عن علامة مشابهًا لما يلي:
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بتضمين مكتبة العلامات التي تم إنشاؤها في الرمز البرمجي.احفظ الملف واخرج من المحرّر.