De par leur conception, les fichiers Android.bp
sont simples. Ils ne contiennent pas
d’expressions conditionnelles ou
les instructions de flux de contrôle ; toute la complexité est gérée par une logique de compilation écrite
OK. Dans la mesure du possible, la syntaxe et la sémantique des fichiers Android.bp
sont similaires à
Fichiers CREATE Bazel
Modules
Un module dans un fichier Android.bp
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 avoir une propriété name
, et la valeur doit être unique dans
tous les fichiers Android.bp
, à l'exception des valeurs de propriété name
dans
des espaces de noms et des modules prédéfinis, qui peuvent être répétés.
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 compatibles :
- 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 avoir une virgule de fin après la dernière valeur.
Globs
Les propriétés qui acceptent une liste de fichiers, telles que srcs
, peuvent également accepter des expressions régulières. Les modèles glob peuvent contenir le caractère générique UNIX standard *
, 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 java/Main.java
et
Modèles 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 ne soient 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 de clés dans les deux mappages, en ajoutant les valeurs de toutes les clés présentes dans
les deux cartes.
Expressions conditionnelles
Soong n'accepte pas les instructions conditionnelles 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 instructions conditionnelles sont converties en
map, 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 Tout reformater de manière récursive
Android.bp
dans le répertoire actuel, exécutez la commande suivante:
bpfmt -w .
Le format canonique comprend des retraits à quatre espaces, de nouvelles lignes après chaque élément d'une liste multi-éléments et une virgule finale dans les listes et les cartes.