Les fichiers Android.bp
sont conçus pour être simples à utiliser. Ils ne contiennent pas d'instructions conditionnelles ni de flux de contrôle. Toute la complexité est gérée par la logique de compilation écrite en Go. Lorsque cela est possible, la syntaxe et la sémantique des fichiers Android.bp
sont similaires aux fichiers BUILD Bazel.
Modules
Dans un fichier Android.bp
, un module commence par un type de module, suivi d'un ensemble de propriétés au format name: "value",
:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Chaque module doit disposer d'une propriété name
, et la valeur doit être unique pour tous les fichiers Android.bp
, à l'exception des valeurs de propriété name
dans les espaces de noms et les modules prédéfinis, qui peuvent se répéter.
La propriété srcs
spécifie les fichiers sources utilisés pour compiler le module, sous la forme d'une liste de chaînes. Vous pouvez référencer la sortie d'autres modules qui génèrent des fichiers sources, comme genrule
ou filegroup
, à l'aide de la syntaxe de référence de module ":<module-name>"
.
Pour obtenir la liste des types de modules valides et de leurs propriétés, consultez la Référence des modules Soong.
Types
Les variables et les propriétés sont fortement typées, les variables étant basées dynamiquement sur la première attribution et les propriétés définies de manière statique par le type de module. Voici les types acceptés:
- Booléens (
true
oufalse
) - Entiers (
int
) - Chaînes (
"string"
) - Listes de chaînes (
["string1", "string2"]
) - Cartes (
{key1: "value1", key2: ["value2"]}
)
Les maps peuvent contenir des valeurs de n'importe quel type, y compris des maps imbriquées. Les listes et les cartes peuvent comporter des virgules à la fin de la dernière valeur.
Globes
Les propriétés qui acceptent une liste de fichiers, telles que srcs
, peuvent également accepter des expressions régulières. Les modèles de globe peuvent contenir le caractère générique UNIX normal *
, par exemple *.java
. Les modèles glob peuvent également contenir un seul caractère générique **
en tant qu'élément de chemin d'accès, qui correspond à zéro ou plusieurs éléments de chemin d'accès. Par exemple, java/**/*.java
correspond à la fois aux modèles java/Main.java
et java/com/android/Main.java
.
Variables
Un fichier Android.bp
peut contenir des attributions de variables de niveau supérieur:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Les variables sont limitées au reste du fichier dans lequel elles sont déclarées, ainsi qu'à tous les fichiers de blueprint enfants. Les variables sont immuables, à une exception près: vous pouvez y ajouter une affectation +=
, mais uniquement avant qu'elles n'aient été référencées.
Commentaires
Les fichiers Android.bp
peuvent contenir des commentaires /* */
multilignes de style C et des commentaires //
sur une seule ligne de style C++.
Opérateurs
Vous pouvez ajouter des chaînes, des listes de chaînes et des mappages à l'aide de l'opérateur +.
Vous pouvez additionner des entiers à l'aide de l'opérateur +
. L'ajout d'une carte produit l'union des clés des deux cartes, en ajoutant les valeurs de toutes les clés présentes dans les deux cartes.
Expressions conditionnelles
Soong n'est pas compatible avec les conditions dans les fichiers Android.bp
. Au lieu de cela, la complexité des règles de compilation qui nécessiterait des conditions est gérée dans Go, où des fonctionnalités de langage de haut niveau peuvent être utilisées et les dépendances implicites introduites par les conditions peuvent être suivies. La plupart des conditions sont converties en propriété de carte, où l'une des valeurs de la carte est sélectionnée et ajoutée aux propriétés de premier niveau.
Par exemple, pour prendre en charge les fichiers spécifiques à l'architecture:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Formateur
Soong inclut un outil de mise en forme canonique pour les fichiers de plan, semblable à gofmt. Pour reformater de manière récursive tous les fichiers Android.bp
du répertoire actuel, exécutez la commande suivante:
bpfmt -w .
Le format canonique inclut des retraits de quatre espaces, de nouvelles lignes après chaque élément d'une liste multi-élément et une virgule finale dans les listes et les cartes.