Les fichiers Android.bp
sont conçus pour être simples à utiliser. 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 d'un fichier Android.bp
commence par
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 créer le module, sous la forme
liste de chaînes. Vous pouvez référencer la sortie d'autres modules qui produisent
des fichiers sources, comme genrule
ou filegroup
, à l'aide de la référence du module
":<module-name>"
.
Pour obtenir la liste des types de modules valides et de leurs propriétés, consultez le Documentation de référence sur les modules Soong
Types
Les variables et les propriétés sont très typées, les variables étant basées de manière dynamique la première attribution, et les propriétés définies de manière statique par le type de module. La types pris en charge sont les suivants:
- Booléens (
true
oufalse
) - Entiers (
int
) - Chaînes (
"string"
) - Listes de chaînes (
["string1", "string2"]
) - Cartes (
{key1: "value1", key2: ["value2"]}
)
Les cartes peuvent contenir des valeurs de n'importe quel type, y compris des cartes imbriquées. Les listes et les cartes peuvent avoir une virgule de fin après la dernière valeur.
Globes
Les propriétés qui utilisent une liste de fichiers, comme srcs
, peuvent également utiliser le schéma glob.
modèles de ML. 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 **
comme chemin d'accès.
, qui correspond à zéro, un ou plusieurs éléments de tracé. 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.
que n'importe quel fichier de plan enfant. Les variables sont immuables, à une exception près: elles
peuvent être ajoutées par une attribution +=
, mais uniquement avant d'être
référencées.
Commentaires
Les fichiers Android.bp
peuvent contenir un /* */
multiligne de style C++ et un style C++
commentaires //
sur une seule ligne.
Opérateurs
Vous pouvez ajouter des chaînes, des listes de chaînes et des mappages à l'aide de l'opérateur +.
Les nombres entiers peuvent être additionnés à 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
. À la place,
la complexité des règles de compilation
nécessitant des conditions sont gérées dans Go.
où des fonctionnalités de langage de haut niveau peuvent être utilisées, et les dépendances implicites
introduites par des conditions
peut être suivi. 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 des fichiers spécifiques à l'architecture:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Outil de mise en forme
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 à plusieurs éléments, et une virgule de fin dans les listes et les cartes.