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