Android.bp
dosyaları tasarım gereği basittir. Koşullu ifadeler veya kontrol akışı ifadeleri içermezler; tüm karmaşıklık Go'da yazılmış yapı mantığı tarafından ele alınır. Mümkün olduğunda Android.bp
dosyalarının sözdizimi ve anlambilimi Bazel BUILD dosyalarına benzer.
Modüller
Android.bp
dosyasındaki bir modül, bir modül türü ve ardından gelen bir dizi özellik ile başlar name: "value",
format:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Her modülün bir name
özelliği olması gerekir ve ad alanlarındaki ve önceden oluşturulmuş modüllerdeki tekrarlanabilecek name
özelliği değerleri dışında, değer tüm Android.bp
dosyalarında benzersiz olmalıdır.
srcs
özelliği, modülü oluşturmak için kullanılan kaynak dosyalarını bir dize listesi olarak belirtir. ": ":<module-name>"
modül referans sözdizimini kullanarak genrule
veya filegroup
gibi kaynak dosyalar üreten diğer modüllerin çıktılarına başvurabilirsiniz.
Geçerli modül türlerinin ve özelliklerinin bir listesi için Soong Modül Referansı'na bakın.
Türler
Değişkenler ve özellikler güçlü bir şekilde yazılır; değişkenler dinamik olarak ilk atamaya dayalıdır ve özellikler modül tipine göre statik olarak ayarlanır. Desteklenen türler şunlardır:
- Boolean'lar (
true
veyafalse
) - Tamsayılar (
int
) - Dizeler (
"string"
) - Dize listeleri (
["string1", "string2"]
) - Haritalar (
{key1: "value1", key2: ["value2"]}
Haritalar, iç içe haritalar da dahil olmak üzere her türde değer içerebilir. Listelerde ve haritalarda son değerden sonra virgül bulunabilir.
Küreler
srcs
gibi dosyaların listesini alan özellikler aynı zamanda glob desenlerini de alabilir. Glob desenleri normal UNIX joker karakterini *
içerebilir; örneğin *.java
. Glob desenleri, 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
Bir Android.bp
dosyası üst düzey değişken atamaları içerebilir:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Değişkenler, bildirildikleri dosyanın geri kalanının yanı sıra tüm alt Blueprint dosyalarının kapsamına alınır. Değişkenler bir istisna dışında değişmezdir: +=
atamasıyla eklenebilirler, ancak yalnızca referans verilmeden önce.
Yorumlar
Android.bp
dosyaları C tarzı çok satırlı /* */
ve C++ tarzı tek satırlı //
açıklamalar içerebilir.
Operatörler
+ operatörü kullanılarak dizeler, dize listeleri ve haritalar eklenebilir. Tamsayılar +
operatörü kullanılarak toplanabilir. Bir haritanın eklenmesi, her iki haritadaki anahtarların birleşimini sağlar ve her iki haritada da mevcut olan anahtarların değerleri eklenir.
Şartlılar
Soong, Android.bp
dosyalarındaki koşul ifadelerini desteklemez. Bunun yerine, koşullu ifadeler gerektiren oluşturma kurallarındaki karmaşıklık, üst düzey dil özelliklerinin kullanılabildiği ve koşullu ifadelerin getirdiği örtülü bağımlılıkların izlenebildiği Go'da ele alınır. Koşulların çoğu, haritadaki değerlerden birinin seçildiği ve üst düzey özelliklere eklendiği bir harita özelliğine dönüştürülür.
Örneğin mimariye özgü dosyaları desteklemek için:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Biçimlendirici
Soong, Blueprint dosyaları için gofmt'ye benzer bir kanonik biçimlendirici içerir. Geçerli dizindeki tüm Android.bp
dosyalarını yinelemeli olarak yeniden biçimlendirmek için şunu çalıştırın:
bpfmt -w .
Kanonik format, dört boşluklu girintileri, çok öğeli bir listenin her öğesinden sonra yeni satırları ve listelerde ve haritalarda sondaki virgül içerir.