تحديد علامة aconfig

يمكنك استخدام علامات التهيئة في Java وC وC++ وRust code. نظام إصدار AOSP أداة تسمى التكوين (aconfig) المستخدمة لإنشاء مكتبة خاصة باللغة التي يمكنك استخدامها للوصول إلى قيمة كل علامة. قبل أن تتمكّن من إنشاء المكتبة، عليك تحديد العلامات وإضافتها إلى عملية الإنشاء.

تحديد علامة aconfig لتطبيق Java

لتعريف علامة aconfig لتطبيق Java:

  1. في دليل يتضمّن الرمز الجديد، أنشئ ملفًا بلاحقة .aconfig، على سبيل المثال، my_new_aconfig_flag_declarations.aconfig. ملف التكوين هو ملف أولي نصي يتبع مخططًا قياسيًا.

  2. أضِف بيان علامة مشابهًا لما يلي:

    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>.

  3. احفظ الملف واخرج من المحرِّر.

إعداد عملية الإنشاء

بعد تحديد علامتك، عليك إعداد عملية الإنشاء لكي تتمكّن من إنشاء رمز مكتبة يُستخدَم للوصول إلى قيمة العلامة.

  1. في ملف إنشاء 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 الذي تم تعريف العلامة فيه.
  2. احفظ الملف واخرج من المحرِّر.

تعريف علامة الضبط لكل من C وC++

للإعلان عن علامة تهيئة لكل من C وC++:

  1. أنشئ ملفًا بالامتداد في الدليل الذي يوجد فيه الرمز الجديد. .aconfig، مثلاً my_new_aconfig_flag_declarations.aconfig. ملف aconfig هو ملف نصي عادي يتّبع مخطّطًا عاديًا.

  2. أضِف بيان علامة مشابهًا لما يلي:

    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>.

  3. احفظ الملف واخرج من المحرِّر.

إعداد عملية الإنشاء

بعد الإعلان عن العلامة، يمكنك إعداد الإصدار حتى يتسنى له إنشاء رمز المكتبة المستخدَم للوصول إلى قيمة العلامة.

  1. في ملف إصدار 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 الذي تمّ فيه الإعلان عن العلامة.
  2. في الملف نفسه، أنشئ استهداف 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

  3. أنشئ هدفًا يستخدم علامات 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:

  1. في دليل يتضمّن الرمز الجديد، أنشئ ملفًا بلاحقة .aconfig، على سبيل المثال، my_new_aconfig_flag_declarations.aconfig. ملف aconfig هو ملف نصي عادي يتّبع مخطّطًا عاديًا.

  2. أضِف بيان علامة مشابهًا لما يلي:

    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>.

  3. احفظ الملف واخرج من المحرِّر.

إعداد عملية الإنشاء

بعد تحديد علامتك، عليك إعداد عملية الإنشاء لكي تتمكّن من إنشاء رمز مكتبة يُستخدَم للوصول إلى قيمة العلامة.

  1. في ملف إصدار 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 الذي تمّ فيه الإعلان عن العلامة.
  2. أنشئ استهدافًا 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 هذه.

  3. في الملف نفسه، أنشئ إدخال rust_library مشابهًا لما يلي:

    rust_library {
      name: "libexample_lib",
      rustlibs: [
          "libaconfig_demo_flags_rust",
      ]
    }
    

    يتيح هذا النموذج لاستهدافات إنشاء رمز المصدر libexample_demo_flags_rust تضمين مكتبة العلامات التي تم إنشاؤها من خلال الرمز.

  4. احفظ الملف واخرج من المحرِّر.