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