ไฟล์ Android.bp
ออกแบบมาให้ใช้งานง่าย ไม่มีเงื่อนไขหรือ
ควบคุมข้อความโฟลว์ ความซับซ้อนทั้งหมดได้รับการจัดการโดยตรรกะของบิลด์ที่เขียนด้วย
ไป หากเป็นไปได้ ไวยากรณ์และความหมายของไฟล์ Android.bp
จะคล้ายกับ
ไฟล์ Bazel 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
สามารถใช้ glob ได้
รูปแบบ รูปแบบ Glob อาจมีไวลด์การ์ด UNIX ปกติได้ เช่น *
*.java
รูปแบบ Glob อาจมีไวลด์การ์ด **
เดี่ยวเป็นเส้นทางได้ด้วย
ที่ตรงกับเอลิเมนต์เส้นทางศูนย์รายการขึ้นไป ตัวอย่างเช่น
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",
}
ตัวแปรจะกําหนดขอบเขตอยู่ที่ส่วนที่เหลือของไฟล์ที่มีการประกาศ รวมทั้ง
เป็นไฟล์พิมพ์เขียวย่อยทุกไฟล์ ตัวแปรจะเปลี่ยนแปลงไม่ได้โดยมีข้อยกเว้น 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 มีตัวจัดรูปแบบ Canonical สำหรับไฟล์ Blueprint ซึ่งคล้ายกับ
gofmt หากต้องการจัดรูปแบบทั้งหมดใหม่ที่เกิดซ้ำ
Android.bp
ไฟล์ในไดเรกทอรีปัจจุบัน ให้เรียกใช้:
bpfmt -w .
รูปแบบ Canonical มีการเยื้องเว้นวรรค 4 บรรทัด บรรทัดใหม่หลังองค์ประกอบทั้งหมด ของรายการหลายองค์ประกอบ และจุลภาคต่อท้ายในรายการและแผนที่