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

Theo thiết kế, các tệp Android.bp rất đơn giản. Chúng không chứa các câu lệnh điều kiện hoặc luồng điều khiển; tất cả sự phức tạp đều được xử lý bằng logic xây 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 Bazel BUILD .

Mô-đun

Mô-đun trong tệp Android.bp bắt đầu bằng loại mô-đun, theo sau là tập hợp thuộc tính có name: "value", định dạng:

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à các 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 được sử dụng để xây dựng mô-đun dưới dạng danh sách các chuỗi. Bạn có thể tham chiếu đầu ra của các mô-đun khác tạo ra tệp nguồ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 chúng, hãy xem Tham khảo mô-đun Soong .

Các loại

Các biến và thuộc tính được định kiểu mạnh, với các biến động dựa trên phép gán đầu tiên và các thuộc tính được đặt tĩnh theo loại mô-đun. Các loại được hỗ trợ là:

  • Boolean ( true hoặc false )
  • Số nguyên ( int )
  • Chuỗi ( "string" )
  • Danh sách các chuỗi ( ["string1", "string2"] )
  • Bản đồ ( {key1: "value1", key2: ["value2"]} )

Bản đồ có thể chứa bất kỳ loại giá trị nào, bao gồm cả bản đồ lồng nhau. Danh sách và bản đồ có thể có dấu phẩy ở cuối giá trị cuối cùng.

quả cầu

Các thuộc tính lấy danh sách các tệp, chẳng hạn như srcs , cũng có thể lấy các mẫu toàn cầu. Các mẫu toàn cầu có thể chứa ký tự đại diện UNIX bình thường * , ví dụ *.java . Các mẫu toàn cầu cũng có thể chứa một ký tự đại diện ** duy nhất làm 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ả hai mẫu java/Main.javajava/com/android/Main.java .

Biến

Tệp Android.bp có thể chứa các phép gán 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 nằm trong phạm vi phần còn lại của tệp mà chúng được khai báo, cũng như bất kỳ tệp Blueprint con nào. Các biến là bất biến với một ngoại lệ: chúng có thể được thêm vào bằng phép gán += , nhưng chỉ trước khi chúng được tham chiếu.

Bình luận

Các // Android.bp có thể chứa các nhận xét /* */ một dòng nhiều dòng kiểu C và kiểu C++.

Toán tử

Các chuỗi, danh sách chuỗi và bản đồ có thể được nối thêm bằng toán tử +. Các số nguyên có thể được tính tổng bằng toán tử + . Việc thêm một bản đồ sẽ tạo ra sự kết hợp các khóa trong cả hai bản đồ, nối thêm các giá trị của bất kỳ khóa nào có trong cả hai bản đồ.

Câu điều kiện

Soong không hỗ trợ các điều kiện trong tệp Android.bp . Thay vào đó, sự phức tạp trong các quy tắc xây dựng yêu cầu các điều kiện sẽ được xử lý trong Go, nơi có thể sử dụng các tính năng ngôn ngữ cấp cao và có thể theo dõi các phần phụ thuộc ngầm do các điều kiện đưa ra. Hầu hết các điều kiện đượ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à gắn vào thuộc tính cấp cao nhất.

Ví dụ: để hỗ trợ các tệp dành riêng cho kiến ​​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 tin Blueprint, tương tự như gofmt . Để định dạng lại đệ quy tất cả các tệp Android.bp 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ề bốn dấu cách, 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 danh sách và bản đồ.