aconfig फ़्लैग का एलान करना

Java, C, C++, और Rust कोड में aconfig फ़्लैग का इस्तेमाल किया जा सकता है. AOSP बिल्ड सिस्टम कॉन्फ़िगरेशन नाम का एक टूल लॉन्च करता है, जिसका इस्तेमाल हर फ़्लैग की वैल्यू ऐक्सेस करने के लिए, इस्तेमाल किए जा सकते हैं. जनरेट करने से पहले लाइब्रेरी का इस्तेमाल करते हैं, तो आपको फ़्लैग के बारे में बताना होगा और उन्हें बिल्ड में जोड़ना होगा.

Java के लिए aconfig फ़्लैग का एलान करना

Java के लिए aconfig फ़्लैग का एलान करने के लिए:

  1. उस डायरेक्ट्री में जहां नया कोड मौजूद है, .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, नए कोड से जुड़ी गड़बड़ी का नंबर है. bug तय करने के लिए, आपको Google के समीक्षक के साथ मिलकर काम करना होगा. अगर आप: अपने 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 जैसे एक्सटेंशन वाली फ़ाइल बनाएं. कॉन्फ़िगरेशन फ़ाइल, एक टेक्स्ट प्रोटो फ़ाइल होती है, जो स्टैंडर्ड स्कीमा का पालन करती है.

  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, नए कोड से जुड़ी गड़बड़ी का नंबर है. bug तय करने के लिए, आपको Google के समीक्षक के साथ मिलकर काम करना होगा. अगर आप: अपने 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 में उस कॉन्फ़िगरेशन फ़ाइल का नाम होता है जिसमें फ़्लैग का एलान किया जाता है.
  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 के आधार पर बनाए गए बिल्ड टारगेट के लिए, किसी खास तरह के वैरिएंट की ज़रूरत है, तो आपको CC aconfig लाइब्रेरी टारगेट में उससे जुड़ी सेटिंग भी जोड़नी पड़ सकती है. उदाहरण के लिए, अगर पैरंट बिल्ड टारगेट में vendor_available को true पर सेट किया गया है, तो हो सकता है कि आप इस cc_aconfig_library टारगेट में भी vendor_available को true पर सेट करना चाहें.

    इस बिल्ड टारगेट को जोड़ने के बाद, आपका कोड इस लाइब्रेरी को ऐक्सेस कर सकता है. static_lib या shared_lib सिंटैक्स का इस्तेमाल करके, इस लाइब्रेरी को शामिल किया जा सकता है. ध्यान दें, अगर आपको इस लाइब्रेरी को static_lib के तौर पर जोड़ना है, तो server_configurable_flags पर shared_lib डिपेंडेंसी जोड़ें. तीसरे चरण में, कोड से जनरेट की गई फ़्लैग लाइब्रेरी को libexample_cpp_lib में शामिल करने का तरीका बताया गया है.

  3. कॉन्फ़िगरेशन फ़्लैग का इस्तेमाल करने वाला टारगेट बनाएं, जैसा कि नीचे दिया गया उदाहरण दिया गया है 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 फ़ील्ड के हिसाब से, बिल्ड बनाता है. एक cc_library एंट्री बनाकर स्थिर लाइब्रेरी नाम के साथ, अब आप अपने कोड में कॉन्फ़िगरेशन फ़्लैग का उपयोग कर सकते हैं.

Rust के लिए aconfig फ़्लैग का एलान करना

Rust के लिए कॉन्फ़िगरेशन फ़्लैग का एलान करने के लिए:

  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, नए कोड से जुड़ी गड़बड़ी का नंबर है. bug तय करने के लिए, आपको Google के समीक्षक के साथ मिलकर काम करना होगा. अगर आप: अपने 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. फ़ाइल सेव करें और एडिटर से बाहर निकलें.