Pliki Android.bp
są projektowane z myślą o prostym. Nie zawierają warunków warunkowych ani
sterowanie instrukcjami przepływu; cała złożoność jest obsługiwana przez logikę kompilacji napisaną
OK. Jeśli to możliwe, składnia i semantyka plików Android.bp
są podobne do
Pliki BUILD Bazel.
Moduły
Moduł w pliku Android.bp
zaczyna się od
typ modułu
z następnie zestawem właściwości w formacie name: "value",
:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Każdy moduł musi mieć właściwość name
, a wartość musi być unikalna
wszystkich plików Android.bp
oprócz wartości właściwości name
w
przestrzeni nazw i gotowych modułów, które mogą się powtarzać.
Właściwość srcs
określa pliki źródłowe użyte do utworzenia modułu jako plik
listę ciągów. Możesz odwoływać się do danych wyjściowych innych modułów, które dają
plików źródłowych, takich jak genrule
lub filegroup
, korzystając z odwołania do modułu
składnię ":<module-name>"
.
Listę prawidłowych typów modułów i ich właściwości znajdziesz w Informacje o modułach utworu.
Typy
Zmienne i właściwości są wpisane dynamicznie, a zmienne zależą od typu w pierwszej kolejności, a także z właściwościami ustawionymi statycznie według typu modułu. obsługiwane typy to:
- Wartość logiczna (
true
lubfalse
) - Liczba całkowita (
int
) - Ciągi tekstowe (
"string"
) - Lista ciągów znaków (
["string1", "string2"]
) - Mapy (
{key1: "value1", key2: ["value2"]}
)
Mapy mogą zawierać wartości dowolnego typu, w tym mapy zagnieżdżone. Listy i mapy mogą znajdują się przecinki po ostatniej wartości.
Kule
Właściwości, które przyjmują listę plików, takie jak srcs
, również mogą przejąć plik glob
wzorów. Wzorce kuli ziemskiej mogą zawierać normalny symbol wieloznaczny *
systemu UNIX, na przykład
*.java
Wzorce kuli ziemskiej mogą też zawierać pojedynczy symbol wieloznaczny **
jako ścieżkę
, który pasuje do 0 lub więcej elementów ścieżki. Przykład:
java/**/*.java
pasuje zarówno do java/Main.java
, jak i do
Wzorce: java/com/android/Main.java
.
Zmienne
Plik Android.bp
może zawierać przypisania zmiennych najwyższego poziomu:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Zmienne są ograniczone do pozostałej części pliku, w którym zostały zadeklarowane.
jak dowolne podrzędne pliki planów. Zmiennej nie można zmienić z jednym wyjątkiem:
można dołączyć do projektu +=
, ale tylko przed
wymienionych.
Komentarze
Pliki Android.bp
mogą zawierać wielowierszowe style /* */
i C++ w stylu C
komentarze w jednym wierszu //
.
Operatorzy
Ciągi tekstowe, listy ciągów znaków oraz mapy można dołączać za pomocą operatora +.
Całkowite można sumować za pomocą operatora +
. Dołączenie mapy powoduje wygenerowanie
sumy kluczy w obu mapach, z dołączeniem wartości wszystkich kluczy znajdujących się w
obie te mapy.
Warunkowe
Utwór nie obsługuje warunków warunkowych w plikach Android.bp
. Zamiast tego:
złożoność reguł kompilacji, które wymagają
warunków, są obsługiwane w Go,
gdzie można stosować ogólne funkcje językowe, a także niejawne zależności
wprowadzone przez warunki
mogą być śledzone. Większość warunków warunkowych jest konwertowana na
właściwość map, w której jedna z wartości na mapie jest wybrana i dołączona
do usług najwyższego poziomu.
Aby na przykład obsługiwać pliki architektury:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Narzędzie formatujące
Soong zawiera kanoniczne narzędzie do formatowania plików Blueprint, podobne do
gofmt. Aby cyklicznie zmieniać format wszystkich elementów
Liczba plików w bieżącym katalogu: Android.bp
, uruchom:
bpfmt -w .
Format kanoniczny obejmuje 4 wcięcia spacji i nowe wiersze po każdym elemencie na liście wieloelementowej, a na listach i w mapach – przecinek na końcu.