Android.bp
dosyaları, tasarım gereği basittir. Koşul veya kontrol akışı ifadeleri içermezler; tüm karmaşıklık, Go'da yazılan derleme mantığıyla ele alınır. Mümkün olduğunda Android.bp
dosyalarının söz dizimi ve anlamları, Bazel BUILD dosyalarına benzer.
Modüller
Android.bp
dosyasındaki modüller, modül türüyle başlar ve ardından name: "value",
biçiminde bir özellik grubu gelir:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Her modülün bir name
mülkü olmalıdır ve değer, ad alanlarında ve önceden oluşturulmuş modüllerdeki name
mülk değerleri (tekrarlanabilecek) hariç tüm Android.bp
dosyalarında benzersiz olmalıdır.
srcs
mülkü, modülü oluşturmak için kullanılan kaynak dosyalarını dize listesi olarak belirtir. ":<module-name>"
modül referans söz dizimini kullanarak genrule
veya filegroup
gibi kaynak dosyaları oluşturan diğer modüllerin çıkışına başvurabilirsiniz.
Geçerli modül türlerinin ve özelliklerinin listesi için Soong Modülleri Referansı başlıklı makaleyi inceleyin.
Türler
Değişkenler ve özellikler güçlü bir şekilde yazılır. Değişkenler ilk atamaya göre dinamik olarak oluşturulur ve özellikler modül türüne göre statik olarak ayarlanır. Desteklenen türler şunlardır:
- Boole (
true
veyafalse
) - Tam sayılar (
int
) - Dizeler (
"string"
) - Dize listeleri (
["string1", "string2"]
) - Haritalar (
{key1: "value1", key2: ["value2"]}
)
Haritalar, iç içe yerleştirilmiş haritalar da dahil olmak üzere herhangi bir türde değeri içerebilir. Listelerin ve haritaların son değeri sonrasında virgül olabilir.
Globs
Dosya listesi alan srcs
gibi özellikler, glob kalıpları da alabilir. Glob kalıpları, normal UNIX joker karakterini *
içerebilir (ör. *.java
). Dünya kalıpları, yol öğesi olarak sıfır veya daha fazla yol öğesiyle eşleşen tek bir **
joker karakteri de içerebilir. Örneğin, java/**/*.java
hem java/Main.java
hem de java/com/android/Main.java
kalıplarıyla eşleşir.
Değişkenler
Android.bp
dosyaları üst düzey değişken atamalarını içerebilir:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Değişkenlerin kapsamı, tanımlandığı dosyanın geri kalanı ve alt şema dosyalarına dahil edilir. Değişkenler bir istisna dışında değiştirilemez: +=
atamayla eklenebilirler ancak yalnızca referans verilmeden önce.
Yorumlar
Android.bp
dosyaları C tarzı çok satırlı /* */
ve C++ tarzı tek satırlı //
yorumlar içerebilir.
Operatörler
+ operatörü kullanılarak dize, dize listesi ve harita eklenebilir.
Tam sayılar +
operatörü kullanılarak toplanabilir. Bir haritayı eklemek, her iki haritada da bulunan anahtarların değerlerini ekleyerek her iki haritada da bulunan anahtarların birleşimini oluşturur.
Koşullu ifadeler
Yakındag, Android.bp
dosyalarında koşulları desteklemez. Bunun yerine, koşullu ifadeleri gerektiren derleme kurallarındaki karmaşıklık Go'da ele alınır. Go'da üst düzey dil özellikleri kullanılabilir ve koşullu ifadeler tarafından oluşturulan gizli bağımlılıklar izlenebilir. Çoğu koşul, haritadaki değerlerden birinin seçildiği ve üst düzey mülklere eklendiği bir harita özelliğine dönüştürülür.
Örneğin, mimariye özel dosyaları desteklemek için:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Biçimlendirici
Soong, gofmt'e benzer şekilde Blueprint dosyaları için standart bir biçimlendirici içerir. Geçerli dizindeki tüm Android.bp
dosyalarını yinelemeli olarak yeniden biçimlendirmek için şu komutu çalıştırın:
bpfmt -w .
Standart biçim; dört boşluk girintisi, birden çok öğeli listenin her öğesinden sonra yeni satırlar ve listeler ile haritalarda sondaki virgülü içerir.