Định dạng tệp Android.bp

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ặc false)
  • 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.javajava/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 đồ.