Theo thiết kế, tệp Android.bp
rất đơn giản. Chúng không chứa các điều kiện hoặc
câu lệnh luồng điều khiển; mọi sự phức tạp đều được xử lý bằng logic bản dựng được viết
Tiếp tục. Khi có thể, cú pháp và ngữ nghĩa của tệp Android.bp
sẽ tương tự như
Tệp Bazel BUILD.
Mô-đun
Một mô-đun trong tệp Android.bp
bắt đầu bằng
loại mô-đun
tiếp theo 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ả tệp Android.bp
, ngoại trừ các giá trị của 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 để xây dựng mô-đun, dưới dạng một
danh sách chuỗi. Bạn có thể tham khảo kết quả của các mô-đun khác tạo
tệp nguồn, như genrule
hoặc filegroup
, bằng cách sử dụng 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 loại 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 định kiểu rõ ràng, với các biến tự động dựa trên bài tập đầu tiên và các thuộc tính được đặt tĩnh theo loại mô-đun. Chiến lược phát hành đĩa đơn các loại được hỗ trợ là:
- 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 theo sau giá trị cuối cùng.
Mưa nhỏ
Những thuộc tính lấy danh sách các tệp, chẳng hạn như srcs
, cũng có thể ở dạng hình cầu
mẫu. Ví dụ: Các mẫu ánh sáng loá có thể chứa ký tự đại diện UNIX thông thường *
*.java
. Các mẫu ánh sáng loá cũng có thể chứa một ký tự đại diện **
duy nhất dưới dạng đường dẫn
, khớp với 0 hoặc nhiều phần tử đường dẫn khác. Ví dụ:
java/**/*.java
khớp với cả java/Main.java
và
java/com/android/Main.java
mẫu.
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ũng nằm trong phạm vi phần còn lại của tệp mà chúng được khai báo
như bất kỳ tệp Blueprint con nào. Các biến không thể thay đổi được với một ngoại lệ: chúng
có thể được thêm vào bằng một lệnh chỉ định +=
, nhưng chỉ trước khi chúng được
tham chiếu.
Bình luận
Tệp Android.bp
có thể chứa kiểu C-style multiline /* */
và C++
nhận xét //
một dòng.
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ổng hợp số nguyên bằng toán tử +
. Việc thêm bản đồ sẽ tạo ra
hợp nhất các khoá trong cả hai bản đồ, thêm các giá trị của bất kỳ khoá nào 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 của các quy tắc xây dựng cần xử lý các điều kiện trong Go,
nơi có thể sử dụng các tính năng ngôn ngữ cấp cao và các phần phụ thuộc ngầm ẩn
giới thiệu bởi các điều kiện
có thể được theo dõi. Hầu hết các điều kiện được chuyển đổi thành
thuộc tính ánh xạ, nơi một trong các giá trị trong bản đồ được chọn và nối vào
vào các tài sản cấp cao nhất.
Ví dụ: để hỗ trợ các tệp dành riêng cho từng 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 tất cả
Android.bp
tệp trong thư mục hiện tại, hãy chạy:
bpfmt -w .
Định dạng chuẩn bao gồm thụt lề 4 khoảng trắng, 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 theo sau trong danh sách và bản đồ.