बिल्ड फ़्लैग, बिल्ड के समय के लिए तय किए जाते हैं. इन्हें रनटाइम के दौरान बदला नहीं जा सकता. इन फ़्लैग का इस्तेमाल उन स्थितियों में किया जाता है जहां aconfig फ़्लैग का इस्तेमाल नहीं किया जा सकता. जैसे,
- आपके पास पहले से कंपाइल किया गया या पहले से बना कोड है, जिसे आपको किसी बिल्ड में शामिल करना है.
- आपको बिल्ड सिस्टम में बदलाव करने हैं.
- आपको कोड के साइज़ को मैनेज करने के लिए, डिपेंडेंसी के आस-पास फ़्लैग लगाने हैं.
- आपको किसी सुविधा के लॉन्च को मैनेज करना है, लेकिन सिस्टम से aconfig फ़्लैग उपलब्ध कराने से पहले, आपको फ़्लैग की वैल्यू देखनी होगी.
बिल्ड फ़्लैग का एलान करना
बिल्ड फ़्लैग, textproto फ़ाइलों में एलान किए जाते हैं. बिल्ड फ़्लैग का एलान करने के लिए:
WORKING_DIRECTORY/build/release/flag_declarations/
पर नेविगेट करेंRELEASE_MY_FLAG_NAME.textproto
नाम की फ़ाइल बनाएं.फ़ाइल में बदलाव करें और इस तरह की एंट्री जोड़ें:
name: "RELEASE_MY_FLAG_NAME" namespace: "android_UNKNOWN" description: "Control if we should read from new storage." workflow: LAUNCH containers: "product" containers: "system" containers: "system_ext" containers: "vendor"
कहाँ:
name
में, फ़्लैग का नाम होता है. इसके पहलेRELEASE_
होता है. इसमें सिर्फ़ बड़े अक्षर और अंडरस्कोर का इस्तेमाल किया जा सकता है.namespace
में योगदान के लिए नेमस्पेस होता है. नेमस्पेस तय करने के लिए, आपको Google के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा. अगर अपने AOSP मिरर को स्थिर रखने के लिए, सुविधा लॉन्च करने के फ़्लैग का इस्तेमाल किया जा रहा है, तो नेमस्पेस का इस्तेमाल अपनी पसंद के मुताबिक किया जा सकता है.value
, फ़्लैग के लिए शुरुआती टाइप और वैल्यू है. टाइप,bool_value
याstring_value
हो सकता है. अगर टाइपstring_value
है, तो वैल्यू को कोट में रखना ज़रूरी है. अगर कोई वैल्यू नहीं दी गई है, तो वैल्यू खाली स्ट्रिंग होगी. बूलियन वैल्यू कोtrue
या 'गलत' के लिए खाली स्ट्रिंग के तौर पर दिखाया जाता है.workflow
,LAUNCH
याPREBUILT
है. सुविधा लॉन्च फ़्लैग की तरह ही,false
सेtrue
पर जाने वाले बूलियन फ़्लैग के लिएLAUNCH
का इस्तेमाल करें. आम तौर पर, पहले से बने वर्शन का कोई वर्शन सेट करने वाले फ़्लैग के लिएPREBUILT
का इस्तेमाल करें.containers
आपने किस तरह का कोड लिखा है. जैसे, वेंडर कोड के लिए "वेंडर" या प्रॉडक्ट कोड के लिए "प्रॉडक्ट". अगर आपको यह नहीं पता कि किस वैल्यू का इस्तेमाल करना है, तो पिछले सैंपल में दिखाए गए सभी चार कंटेनर टाइप का इस्तेमाल करें.
Soong फ़ाइल में बिल्ड फ़्लैग का इस्तेमाल करना
जिस बिल्ड फ़ाइल और मॉड्यूल में आपको फ़्लैग की वैल्यू के बारे में क्वेरी करनी है वहां फ़्लैग की वैल्यू के आधार पर ब्रैंच करने के लिए, कंडीशनल का इस्तेमाल करें. उदाहरण के लिए, यहां दिए गए स्निपेट में, RELEASE__READ_FROM_NEW_STORAGE
फ़्लैग की वैल्यू के बारे में क्वेरी की गई है:
cc_defaults {
name: "aconfig_lib_cc_shared_link.defaults",
shared_libs: select(release_flag("RELEASE_READ_FROM_NEW_STORAGE"), {
true: ["libaconfig_storage_read_api_cc],
default: [],
}),
}
अगर इस फ़्लैग की वैल्यू true
है, तो libaconfig_storage_read_api_cc
मॉड्यूल को cc_defaults
मॉड्यूल में डाइनैमिक तौर पर लिंक किया जाता है.
अगर इस फ़्लैग की वैल्यू false
है, तो कुछ नहीं होता (default: [],
).
मेकफ़ाइल में बिल्ड फ़्लैग का इस्तेमाल करना
मेक फ़ाइल में, बिल्ड फ़्लैग एक रीड-ओनली मेक वैरिएबल होता है. यहां दिया गया makefile सैंपल, RELEASED_PACKAGE_NFC_STCK
नाम के बिल्ड फ़्लैग को ऐक्सेस करता है:
# NFC and Secure Element packages
PRODUCT_PACKAGES += \
$(RELEASE_PACKAGE_NFC_STACK) \
Tag \
SecureElement \
android.hardware.nfc-service.st \
android.hardware.secure_element@1.0-service.st \
NfcOverlayCoral
इस फ़्लैग के एलान में, workflow
फ़ील्ड को PREBUILT
पर सेट किया गया है, जो RELEASE_PACKAGE_NFC_STACK.textproto
में है. साथ ही, trunk_staging
डेवलपमेंट कॉन्फ़िगरेशन के लिए, फ़्लैग वैल्यू फ़ाइल में com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
की स्ट्रिंग वैल्यू है.