รูปแบบไฟล์ Android.bp

ตามการออกแบบแล้ว ไฟล์ 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 ประกอบด้วยการเยื้องสี่ช่องว่าง การขึ้นบรรทัดใหม่หลังทุกองค์ประกอบของรายการหลายองค์ประกอบ และเครื่องหมายจุลภาคต่อท้ายในรายการและแผนที่