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

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

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

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

बिल्ड फ़्लैग का एलान, 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 है. सुविधा लॉन्च फ़्लैग की तरह ही, false से true तक बढ़ने वाले बूलियन फ़्लैग के लिए LAUNCH का इस्तेमाल करें. उन फ़्लैग के लिए PREBUILT का इस्तेमाल करें जो आम तौर पर पहले से बने हुए फ़्लैग का वर्शन सेट करते हैं.
    • containers किस तरह का कोड लिखा जा रहा है, जैसे कि वेंडर कोड के लिए "वेंडर" या प्रॉडक्ट कोड के लिए "प्रॉडक्ट". अगर आपको यह नहीं पता कि किस वैल्यू का इस्तेमाल करना है, तो पिछले सैंपल में दिखाए गए सभी चार कंटेनर टाइप का इस्तेमाल करें.

सूंग फ़ाइल में बिल्ड फ़्लैग का इस्तेमाल करना

जिस बिल्ड फ़ाइल और मॉड्यूल में आपको फ़्लैग की वैल्यू के बारे में क्वेरी करनी है वहां फ़्लैग की वैल्यू के आधार पर ब्रैंच करने के लिए, कंडीशनल का इस्तेमाल करें. उदाहरण के लिए, यहां दिए गए स्निपेट में, 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 में बिल्ड फ़्लैग का इस्तेमाल करना

मेक फ़ाइल में, बिल्ड फ़्लैग एक रीड-ओनली मेक वैरिएबल होता है. यह 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

इस फ़्लैग वाले एलान में, RELEASE_PACKAGE_NFC_STACK.textproto में workflow फ़ील्ड को PREBUILT पर सेट किया गया है. साथ ही, trunk_staging डेवलपमेंट कॉन्फ़िगरेशन के लिए फ़्लैग वैल्यू वाली फ़ाइलcom.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto की स्ट्रिंग वैल्यू दी गई है.