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

เช่น เพื่อให้รองรับไฟล์เฉพาะสถาปัตยกรรม ให้ทำดังนี้

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

โปรแกรมจัดรูปแบบ

Soong มีเครื่องมือจัดรูปแบบที่เป็นมาตรฐานสำหรับไฟล์ Blueprint ซึ่งคล้ายกับ gofmt หากต้องการจัดรูปแบบไฟล์ Android.bp ทั้งหมดในไดเรกทอรีปัจจุบันใหม่แบบซ้ำๆ ให้เรียกใช้คำสั่งต่อไปนี้

bpfmt -w .

รูปแบบตามรูปแบบบัญญัติจะรวมถึงการเยื้อง 4 วรรค บรรทัดใหม่หลังทุกองค์ประกอบของรายการหลายองค์ประกอบ และเครื่องหมายจุลภาคต่อท้ายในรายการและแผนที่