По замыслу файлы Android.bp
просты. Они не содержат условных операторов или операторов управления потоком; вся сложность обрабатывается логикой сборки, написанной на Go. Когда это возможно, синтаксис и семантика файлов Android.bp
аналогичны файлам Bazel BUILD .
Модули
Модуль в файле Android.bp
начинается с типа модуля, за которым следует набор свойств в name: "value",
формат:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Каждый модуль должен иметь свойство name
, а значение должно быть уникальным во всех файлах Android.bp
, за исключением значений свойства name
в пространствах имен и готовых модулях, которые могут повторяться.
Свойство srcs
указывает исходные файлы, используемые для сборки модуля, в виде списка строк. Вы можете ссылаться на вывод других модулей, которые создают исходные файлы, например genrule
или filegroup
, используя синтаксис ссылки на модуль ":
.
Список допустимых типов модулей и их свойств см. в Справочнике модулей Soong .
Типы
Переменные и свойства строго типизированы, с переменными, динамически основанными на первом назначении, и свойствами, установленными статически по типу модуля. Поддерживаемые типы:
- Булевы значения (
true
илиfalse
) - Целые числа (
int
) - Строки (
"string"
) - Списки строк (
["string1", "string2"]
) - Карты (
{key1: "value1", key2: ["value2"]}
)
Карты могут содержать значения любого типа, включая вложенные карты. Списки и карты могут иметь запятые после последнего значения.
Шарики
Свойства, которые принимают список файлов, например srcs
, также могут принимать шаблоны glob. Шаблоны glob могут содержать обычный подстановочный знак UNIX *
, например *.java
. Шаблоны glob также могут содержать один подстановочный знак **
в качестве элемента пути, который соответствует нулю или более элементам пути. Например, java/**/*.java
соответствует как шаблонам java/Main.java
так и java/com/android/Main.java
.
Переменные
Файл Android.bp
может содержать назначения переменных верхнего уровня:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Переменные ограничены оставшейся частью файла, в котором они объявлены, а также любыми дочерними файлами Blueprint. Переменные неизменяемы, за одним исключением: к ним можно добавлять с помощью назначения +=
, но только до того, как на них ссылаются.
Комментарии
Файлы Android.bp
могут содержать многострочные комментарии /* */
в стиле C и однострочные комментарии //
в стиле C++.
Операторы
Строки, списки строк и карты можно добавлять с помощью оператора +. Целые числа можно суммировать с помощью оператора +
. Добавление карты создает объединение ключей в обеих картах, добавляя значения любых ключей, которые присутствуют в обеих картах.
Условные предложения
Soong не поддерживает условные операторы в файлах Android.bp
. Вместо этого сложность правил сборки, требующих условных операторов, обрабатывается в Go, где можно использовать высокоуровневые языковые возможности и отслеживать неявные зависимости, введенные условными операторами. Большинство условных операторов преобразуются в свойство карты, где одно из значений в карте выбирается и добавляется к свойствам верхнего уровня.
Например, для поддержки файлов, специфичных для архитектуры:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Форматировщик
Soong включает канонический форматтер для файлов Blueprint, похожий на gofmt . Чтобы рекурсивно переформатировать все файлы Android.bp
в текущем каталоге, выполните:
bpfmt -w .
Канонический формат включает отступы в четыре пробела, новые строки после каждого элемента многоэлементного списка и завершающую запятую в списках и картах.