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_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 के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा, ताकि आपका नेमस्पेस तय किया जा सके. अगर आपको अपने एओएसपी मिरर की स्थिरता बनाए रखने के लिए, सुविधा लॉन्च करने से जुड़े फ़्लैग का इस्तेमाल करना है, तो नेमस्पेस का इस्तेमाल अपनी पसंद के मुताबिक किया जा सकता है.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
में, जनरेट किए गए कोड की फ़्लैग लाइब्रेरी को शामिल किया जा सकता है.फ़ाइल को सेव करें और एडिटर से बाहर निकलें.