מודול 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
, והוא עשוי להשתנות עם הזמן.