Java, C, C++, और Rust कोड में aconfig फ़्लैग का इस्तेमाल किया जा सकता है. AOSP का बिल्ड सिस्टम, aconfig नाम का एक टूल लॉन्च करता है. इसका इस्तेमाल, भाषा के हिसाब से तरीकों की लाइब्रेरी जनरेट करने के लिए किया जाता है. इस लाइब्रेरी का इस्तेमाल करके, हर फ़्लैग की वैल्यू ऐक्सेस की जा सकती है. लाइब्रेरी जनरेट करने से पहले, आपको फ़्लैग तय करने होंगे और उन्हें बिल्ड में जोड़ना होगा.
Java के लिए aconfig फ़्लैग का एलान करना
Java के लिए 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 के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा, ताकि आपका नेमस्पेस तय किया जा सके. अगर आपको अपने एओएसपी मिरर की स्थिरता बनाए रखने के लिए, सुविधा लॉन्च करने से जुड़े फ़्लैग का इस्तेमाल करना है, तो नेमस्पेस का इस्तेमाल अपनी पसंद के मुताबिक किया जा सकता है.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++ के लिए, aconfig फ़्लैग का एलान करना
C और C++ के लिए, 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 के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा, ताकि आपका नेमस्पेस तय किया जा सके. अगर आपको अपने एओएसपी मिरर की स्थिरता बनाए रखने के लिए, सुविधा लॉन्च करने से जुड़े फ़्लैग का इस्तेमाल करना है, तो नेमस्पेस का इस्तेमाल अपनी पसंद के मुताबिक किया जा सकता है.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 को शुरू करता है. इससे बिल्ड के समय जनरेट किए गए कोड वाली लाइब्रेरी बनती है.CC aconfig लाइब्रेरी, CC लाइब्रेरी टारगेट की तरह ही होती है. हालांकि, इसमें
vendor_available,product_available,host_supported, औरvndkजैसे विकल्प होते हैं. अगर इसcc_aconfig_libraryपर निर्भर बिल्ड टारगेट के लिए, किसी खास तरह के वैरिएंट की ज़रूरत है, तो आपको CC aconfig library टारगेट में भी उससे जुड़ी सेटिंग जोड़नी पड़ सकती है. उदाहरण के लिए, अगर पैरंट बिल्ड टारगेट में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_librarynameफ़ील्ड के हिसाब से बनाया है. स्टैटिक लाइब्रेरी के नाम के साथcc_libraryएंट्री बनाकर, अब अपने कोड में aconfig फ़्लैग का इस्तेमाल किया जा सकता है.
Rust के लिए aconfig फ़्लैग का एलान करना
Rust के लिए 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 के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा, ताकि आपका नेमस्पेस तय किया जा सके. अगर आपको अपने एओएसपी मिरर की स्थिरता बनाए रखने के लिए, सुविधा लॉन्च करने से जुड़े फ़्लैग का इस्तेमाल करना है, तो नेमस्पेस का इस्तेमाल अपनी पसंद के मुताबिक किया जा सकता है.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में, जनरेट किए गए कोड की फ़्लैग लाइब्रेरी को शामिल किया जा सकता है.फ़ाइल को सेव करें और एडिटर से बाहर निकलें.