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ış derleme mantığı tarafından ele alınır. Mümkün olduğunda, Android.bp
dosyalarının söz dizimi ve semantikleri Bazel BUILD dosyalarına benzer.
Modüller
Android.bp
dosyasındaki bir modül, modül türü ile başlar ve ardından name: "value",
biçiminde bir dizi özellik gelir:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Her modülde name
özelliği olmalı ve değer,
içindeki name
özellik değerleri dışında, Android.bp
dosyanın tümü
ad alanlarını ve önceden oluşturulmuş modülleri kapsar.
srcs
mülkü, modülü oluşturmak için kullanılan kaynak dosyalarını dize listesi olarak belirtir. Üretken, yüksek performanslı diğer modüllerin
modül referansından yararlanarak genrule
veya filegroup
gibi kaynak dosyalar
söz dizimi ":<module-name>"
.
Geçerli modül türlerinin ve özelliklerinin listesi için Soong Modülleri Referansı.
Türler
Değişkenler ve özellikler güçlü şekilde yazılmıştır. Değişkenler ilk atamaya göre dinamik olarak, özellikler ise modül türüne göre statik olarak ayarlanır. İlgili içeriği oluşturmak için kullanılan 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. Listeler ve haritalar son değerden sonra virgül koyun.
Baloncuklar
Dosya listesi alan srcs
gibi özellikler de glob alabilir
belirler. Glob kalıpları, normal UNIX joker karakterini *
içerebilir (ör. *.java
). Glob 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.
Değişkenler
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, tanımlandıkları dosyanın geri kalanı ve alt Blueprint dosyaları için kapsamlandırılır. Değişkenler bir istisna dışında sabittir:
ancak öncesinde bir +=
atamasıyla eklenebilir
referans alın.
Yorumlar
Android.bp
dosyaları, C stili çok satırlı /* */
ve C++ stili içerebilir
tek satırlık //
yorumları.
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şullar
Soong, Android.bp
dosyalarındaki koşullu ifadeleri 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. Koşullu ifadelerin çoğu, haritada yer alan değerlerden birinin seçilip üst düzey özelliklere 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
Shortg, Blueprint dosyaları için şuna benzer bir standart biçimlendirici içerir:
gofmt olarak değiştirin. Mevcut dizindeki tüm Android.bp
dosyalarını yinelemeli olarak yeniden biçimlendirmek için:
bpfmt -w .
Kanonik biçim, dört boşluk girintisi, çok öğeli bir listenin her öğesinden sonra yeni satır ve listelerde ve haritalarda sonuna virgül içerir.