הספריות המשותפות של Android משתנות מדי פעם. שמירה של קבצים בינאריים מוכנים מראש עדכניים נדרשים מאמצים רבים. ב-Android 9 או מוקדם יותר, הקבצים הבינאריים המוכנים מראש שתלויים ספריות או ממשקי ABI שהוסרו לא יוצרים קישור רק בזמן הריצה. המפתחים צריכים לעקוב אחרי היומנים כדי למצוא את הקבצים הבינאריים המיושנים מראש. ב-Android 10, מוצג כלי לבדיקת שימושים ב-ABI מבוסס-סמלים. הבודק יכול לזהות קבצים בינאריים מיושנים מראש בזמן ה-build, כך מפתחי ספריות יכולים לדעת אילו קבצים בינאריים מוגדרים מראש עלולים להיפגע ואילו קבצים בינאריים מוכנים מראש יש לבנות מחדש.
בודק שימושים ב-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
. אם
אי אפשר לפענח את הסמל הלא מוגדר, נוצרת הודעת שגיאה.
מאפייני מודול מוכנים מראש
יש לציין את יחסי התלות של הקובץ הבינארי המוכן מראש הבאים:
- 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
הרצת הבדיקה
כדי להריץ את הבדיקה, צריך להגדיר את משתנה הסביבה
CHECK_ELF_FILES
עד true
וריצה
make check-elf-files
:
CHECK_ELF_FILES=true make check-elf-files
כדי להפעיל את הבדיקה כברירת מחדל, צריך להוסיף את PRODUCT_CHECK_ELF_FILES
אל BoardConfig.mk
:
PRODUCT_CHECK_ELF_FILES := true
גרסאות מוכנות מראש נבדקות באופן אוטומטי בתהליך ה-build של Android:
make