מודול SDK Extensions קובע את רמת ה-SDK של התוסף במכשיר ומספק ממשקי API לאפליקציות כדי לבדוק את רמת ה-SDK של התוסף. המודול הזה ניתן לעדכון, כלומר הוא יכול לקבל עדכונים לפונקציונליות שלו מחוץ למחזור הרגיל של גרסאות Android.
האחריות של SDK Extensions היא:
- קביעת רמת ה-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.
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 Extensions חושף מחלקת Java SdkExtensions בחבילה android.os.ext. משתמשים בשיטה getExtensionVersion(int)
כדי לקרוא את הגרסה של תוסף SDK (לדוגמה,
getExtensionVersion(Build.VERSION_CODES.R)).
הסקת נתיבי מחלקות
שירות derive_classpath קורא וממזג קובצי הגדרות נפרדים ב-/system/etc/classpaths/ וב-/apex/*/etc/classpaths/. כל הגדרה מאחסנת הודעת protobuf מ-classpaths.proto בפורמט בינארי של פרוטו. האלגוריתם המדויק למיזוג שקובע את הסדר של הרשומות בנתיב המחלקות מתואר במאמר derive_classpath.cpp, והוא עשוי להשתנות עם הזמן.