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