Java, C, C++, और Rust कोड में, aconfig फ़्लैग का इस्तेमाल किया जा सकता है. AOSP का बिल्ड सिस्टम, aconfig नाम का एक टूल लॉन्च करता है. इसका इस्तेमाल, भाषा के हिसाब से लाइब्रेरी जनरेट करने के लिए किया जाता है. इस लाइब्रेरी में ऐसे तरीके होते हैं जिनका इस्तेमाल करके, हर फ़्लैग की वैल्यू ऐक्सेस की जा सकती है. लाइब्रेरी जनरेट करने से पहले, आपको फ़्लैग का एलान करना होगा और उन्हें बिल्ड में जोड़ना होगा.
Java के लिए aconfig फ़्लैग का एलान करना
Java के लिए aconfig फ़्लैग का एलान करने के लिए:
उस डायरेक्ट्री में, जहां नया कोड मौजूद है, `.aconfig` एक्सटेंशन वाली कोई फ़ाइल बनाएं
.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, नए कोड के योगदान से जुड़ा बग नंबर होता है. आपको अपनाbugतय करने के लिए, Google के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा. अगर 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++ के लिए aconfig फ़्लैग का एलान करना
C और C++ के लिए aconfig फ़्लैग का एलान करने के लिए:
उस डायरेक्ट्री में, जहां नया कोड मौजूद है, `.aconfig` एक्सटेंशन वाली कोई फ़ाइल बनाएं
.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, नए कोड के योगदान से जुड़ा बग नंबर होता है. आपको अपनाbugतय करने के लिए, Google के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा. अगर 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 को शुरू करता है. इससे, बिल्ड प्रोसेस में लगने वाले समय के दौरान जनरेट किए गए कोड वाली लाइब्रेरी बनती है.CC aconfig लाइब्रेरी, CC लाइब्रेरी टारगेट जैसी होती है. हालांकि, इसमें
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में शामिल करने का तरीका बताया गया है.ऐसा टारगेट बनाएं जो 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_libraryकेnameफ़ील्ड के हिसाब से, बिल्ड से बनाया जाता है. स्टैटिक लाइब्रेरी के नाम के साथcc_libraryएंट्री बनाकर, अब अपने कोड में aconfig फ़्लैग का इस्तेमाल किया जा सकता है.
Rust के लिए aconfig फ़्लैग का एलान करना
Rust के लिए aconfig फ़्लैग का एलान करने के लिए:
उस डायरेक्ट्री में, जहां नया कोड मौजूद है, `.aconfig` एक्सटेंशन वाली कोई फ़ाइल बनाएं
.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, नए कोड के योगदान से जुड़ा बग नंबर होता है. आपको अपनाbugतय करने के लिए, Google के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा. अगर 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में, जनरेट किए गए फ़्लैग लाइब्रेरी का कोड शामिल किया जा सकता है.फ़ाइल सेव करें और एडिटर से बाहर निकलें.