סעיף זה מתאר כיצד לבנות ייצוגי ABI של ליבת אנדרואיד ולהפעיל ניטור ABI. זה ישים לאנדרואיד 14 ומעלה. לגירסאות ישנות יותר, עיין בגירסאות ליבה ישנות יותר .
ראה גם את תיעוד ההפניה עבור Kleaf: ניטור ABI תמיכה (GKI) וניטור ABI תמיכה (התקן) .
בנה את הליבה ואת ייצוג ה-ABI שלו
לאחר הורדת מקורות GKI הפעל את הפקודה הבאה כדי לבנות את ליבת GKI וחפצי ABI:
tools/bazel run //common:kernel_aarch64_abi_dist
פקודה זו בונה ייצוג ABI נוכחי ומעתיקה אותו ל- out_abi/kernel_aarch64/dist/abi.stg
יחד עם הליבה והמודולים הבנויים.
אתה יכול לציין ארגומנטים נוספים עבור כלי ABI בסוף הפקודה לאחר --
. לדוגמה כדי לשנות יעד עבור ABI ולבנות חפצים, אתה יכול להשתמש באפשרות --dist_dir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
נתח את ההבדלים ב-ABI בין ה-build לבין ייצוג הפניה
היעד //common:kernel_aarch64_abi_dist
, המופעל בפקודה שלמעלה, מנתח ומדווח על הבדלי ABI שנמצאו בין ייצוג ה-build וההפניה הממוקם בכתובת common/android/abi_gki_aarch64.stg
(מוגדר ב- BUILD.bazel ). הבדלים אלה יודפסו בסוף ה-build, כפי שמוצג בדוגמה הבאה:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
הדוח המודפס מגיע מ-build artifact שנמצא ב- out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
יחד עם דוחות בפורמטים אחרים.
אוטומציה צריכה להשתמש בקוד היציאה של פקודת הבנייה, אשר לא יהיה אפס אם יימצאו הבדלים.
שימו לב שלענפי שלב הפיתוח , כולל android-mainline
, אין ייצוג ABI ייחוס. בלעדיו, //common:kernel_aarch64_abi_dist
לא יזהה הבדלים.
עדכן את ייצוג ה-ABI הייחוס
כל שינוי שמשפיע על ה-ABI של הליבה, כגון עדכון רשימת סמלים , צריך לבוא לידי ביטוי בייצוג ה-ABI הייחוס ( common/android/abi_gki_aarch64.stg
, המוגדר ב- BUILD.bazel ). לשם כך עליך להפעיל את הפקודה הבאה:
tools/bazel run //common:kernel_aarch64_abi_update
פקודה זו מבצעת הכל בשלב ניתוח הבדלי ABI ובנוסף מעדכנת את ייצוג ההפניה במקורות. לאחר מכן ניתן להעלות את ה-ABI המעודכן באותה commit של השינוי. אנא כלול את הבדלי ABI מהדוח ב- $DIST_DIR/abi.report.short
בהודעת ה-commit.
ניטור ABI ומטרות מכשירים
ניטור ABI צריך להיות מוגדר רק עבור יעדי בניית ליבה. תצורות בנייה מעורבות (כאלה שמגדירות base_kernel
) שמקומיות ישירות עם ליבת GKI צריכות להוסיף רק תמיכה למעקב אחר רשימת סימוני המכשיר . יש לעדכן את הגדרת ה-ABI באמצעות ה-GKI build.
ראה גם תיעוד עזר עבור Kleaf: תמיכת ניטור ABI (התקן) .
גרסאות ליבה ישנות יותר
אנדרואיד 13
הוראות הבנייה זהות לרוב לאנדרואיד 14 פרט לכך שפורמט ה-ABI הוא XML והייצוג של ABI הוא common/android/abi_gki_aarch64.xml
.
אנדרואיד 12 ומטה
כמו באנדרואיד 13, פורמט ABI הוא XML.
גרעינים ישנים יותר משתמשים build.sh
במקום Kleaf. לניטור ABI עליך להשתמש build_abi.sh
, המקבל את אותם משתני סביבה כדי להתאים אישית את ה-build כמו build.sh
. לדוגמה:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
זה בונה את הליבה ומחלץ את ייצוג ABI לתוך ספריית המשנה OUT_DIR
(שהיא out_abi
כברירת מחדל) והוא שווה ערך ליעד //common:kernel_aarch64_abi_dist
של Kleaf (ראה בניית חפצי ליבה ו-ABI ).
ייצוג ABI העזר מאוחסן ב- android/abi_gki_aarch64.xml
כפי שהוגדר על ידי המשתנה ABI_DEFINITION
ב- common/build.config.gki.aarch64
.
אם אתה צריך לעדכן את ייצוג ABI של הליבה, הדרך הנוחה ביותר היא להשתמש באפשרויות --update
ו --print-report
:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
מדפיס את הבדלי ABI בין הקובץ כפי שהוא קיים לבין ABI חדש שנוצר.
האפשרות --update
מחליפה את ייצוג ABI הפניה. זה גם מעדכן את רשימת הסמלים בעת שימוש BUILD_CONFIG
עבור מכשיר עם תצורת KMI_SYMBOL_LIST
.