הספריות המשותפות של 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>