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