הספריות המשותפות של 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_SONAME לרשומות DT_NEEDED שמתועדות בקובץ הבינארי שנבנה מראש. אם יש אי התאמה, מוצגת הודעת שגיאה.
בשלב הרביעי, הכלי לבדיקה פותר את הבעיה של הסמלים הלא מוגדרים בקובץ הבינארי שנוצר מראש. הסמלים הלא מוגדרים האלה צריכים להיות מוגדרים באחד מהתלות, והקישור של הסמל צריך להיות 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 במהלך תהליך build של 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>