בודק מובנה לשימוש ב-ABI

הספריות המשותפות של Android מתעדכנות מדי פעם. שמירה על עדכניות של קבצים בינאריים מוכנים מראש דורשת מאמץ רב. ב-Android 9 או בגרסאות קודמות, קובצי ה-binary המובנים מראש שתלויים בספריות או ב-ABI שהוסרו נכשלים בקישור בזמן הריצה בלבד. המפתחים צריכים לעקוב אחרי היומנים כדי למצוא את הקבצים הבינאריים המוכנים מראש שכבר לא עדכניים. ב-Android 10, הושק כלי לבדיקת השימוש ב-ABI שמבוסס על סמלים. הכלי לבדיקה יכול לזהות קבצים בינאריים מיושנים שהוגדרו מראש בזמן הבנייה, כדי שמפתחים של ספריות משותפות יוכלו לדעת אילו קבצים בינאריים שהוגדרו מראש עלולים להיפגע מהשינוי שלהם ואילו קבצים בינאריים שהוגדרו מראש צריך לבנות מחדש.

כלי לבדיקת שימושים בממשקי ABI על סמך סמלים

הכלי לבדיקת השימוש ב-ABI מבוסס-הסמלים מדמה את המקשר הדינמי של Android במארח. הכלי מקשר את הקובץ הבינארי שנבנה מראש עם התלות של הקובץ הבינארי שנבנה מראש, ובודק אם כל הסמלים הלא מוגדרים נפתרו.

קודם כול, הכלי לבדיקה בודק את ארכיטקטורת היעד של הקובץ הבינארי שנבנה מראש. אם הבינארי המובנה מראש לא מטרגט ארכיטקטורת ARM,‏ AArch64,‏ x86 או x86-64, הכלי לבדיקה מדלג על הבינארי המובנה מראש.

בנוסף, צריך לציין את יחסי התלות של הקובץ הבינארי שנבנה מראש ב-LOCAL_SHARED_LIBRARIES או ב-shared_libs. מערכת ה-build פותרת את שמות המודולים לגרסה התואמת (כלומר core לעומת vendor) של הספריות המשותפות.

בשלב השלישי, הכלי להשוואה משווה את הערכים של DT_NEEDED לערכים של LOCAL_SHARED_LIBRARIES או shared_libs. בפרט, הכלי מחלץ את הערך DT_SONAME מכל ספרייה משותפת ומשווה את הערכים האלה לערכים DT_NEEDED שמתועדים בקובץ הבינארי שנבנה מראש.DT_SONAME אם יש אי התאמה, מוצגת הודעת שגיאה.

בשלב הרביעי, הכלי לזיהוי בעיות פותר את הסמלים הלא מוגדרים בקובץ הבינארי שנוצר מראש. הסמלים הלא מוגדרים האלה צריכים להיות מוגדרים באחד מהתלות, והקישור של הסמל צריך להיות GLOBAL או WEAK. אם לא ניתן לפתור סמל לא מוגדר, מוצגת הודעת שגיאה.

מאפיינים של מודול Prebuilts

צריך לציין את התלויות של הקובץ הבינארי המוכן מראש באחד מהמקומות הבאים:

  • ‫Android.bp: ‏ shared_libs: ["libc", "libdl", "libm"],
  • ‫Android.mk: LOCAL_SHARED_LIBRARIES := libc libdl libm

אם הקובץ הבינארי שנוצר מראש מיועד לכלול סמלים לא מוגדרים שלא ניתן לפתור, צריך לציין אחת מהאפשרויות הבאות:

  • ‫Android.bp: ‏ allow_undefined_symbols: true,
  • ‫Android.mk: LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

כדי שהקובץ הבינארי המוכן מראש ידלג על בדיקת קובץ ה-ELF, מציינים אחת מהאפשרויות הבאות:

  • ‫Android.bp: ‏ check_elf_files: false,
  • ‫Android.mk: LOCAL_CHECK_ELF_FILES := false

הרצת הכלי לבדיקה

הכלי לבדיקה מכסה את כל המודולים המוכנים מראש של ELF במהלך תהליך הבנייה של Android.

כדי להריץ את הכלי לבדיקה לבד ולקבל תוצאות מהר יותר:

m check-elf-files

כלי לתיקון שגיאות ב-ABI

הכלי לתיקון אוטומטי יכול לעזור לפתור שגיאות בבדיקת ABI. פשוט מריצים את הכלי לתיקון עם הקובץ Android.bp / Android.mk כקלט, והכלי לתיקון ידפיס את התיקון המוצע ל-stdout. אופציונלי: מריצים את הכלי לתיקון עם האפשרות --in-place כדי לעדכן ישירות את הקובץ Android.bp או Android.mk עם התיקון המוצע.

ב-Android.bp,

m fix_android_bp_prebuilt
# Print the fixed Android.bp to stdout.
fix_android_bp_prebuilt <path-to-Android.bp>
# Update the Android.bp in place.
fix_android_bp_prebuilt --in-place <path-to-Android.bp>

ב-Android.mk,

m fix_android_mk_prebuilt
# Print the fixed Android.mk to stdout.
fix_android_mk_prebuilt <path-to-Android.mk>
# Update the Android.mk in place.
fix_android_mk_prebuilt --in-place <path-to-Android.mk>