Secara desain, file Android.bp
bersifat sederhana. File ini tidak berisi kondisional atau
pernyataan alur kontrol; semua kompleksitas ditangani oleh logika build yang ditulis dalam
Go. Jika memungkinkan, sintaksis dan semantik file Android.bp
mirip dengan
file BUILD Bazel.
Modul
Modul dalam file Android.bp
dimulai dengan
jenis modul
diikuti dengan kumpulan properti dalam format name: "value",
:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Setiap modul harus memiliki properti name
, dan nilainya harus unik di
semua file Android.bp
, kecuali untuk nilai properti name
di
namespace dan modul bawaan, yang dapat diulang.
Properti srcs
menentukan file sumber yang digunakan untuk mem-build modul, sebagai
daftar string. Anda dapat mereferensikan output modul lain yang menghasilkan
file sumber, seperti genrule
atau filegroup
, dengan menggunakan sintaksis referensi
modul ":<module-name>"
.
Untuk mengetahui daftar jenis modul yang valid dan propertinya, lihat Referensi Modul Soong.
Jenis
Variabel dan properti memiliki jenis yang kuat, dengan variabel secara dinamis berdasarkan penetapan pertama, dan properti ditetapkan secara statis oleh jenis modul. Jenis yang didukung adalah:
- Boolean (
true
ataufalse
) - Bilangan bulat (
int
) - String (
"string"
) - Daftar string (
["string1", "string2"]
) - Peta (
{key1: "value1", key2: ["value2"]}
)
Peta dapat berisi nilai dari jenis apa pun, termasuk peta bertingkat. Daftar dan peta dapat memiliki koma di akhir setelah nilai terakhir.
Glob
Properti yang menggunakan daftar file, seperti srcs
, juga dapat menggunakan pola
glob. Pola glob dapat berisi karakter pengganti UNIX normal *
, misalnya
*.java
. Pola glob juga dapat berisi satu karakter pengganti **
sebagai elemen
jalur, yang cocok dengan nol atau beberapa elemen jalur. Misalnya,
java/**/*.java
cocok dengan pola java/Main.java
dan
java/com/android/Main.java
.
Variabel
File Android.bp
dapat berisi penetapan variabel tingkat atas:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Variabel dicakupkan ke sisa file tempatnya dideklarasikan, serta
file Blueprint turunan. Variabel tidak dapat diubah dengan satu pengecualian: variabel
dapat ditambahkan dengan penetapan +=
, tetapi hanya sebelum
direferensikan.
Komentar
File Android.bp
dapat berisi /* */
multibaris gaya C dan komentar //
baris tunggal gaya C++.
Operator
String, daftar string, dan peta dapat ditambahkan menggunakan operator +.
Bilangan bulat dapat dijumlahkan menggunakan operator +
. Menambahkan peta menghasilkan gabungan kunci di kedua peta, yang menambahkan nilai kunci apa pun yang ada di kedua peta.
Bersyarat
Soong tidak mendukung kondisional dalam file Android.bp
. Sebagai gantinya,
kompleksitas dalam aturan build yang akan memerlukan kondisional ditangani di Go,
tempat fitur bahasa tingkat tinggi dapat digunakan, dan dependensi implisit
yang diperkenalkan oleh kondisional dapat dilacak. Sebagian besar kondisional dikonversi menjadi properti peta, dengan salah satu nilai dalam peta dipilih dan ditambahkan ke properti tingkat teratas.
Misalnya, untuk mendukung file khusus arsitektur:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Pemformat
Soong menyertakan formater kanonis untuk file Blueprint, mirip dengan
gofmt. Untuk memformat ulang semua
file Android.bp
secara rekursif di direktori saat ini, jalankan:
bpfmt -w .
Format kanonis mencakup indentasi empat spasi, baris baru setelah setiap elemen daftar multielemen, serta koma di akhir dalam daftar dan peta.