מודול הרחבות SDK מחליט על רמת ה-SDK של ההרחבה של המכשיר ומספק ממשקי API לאפליקציות לשאילתה על רמת ה-SDK של ההרחבה. מודול זה ניתן לעדכון, כלומר הוא יכול לקבל עדכונים לפונקציונליות מחוץ למחזור השחרור הרגיל של אנדרואיד.
SDK Extensions אחראי על:
- החלטה על רמת ה-SDK של ההרחבה של המכשיר.
- אספקת ממשקי API לאפליקציות לשאילתה ברמת ה-SDK של התוסף.
- (החל מ-Android 12) קביעת הערכים עבור משתני הסביבה
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
ו-SYSTEMSERVERCLASSPATH
.
פורמט מודול
מודול הרחבות SDK ( com.android.sdkext
) הוא בפורמט APEX וזמין עבור מכשירים עם אנדרואיד 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 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
בפורמט בינארי פרוטו. אלגוריתם המיזוג המדויק שקובע את הסדר של ערכי ה-classpath מתואר ב- derive_classpath.cpp
ועשוי להשתנות עם הזמן.