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