תוספים ל-SDK

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