מודול 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 בפורמט בינארי של proto. האלגוריתם המדויק למיזוג שקובע את הסדר של רשומות נתיב המחלקה מתואר במאמר derive_classpath.cpp, והוא עשוי להשתנות עם הזמן.