בודק שימושים ב-ABI מראש

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