בזכות העיצוב של קובצי Android.bp
, הם פשוטים. הם לא כוללים תנאים
הצהרות בתהליכי בקרה; כל המורכבות מטופלת באמצעות לוגיקת build שכתובה
מתחילים. כשהדבר אפשרי, התחביר והסמנטיקה של קובצי 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
, באמצעות ההפניה למודול
תחביר ":<module-name>"
.
כדי לקבל רשימה של סוגי מודולים תקינים והתכונות שלהם, אפשר לעיין במאמר חומר עזר בנושא מודולים של Soong.
סוגים
משתנים ומאפיינים מוקלדים בצורה חזקה, כאשר המשתנים מבוססים באופן דינמי המשימה הראשונה ואת המאפיינים שמוגדרים באופן סטטי לפי סוג המודול. הסוגים הנתמכים הם:
- בוליאני (
true
אוfalse
) - מספרים שלמים (
int
) - מחרוזות (
"string"
) - רשימות של מחרוזות (
["string1", "string2"]
) - מפות (
{key1: "value1", key2: ["value2"]}
)
מפות Google עשויות להכיל ערכים מכל סוג, כולל מפות מקוננות. רשימות ומפות עשויות כוללים פסיקים בסוף הערך האחרון.
כדורים
מאפיינים שמקבלים רשימה של קבצים, כמו srcs
, יכולים גם לקחת כדור הארץ
דפוסים. דפוסי גלובוס יכולים להכיל את התו הכללי לחיפוש הרגיל של UNIX, *
, לדוגמה
*.java
. תבניות של גלובוס יכולות להכיל גם תו כללי לחיפוש אחד מסוג **
כנתיב
שתואם לאפס רכיבי נתיב או יותר. לדוגמה,
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",
}
המשתנים מוגבלים לשאר הקובץ שבו הם מוצהרים, וגם
כמו כל קובץ צאצא של שרטוטים. לא ניתן לשנות את המשתנים, למעט חריג אחד:
ניתן להוסיף אליהם מטלה מסוג +=
, אבל רק לפני שהם
שיש הפניה אליו.
תגובות
Android.bp
קבצים יכולים להכיל כמה שורות בסגנון C /* */
וסגנון C++
//
תגובות בשורה אחת.
מפעילים
ניתן לצרף מחרוזות, רשימות של מחרוזות ומפות באמצעות האופרטור +.
אפשר לסכם מספרים שלמים באמצעות האופרטור +
. צירוף מפה יוצר את
איחוד של מפתחות בשתי המפות, בצירוף הערכים של כל המפתחות שנמצאים
בשתי המפות.
מותנים
התכונה Sung לא תומכת בתנאים ובהגבלות ב-Android.bp
קבצים. במקום זאת,
את המורכבות בכללי build שמחייבים את הטיפול בתנאים ב-Go,
שבהם ניתן להשתמש בתכונות שפה כלליות, ויחסי תלות מרומזים
שנוספו באמצעות תנאים. רוב התנאים מומרים
מאפיין במפה, שבו נבחר ונוסף אחד מהערכים במפה
לנכסים ברמה העליונה.
לדוגמה, כדי לתמוך בקבצים ספציפיים לארכיטקטורה:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
עיצוב
בקרוב כולל תבנית עיצוב קנונית של קובצי Blueprint, בדומה ל-
goFMt. כדי לשנות את הפורמט של הכול באופן רקורסיבי
Android.bp
קבצים בספרייה הנוכחית, מריצים את:
bpfmt -w .
הפורמט הקנוני כולל כניסה של ארבעה רווחים, שורות חדשות אחרי כל רכיב של רשימה מרובת רכיבים, ופסיק בסוף ברשימות ובמפות.