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