ไฟล์ Android.bp
ออกแบบมาให้ใช้งานได้ง่าย โดยจะไม่มีเงื่อนไขหรือคำสั่งควบคุมการไหลเวียน และความซับซ้อนทั้งหมดจะจัดการโดยตรรกะการสร้างที่เขียนด้วย Go ไวยากรณ์และความหมายของไฟล์ Android.bp
จะคล้ายกับไฟล์ BUILD ของ Bazel มากที่สุด
โมดูล
โมดูลในไฟล์ 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
จะใช้รูปแบบทั่วไปได้เช่นกัน รูปแบบ Glob อาจมีไวลด์การ์ด *
ของ UNIX ปกติ เช่น
*.java
รูปแบบ Glob อาจมีไวลด์การ์ด **
รายการเดียวเป็นองค์ประกอบเส้นทาง ซึ่งจะจับคู่กับองค์ประกอบเส้นทางตั้งแต่ 0 รายการขึ้นไป เช่น 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",
}
ตัวแปรจะมีขอบเขตอยู่ที่ส่วนที่เหลือของไฟล์ที่ประกาศ รวมถึงไฟล์ BluePrint ย่อย ตัวแปรจะเปลี่ยนแปลงไม่ได้ ยกเว้น 1 กรณีคือสามารถเพิ่มการกําหนดค่า +=
ต่อท้ายได้ แต่จะเพิ่มได้ก่อนมีการอ้างอิงเท่านั้น
ความคิดเห็น
ไฟล์ Android.bp
อาจมีความคิดเห็นแบบหลายบรรทัด /* */
สไตล์ C และแบบบรรทัดเดียว //
สไตล์ C++
ผู้ให้บริการ
คุณสามารถต่อสตริง รายการสตริง และแผนที่ได้โดยใช้โอเปอเรเตอร์ +
คุณสามารถหาผลรวมของจำนวนเต็มได้โดยใช้โอเปอเรเตอร์ +
การต่อท้ายแผนที่จะสร้างการรวมคีย์ในทั้ง 2 แผนที่ โดยต่อท้ายค่าของคีย์ที่มีอยู่ในทั้ง 2 แผนที่
เงื่อนไข
Soong ไม่รองรับเงื่อนไขในไฟล์ Android.bp
แต่จะใช้ความซับซ้อนของกฎการสร้างที่ต้องใช้เงื่อนไขใน Go แทน ซึ่งจะใช้ฟีเจอร์ภาษาระดับสูงได้ และสามารถติดตามการพึ่งพาโดยนัยที่เกิดจากเงื่อนไข ระบบจะแปลงเงื่อนไขส่วนใหญ่เป็นพร็อพเพอร์ตี้แผนที่ ซึ่งจะเลือกค่าใดค่าหนึ่งในแผนที่และต่อท้ายพร็อพเพอร์ตี้ระดับบนสุด
ตัวอย่างเช่น หากต้องการรองรับไฟล์เฉพาะสถาปัตยกรรม ให้ทำดังนี้
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
โปรแกรมจัดรูปแบบ
Soong มีเครื่องมือจัดรูปแบบที่ถูกต้องสำหรับไฟล์ Blueprint ซึ่งคล้ายกับ gofmt หากต้องการจัดรูปแบบไฟล์ Android.bp
ทั้งหมดในไดเรกทอรีปัจจุบันใหม่แบบซ้ำๆ ให้เรียกใช้คำสั่งต่อไปนี้
bpfmt -w .
รูปแบบ Canonical จะมีการเยื้อง 4 เว้นวรรค บรรทัดใหม่หลังองค์ประกอบทุกรายการของลิสต์หลายองค์ประกอบ และคั่นด้วยคอมมาต่อท้ายในลิสต์และแผนที่