बिल्ड फ़्लैग, बिल्ड-टाइम कॉन्स्टेंट होते हैं. इन्हें रनटाइम के दौरान बदला नहीं जा सकता. इन फ़्लैग का इस्तेमाल उन मामलों में किया जाता है जहां 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
में है. साथ ही, trunk_staging
डेवलपमेंट कॉन्फ़िगरेशन के लिए फ़्लैग वैल्यू फ़ाइल में com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
की स्ट्रिंग वैल्यू है.