बिल्ड फ़्लैग, बिल्ड-टाइम कॉन्स्टेंट होते हैं. इन्हें रनटाइम के दौरान बदला नहीं जा सकता. इन फ़्लैग का इस्तेमाल उन मामलों में किया जाता है जहां 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 के असाइन किए गए समीक्षक के साथ मिलकर काम करना होगा, ताकि अपने नेमस्पेस का पता लगाया जा सके. अगर आपको अपने एओएसपी मिरर की स्थिरता बनाए रखने के लिए, सुविधा लॉन्च करने के फ़्लैग का इस्तेमाल करना है, तो अपनी पसंद के मुताबिक नेमस्पेस का इस्तेमाल किया जा सकता है.valueफ़्लैग के लिए शुरुआती टाइप और वैल्यू है. टाइपbool_valueयाstring_valueहो सकता है. अगर टाइपstring_valueहै, तो वैल्यू को कोटेशन मार्क में रखना ज़रूरी है. अगर कोई वैल्यू तय नहीं की गई है, तो वैल्यू एक खाली स्ट्रिंग होती है. बूलियन वैल्यू कोtrueके तौर पर दिखाया जाता है. वहीं, फ़ॉल्स वैल्यू के लिए खाली स्ट्रिंग का इस्तेमाल किया जाता है.workflow,LAUNCHयाPREBUILTमें से कोई एक है.LAUNCHका इस्तेमाल, बूलियन फ़्लैग के लिए करें. ये फ़्लैग,falseसेtrueपर जाते हैं. ये फ़्लैग, सुविधा लॉन्च करने वाले फ़्लैग की तरह ही होते हैं.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: [],) होता है.
मेकफ़ाइल में बिल्ड फ़्लैग का इस्तेमाल करना
मेक फ़ाइल में, बिल्ड फ़्लैग एक ऐसा मेक वैरिएबल होता है जिसे सिर्फ़ पढ़ा जा सकता है. यहां दिए गए मेकफ़ाइल के सैंपल में, 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 में स्ट्रिंग वैल्यू को com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto में सेट किया गया है. यह trunk_staging डेवलपमेंट कॉन्फ़िगरेशन के लिए, फ़्लैग वैल्यू वाली फ़ाइल में मौजूद है.