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

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