Theo thiết kế, tệp Android.bp
rất đơn giản. Các tệp này không chứa câu lệnh có điều kiện hoặc câu lệnh kiểm soát luồng; tất cả độ phức tạp đều được xử lý bằng logic bản dựng được viết bằng Go. Khi có thể, cú pháp và ngữ nghĩa của tệp Android.bp
tương tự như tệp BUILD của Bazel.
Mô-đun
Mô-đun trong tệp Android.bp
bắt đầu bằng một loại mô-đun, theo sau là một tập hợp các thuộc tính ở định dạng name: "value",
:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Mỗi mô-đun phải có một thuộc tính name
và giá trị phải là duy nhất trên tất cả các tệp Android.bp
, ngoại trừ các giá trị thuộc tính name
trong không gian tên và mô-đun tạo sẵn có thể lặp lại.
Thuộc tính srcs
chỉ định các tệp nguồn dùng để tạo mô-đun dưới dạng danh sách chuỗi. Bạn có thể tham chiếu kết quả của các mô-đun khác tạo tệp nguồn, chẳng hạn như genrule
hoặc filegroup
, bằng cách sử dụng cú pháp tham chiếu mô-đun ":<module-name>"
.
Để biết danh sách các loại mô-đun hợp lệ và thuộc tính của các mô-đun đó, hãy xem Tài liệu tham khảo về mô-đun Soong.
Loại
Các biến và thuộc tính được xác định kiểu rõ ràng, trong đó các biến được xác định kiểu động dựa trên giá trị gán đầu tiên và các thuộc tính được đặt tĩnh theo loại mô-đun. Sau đây là các loại được hỗ trợ:
- Boolean (
true
hoặcfalse
) - Số nguyên (
int
) - Chuỗi (
"string"
) - Danh sách chuỗi (
["string1", "string2"]
) - Bản đồ (
{key1: "value1", key2: ["value2"]}
)
Tệp ánh xạ có thể chứa bất kỳ loại giá trị nào, bao gồm các bản đồ lồng nhau. Danh sách và bản đồ có thể có dấu phẩy ở cuối sau giá trị cuối cùng.
Glob
Các thuộc tính nhận danh sách tệp, chẳng hạn như srcs
, cũng có thể nhận mẫu glob. Mẫu ánh sáng loá có thể chứa ký tự đại diện UNIX thông thường *
, ví dụ: *.java
. Mẫu glob cũng có thể chứa một ký tự đại diện **
dưới dạng phần tử đường dẫn, khớp với 0 hoặc nhiều phần tử đường dẫn. Ví dụ: java/**/*.java
khớp với cả mẫu java/Main.java
và java/com/android/Main.java
.
Biến
Tệp Android.bp
có thể chứa các chỉ định biến cấp cao nhất:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Các biến được đặt trong phạm vi phần còn lại của tệp mà chúng được khai báo, cũng như mọi tệp Blueprint con. Các biến là không thể thay đổi, ngoại trừ một trường hợp: bạn có thể thêm các biến này bằng một chỉ định +=
, nhưng chỉ trước khi các biến này được tham chiếu.
Bình luận
Tệp Android.bp
có thể chứa các nhận xét /* */
nhiều dòng kiểu C và //
một dòng kiểu C++.
Toán tử
Bạn có thể nối chuỗi, danh sách chuỗi và tệp ánh xạ bằng toán tử +.
Bạn có thể tính tổng các số nguyên bằng cách sử dụng toán tử +
. Việc nối một bản đồ sẽ tạo ra tập hợp các khoá trong cả hai bản đồ, nối các giá trị của mọi khoá có trong cả hai bản đồ.
Điều kiện
Soong không hỗ trợ các điều kiện trong tệp Android.bp
. Thay vào đó, độ phức tạp trong các quy tắc bản dựng yêu cầu điều kiện được xử lý trong Go, nơi bạn có thể sử dụng các tính năng ngôn ngữ cấp cao và theo dõi các phần phụ thuộc ngầm ẩn do điều kiện đưa ra. Hầu hết các điều kiện đều được chuyển đổi thành thuộc tính bản đồ, trong đó một trong các giá trị trong bản đồ được chọn và thêm vào các thuộc tính cấp cao nhất.
Ví dụ: để hỗ trợ các tệp dành riêng cho cấu trúc:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Trình định dạng
Soong bao gồm một trình định dạng chuẩn cho các tệp Blueprint, tương tự như
gofmt. Để định dạng lại đệ quy tất cả tệp Android.bp
trong thư mục hiện tại, hãy chạy:
bpfmt -w .
Định dạng chuẩn hoá bao gồm các phần thụt lề bằng 4 dấu cách, các dòng mới sau mỗi phần tử của danh sách nhiều phần tử và dấu phẩy ở cuối trong các danh sách và bản đồ.