תוספי SDK

המודול של התוספים ל-SDK קובע את רמת ה-SDK של התוסף במכשיר ומספק ממשקי API לאפליקציות כדי לשלוח שאילתות לגבי רמת ה-SDK של התוסף. אפשר לעדכן את המודול הזה, כלומר הוא יכול לקבל עדכונים לפונקציונליות מחוץ למחזור הגרסאות הרגיל של Android.

התוספים ל-SDK אחראים על:

  • קביעת רמת ה-SDK של התוסף במכשיר.
  • מתן ממשקי API לאפליקציות כדי לשלוח שאילתות לגבי רמת ה-SDK של התוסף.
  • (החל מ-Android 12) קביעת הערכים של משתני הסביבה BOOTCLASSPATH, DEX2OATBOOTCLASSPATH ו-SYSTEMSERVERCLASSPATH.

פורמט המודול

המודול של התוספים ל-SDK (com.android.sdkext) נמצא בפורמט APEX וניתן להתקנה במכשירים עם Android מגרסה 11 ואילך.

פורמט החבילה

המודול של התוספים ל-SDK (com.google.android.sdkext) נמצא בפורמט APEX ומכיל את הרכיבים הבאים:

  • (החל מ-Android 12) bin/derive_classpath: קובץ בינארי מקורי שפועל בשלב מוקדם בתהליך ההפעלה של המכשיר. הוא קורא קובצי תצורה של classpath נפרדים מהמערכת וממודולים אחרים, ממזג אותם ומגדיר את ההגדרה של משתני הסביבה CLASSPATH.

  • bin/derive_sdk: קובץ בינארי מקורי שפועל בשלב מוקדם בתהליך האתחול של המכשיר וקורא מטא-נתונים של מודולים אחרים כדי להגדיר מאפייני מערכת שקשורים ל-SDK של התוסף (לדוגמה, build.version.extensions.r).

  • javalib/framework-sdkextension.jar: הקובץ הזה נמצא ב-bootclasspath, ומציג ממשקי API לאפליקציות כדי לבצע שאילתה ברמת ה-SDK של התוסף.

הפקת רמת SDK של תוסף

תוכנית derive_sdk קוראת מטא-נתונים שמאוחסנים כקובצי protobuf בינאריים בנתיב המשנה etc/sdkinfo.binarypb בתוך כל מודול APEX. פרטים על המבנה של protobuf מופיעים בקובץ protobuf.

קריאה ברמת ה-SDK של התוסף

מודול התוספים של ה-SDK חושף את הכיתה SdkExtensions ב-Java בחבילה android.os.ext. משתמשים ב-method‏ getExtensionVersion(int) כדי לקרוא את הגרסה של תוסף SDK (לדוגמה, getExtensionVersion(Build.VERSION_CODES.R)).

הפקת נתיבי classpath

השירות derive_classpath קורא וממזג קובצי תצורה נפרדים ב-/system/etc/classpaths/ וב-/apex/*/etc/classpaths/. כל קובץ תצורה שומר הודעת protobuf מ-classpaths.proto בפורמט בינארי של proto. אלגוריתם המיזוג המדויק שקובע את הסדר של הרשומות ב-classpath מתואר במאמר derive_classpath.cpp, והוא עשוי להשתנות עם הזמן.