Android.bp
फ़ाइलें, डिज़ाइन के हिसाब से आसान होती हैं. इनमें कंडिशनल (शर्त के साथ) या
कंट्रोल फ़्लो स्टेटमेंट; सभी जटिलता को बिल्ड लॉजिक की मदद से मैनेज किया जाता है,
जाएं. जब मुमकिन हो, तब Android.bp
फ़ाइलों के सिंटैक्स और सिमेंटिक्स इससे मिलते-जुलते होते हैं
Bazu BUILD फ़ाइलें.
मॉड्यूल
Android.bp
फ़ाइल में कोई मॉड्यूल इससे शुरू होता है
मॉड्यूल टाइप
इसके बाद name: "value",
फ़ॉर्मैट में प्रॉपर्टी का एक सेट होता है:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
हर मॉड्यूल में एक name
प्रॉपर्टी होनी चाहिए और हर मॉड्यूल का मान यूनीक होना चाहिए
इसमें name
प्रॉपर्टी मानों को छोड़कर, सभी Android.bp
फ़ाइलें
नेमस्पेस और पहले से बने मॉड्यूल, जिन्हें दोहराया जा सकता है.
srcs
प्रॉपर्टी, मॉड्यूल बनाने के लिए इस्तेमाल की जाने वाली सोर्स फ़ाइलों के बारे में बताती है.
स्ट्रिंग की सूची. आप उन अन्य मॉड्यूल के आउटपुट का संदर्भ दे सकते हैं, जो
मॉड्यूल रेफ़रंस का इस्तेमाल करके, genrule
या filegroup
जैसी सोर्स फ़ाइलें
सिंटैक्स ":<module-name>"
.
मान्य मॉड्यूल टाइप और उनकी प्रॉपर्टी की सूची देखने के लिए, Soong मॉड्यूल के बारे में जानकारी.
प्रकार
वैरिएबल और प्रॉपर्टी सशक्त रूप से टाइप की जाती हैं. साथ ही, वैरिएबल डाइनैमिक रूप से वाला पहला असाइनमेंट और प्रॉपर्टी, मॉड्यूल टाइप के हिसाब से स्टैटिक रूप से सेट होती हैं. कॉन्टेंट बनाने समर्थित प्रकार हैं:
- बूलियन (
true
याfalse
) - पूर्णांक (
int
) - स्ट्रिंग (
"string"
) - स्ट्रिंग की सूची (
["string1", "string2"]
) - मैप (
{key1: "value1", key2: ["value2"]}
)
Maps में, नेस्ट किए गए मैप के साथ-साथ किसी भी तरह की वैल्यू हो सकती है. सूचियां और मैप हो सकते हैं जिनमें आख़िरी वैल्यू के बाद कॉमा हो.
ग्लोब
ऐसी प्रॉपर्टी जो फ़ाइलों की सूची लेती हैं, जैसे कि srcs
, ग्लोब में भी ले सकती हैं
पैटर्न. ग्लोब पैटर्न में सामान्य UNIX वाइल्डकार्ड *
हो सकता है, उदाहरण के लिए
*.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++ स्टाइल हो सकती है
एक लाइन वाली //
टिप्पणियां.
ऑपरेटर
स्ट्रिंग, स्ट्रिंग की सूचियों, और मैप को + ऑपरेटर का इस्तेमाल करके जोड़ा जा सकता है.
+
ऑपरेटर का इस्तेमाल करके पूर्णांकों को जोड़ा जा सकता है. किसी मैप को जोड़ने से
दोनों मैप में कुंजियों का योग,
दोनों मैप.
कंडीशनल
सूंग Android.bp
फ़ाइलों में शर्तों के साथ काम नहीं करता है. इसके बजाय,
बिल्ड नियमों में जटिलता की वजह से, Go में कंडिशनल को हैंडल करने की ज़रूरत होती है,
जिसमें हाई-लेवल भाषा की सुविधाओं का इस्तेमाल किया जा सकता हो. साथ ही, यह इंप्लिसिट डिपेंडेंसी होती है
शर्तों के ज़रिए पेश किए गए शब्दों को ट्रैक किया जा सकता है. ज़्यादातर शर्तों को
मैप प्रॉपर्टी, जहां मैप में से एक वैल्यू को चुना जाता है और जोड़ दिया जाता है
टॉप-लेवल प्रॉपर्टी में बदल सकते हैं.
उदाहरण के लिए, आर्किटेक्चर से जुड़ी खास फ़ाइलों पर काम करने के लिए:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
फ़ॉर्मैटर
सूंग में ब्लूप्रिंट फ़ाइलों के लिए एक कैननिकल फ़ॉर्मैटर शामिल है, जो
gofmt हैं. सभी फ़ॉर्मैट को बार-बार फ़ॉर्मैट करने के लिए
मौजूदा डायरेक्ट्री में Android.bp
फ़ाइलें, चलाएं:
bpfmt -w .
कैननिकल फ़ॉर्मैट में चार स्पेस वाले इंडेंट होते हैं, यानी हर एलिमेंट के बाद नई लाइनें दिखती हैं कई एलिमेंट वाली सूची है, और सूचियों और मैप में उसके बाद में कॉमा लगा है.