Format file Android.bp

File Android.bp telah dirancang agar 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 daftar jenis modul yang valid dan propertinya, lihat Referensi Modul Soong.

Jenis

Variabel dan properti memiliki jenis yang kuat, dengan variabel yang secara dinamis didasarkan pada penetapan pertama, dan properti ditetapkan secara statis oleh jenis modul. Tujuan jenis yang didukung adalah:

  • Boolean (true atau false)
  • Bilangan bulat (int)
  • String ("string")
  • Daftar string (["string1", "string2"])
  • Peta ({key1: "value1", key2: ["value2"]})

Maps dapat berisi nilai dari jenis apa pun, termasuk peta bertingkat. Daftar dan peta mungkin 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 java/Main.java dan Pola 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 tercakup dalam sisa file tempat variabel tersebut dideklarasikan, sebagai file Blueprint turunan apa pun. Variabel tidak dapat diubah dengan satu pengecualian: variabel tersebut dapat ditambahkan dengan tugas +=, tapi hanya sebelum yang direferensikan.

Komentar

File Android.bp dapat berisi multibaris /* */ dan gaya C++ gaya C komentar // baris tunggal.

Operator

String, daftar string, dan peta dapat ditambahkan menggunakan operator +. Bilangan bulat dapat dijumlahkan menggunakan operator +. Menambahkan peta akan menghasilkan gabungan kunci di kedua peta, dengan 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 di peta dipilih dan ditambahkan ke properti tingkat atas.

Misalnya, untuk mendukung file khusus arsitektur:

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

Pemformat

Soong menyertakan pemformat kanonis untuk file Cetak biru, yang mirip dengan gofmt. Untuk memformat ulang semua Android.bp file di direktori saat ini, jalankan:

bpfmt -w .

Format kanonis mencakup indentasi empat spasi, baris baru setelah setiap elemen dari daftar multielemen, dan koma di akhir daftar dan peta.