बिल्ड फ़्लैग का एलान करना और उसका इस्तेमाल करना

बिल्ड फ़्लैग, बिल्ड-टाइम कॉन्स्टेंट होते हैं. इन्हें रनटाइम के दौरान बदला नहीं जा सकता. इन फ़्लैग का इस्तेमाल उन मामलों में किया जाता है जहां aconfig फ़्लैग का इस्तेमाल नहीं किया जा सकता. जैसे,

  • आपके पास पहले से कंपाइल किया गया या पहले से बनाया गया कोड है, जिसे आपको बिल्ड में शामिल करना है.
  • आपको बिल्ड सिस्टम में बदलाव करने हैं.
  • आपको कोड के साइज़ को मैनेज करने के लिए, डिपेंडेंसी के आस-पास फ़्लैग लगाने हैं.
  • आपको किसी सुविधा को लॉन्च करना है, लेकिन सिस्टम के ज़रिए aconfig फ़्लैग उपलब्ध कराए जाने से पहले, आपको फ़्लैग की वैल्यू की जांच करनी है.

बिल्ड फ़्लैग का एलान करना

बिल्ड फ़्लैग, textproto फ़ाइलों में तय किए जाते हैं. बिल्ड फ़्लैग का एलान करने के लिए:

  1. WORKING_DIRECTORY/build/release/flag_declarations/ पर नेविगेट करें
  2. RELEASE_MY_FLAG_NAME.textproto नाम की फ़ाइल बनाओ.
  3. फ़ाइल में बदलाव करें और इस तरह की एंट्री जोड़ें:

    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 की स्ट्रिंग वैल्यू है.