Android.bp फ़ाइल फ़ॉर्मैट

Android.bp फ़ाइलें, डिज़ाइन के हिसाब से आसान होती हैं. इनमें कंडिशनल (शर्त के साथ) या कंट्रोल फ़्लो स्टेटमेंट; सभी कॉम्प्लेक्सिटी को, बिल्ड लॉजिक की मदद से हैंडल किया जाता है जाएं. जब मुमकिन हो, तब Android.bp फ़ाइलों के सिंटैक्स और सिमेंटिक्स इससे मिलते-जुलते होते हैं Baze BUILD फ़ाइलें.

मॉड्यूल

Android.bp फ़ाइल में कोई मॉड्यूल इससे शुरू होता है मॉड्यूल टाइप इसके बाद name: "value", फ़ॉर्मैट में प्रॉपर्टी का एक सेट होता है:

cc_binary {
    name: "gzip",
    srcs: ["src/test/minigzip.c"],
    shared_libs: ["libz"],
    stl: "none",
}

हर मॉड्यूल में name प्रॉपर्टी होनी चाहिए. साथ ही, सभी Android.bp फ़ाइलों में इस प्रॉपर्टी की वैल्यू यूनीक होनी चाहिए. हालांकि, नेमस्पेस और पहले से बने मॉड्यूल में मौजूद name प्रॉपर्टी की वैल्यू दोहराई जा सकती हैं.

srcs प्रॉपर्टी, स्ट्रिंग की सूची के तौर पर, मॉड्यूल बनाने के लिए इस्तेमाल की गई सोर्स फ़ाइलों के बारे में बताती है. आप उन अन्य मॉड्यूल के आउटपुट का संदर्भ दे सकते हैं, जो मॉड्यूल रेफ़रंस का इस्तेमाल करके, genrule या filegroup जैसी सोर्स फ़ाइलें सिंटैक्स ":<module-name>".

मान्य मॉड्यूल टाइप और उनकी प्रॉपर्टी की सूची के लिए, Soong मॉड्यूल का रेफ़रंस देखें.

प्रकार

वैरिएबल और प्रॉपर्टी अच्छी तरह से टाइप की जाती हैं. साथ ही, इनके आधार पर वैरिएबल डाइनैमिक रूप से तय किए जाते हैं वाला पहला असाइनमेंट और प्रॉपर्टी, मॉड्यूल टाइप के हिसाब से स्टैटिक रूप से सेट होती हैं. कॉन्टेंट बनाने समर्थित प्रकार हैं:

  • बूलियन (true या false)
  • पूर्णांक (int)
  • स्ट्रिंग ("string")
  • स्ट्रिंग की सूची (["string1", "string2"])
  • मैप ({key1: "value1", key2: ["value2"]})

मैप में किसी भी तरह की वैल्यू हो सकती हैं. इनमें नेस्ट किए गए मैप भी शामिल हैं. सूचियों और मैप में, आखिरी वैल्यू के बाद कॉमा हो सकते हैं.

ग्लोब

ऐसी प्रॉपर्टी जो फ़ाइलों की सूची लेती हैं, जैसे कि srcs, ग्लोब में भी ले सकती हैं पैटर्न. ग्लोब पैटर्न में सामान्य यूनिक्स वाइल्डकार्ड * शामिल हो सकता है. उदाहरण के लिए, *.java. ग्लोब पैटर्न में, पाथ एलिमेंट के तौर पर एक ** वाइल्डकार्ड भी हो सकता है. यह शून्य या उससे ज़्यादा पाथ एलिमेंट से मैच करता है. उदाहरण के लिए, java/**/*.java java/Main.java और, दोनों से मेल खाता है java/com/android/Main.java पैटर्न.

वैरिएबल

Android.bp फ़ाइल में टॉप-लेवल वैरिएबल असाइनमेंट हो सकते हैं:

gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
    name: "gzip",
    srcs: gzip_srcs,
    shared_libs: ["libz"],
    stl: "none",
}

वैरिएबल का दायरा, फ़ाइल के उस हिस्से के दायरे में आता है जिसमें उनका एलान किया गया है ब्लूप्रिंट फ़ाइलों को भी शामिल किया जा सकता है. वैरिएबल में बदलाव नहीं किया जा सकता. हालांकि, एक अपवाद है: इनमें += असाइनमेंट जोड़ा जा सकता है. हालांकि, ऐसा सिर्फ़ तब किया जा सकता है, जब इनका रेफ़रंस न दिया गया हो.

टिप्पणियां

Android.bp फ़ाइलों में C-स्टाइल मल्टीलाइन /* */ और C++ स्टाइल हो सकती है एक लाइन वाली // टिप्पणियां.

ऑपरेटर

+ ऑपरेटर का इस्तेमाल करके, स्ट्रिंग, स्ट्रिंग की सूचियां, और मैप जोड़े जा सकते हैं. + ऑपरेटर का इस्तेमाल करके पूर्णांकों को जोड़ा जा सकता है. किसी मैप को जोड़ने से दोनों मैप में कुंजियों का योग, दोनों मैप.

कंडीशनल

Soong, Android.bp फ़ाइलों में शर्तों का इस्तेमाल नहीं करता. इसके बजाय, बिल्ड नियमों में मौजूद जटिलताएं, Go में मैनेज की जाती हैं. इसके लिए, भाषा की बेहतर सुविधाओं का इस्तेमाल किया जा सकता है. साथ ही, कंडिशनल के ज़रिए जोड़ी गई डिपेंडेंसी को ट्रैक किया जा सकता है. ज़्यादातर शर्तों को मैप प्रॉपर्टी में बदल दिया जाता है. इसमें मैप की किसी एक वैल्यू को चुना जाता है और उसे टॉप-लेवल प्रॉपर्टी में जोड़ दिया जाता है.

उदाहरण के लिए, आर्किटेक्चर से जुड़ी खास फ़ाइलों पर काम करने के लिए:

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

फ़ॉर्मैटर

Soong में ब्लूप्रिंट फ़ाइलों के लिए, gofmt की तरह ही कैननिकल फ़ॉर्मैटर शामिल होता है. सभी फ़ॉर्मैट को बार-बार फ़ॉर्मैट करने के लिए मौजूदा डायरेक्ट्री में Android.bp फ़ाइलें, चलाएं:

bpfmt -w .

कैननिकल फ़ॉर्मैट में चार स्पेस वाले इंडेंट होते हैं, यानी हर एलिमेंट के बाद नई लाइनें दिखती हैं कई एलिमेंट वाली सूची है, और सूचियों और मैप में उसके बाद में कॉमा लगा है.