החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
תוספים ל-SDK
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
המודול של SDK Extensions קובע את רמת ה-SDK של התוסף במכשיר ומספק ממשקי API לאפליקציות כדי לשלוח שאילתות לגבי רמת ה-SDK של התוסף. אפשר לעדכן את המודול הזה, כלומר הוא יכול לקבל עדכונים לפונקציונליות מחוץ למחזור הגרסאות הרגיל של Android.
התוספים ל-SDK אחראים על:
- קביעת רמת ה-SDK של התוסף במכשיר.
- מתן ממשקי API לאפליקציות כדי לשלוח שאילתות לגבי רמת ה-SDK של התוסף.
- (החל מגרסה 12 של Android) קביעת הערכים של משתני הסביבה
BOOTCLASSPATH
, DEX2OATBOOTCLASSPATH
ו-SYSTEMSERVERCLASSPATH
.
המודול של התוספים ל-SDK (com.android.sdkext
) נמצא בפורמט APEX וניתן להתקנה במכשירים עם Android מגרסה 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 חושף את הכיתה SdkExtensions
ב-Java בחבילה android.os.ext
. משתמשים ב-method getExtensionVersion(int)
כדי לקרוא את הגרסה של תוסף SDK (לדוגמה, getExtensionVersion(Build.VERSION_CODES.R)
).
הפקת נתיבי classpath
השירות derive_classpath
קורא וממזג קובצי תצורה נפרדים ב-/system/etc/classpaths/
וב-/apex/*/etc/classpaths/
. כל קובץ תצורה שומר הודעה של protobuf מ-classpaths.proto
בפורמט בינארי של proto. אלגוריתם המיזוג המדויק שקובע את הסדר של הרשומות ב-classpath מתואר במאמר derive_classpath.cpp
, והוא עשוי להשתנות עם הזמן.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# SDK Extensions\n\nThe SDK Extensions module decides the extension SDK level of the device and\nprovides APIs for apps to query the extension SDK level. This module is\nupdatable, meaning it can receive updates to functionality outside of the normal\nAndroid release cycle.\n\nSDK Extensions is responsible for:\n\n- Deciding the extension SDK level of the device.\n- Providing APIs for apps to query the extension SDK level.\n- (Starting Android 12) Determining the values for the `BOOTCLASSPATH`, `DEX2OATBOOTCLASSPATH`, and `SYSTEMSERVERCLASSPATH` environment variables.\n\nModule format\n-------------\n\nThe SDK Extensions module (`com.android.sdkext`) is in\n[APEX](/docs/core/ota/apex) format and is available for devices\nrunning Android 11 or higher.\n\nPackage format\n--------------\n\nThe SDK Extensions module (`com.google.android.sdkext`) is in\n[APEX](/devices/tech/ota/apex) format and\ncontains the following components:\n\n- (Starting Android 12) `bin/derive_classpath`: A\n native binary that runs early in the device boot\n process. It reads individual classpath configs files from the system and\n other modules, merges them, and defines the definition of `CLASSPATH`\n environment variables.\n\n- `bin/derive_sdk`: A native binary that runs early in the device boot process\n and reads metadata of other modules to set system properties related to the\n extension SDK (for example, `build.version.extensions.r`).\n\n- `javalib/framework-sdkextension.jar`: This file is on the bootclasspath that\n exposes APIs to apps to query the extension SDK level.\n\nDerive extension SDK level\n--------------------------\n\nThe `derive_sdk` program reads metadata stored as binary protobuf files in the\n`etc/sdkinfo.binarypb` subpath inside each APEX module. For details on protobuf\nstructure, refer to the\n[`protobuf`](https://android.googlesource.com/platform/external/protobuf.git)\nfile.\n\nRead extension SDK level\n------------------------\n\nThe SDK Extensions module exposes an\n[`SdkExtensions`](https://android.googlesource.com/platform/packages/modules/SdkExtensions/)\njava class in the `android.os.ext` package. Use the `getExtensionVersion(int)`\nmethod to read the version of an SDK extension (for example,\n`getExtensionVersion(Build.VERSION_CODES.R)`).\n\nDerive classpaths\n-----------------\n\nThe `derive_classpath` service reads and merges individual config files in\n`/system/etc/classpaths/` and `/apex/*/etc/classpaths/`. Each config stores\nprotobuf message from [`classpaths.proto`](https://android.googlesource.com/platform/packages/modules/common/+/android16-release/proto/classpaths.proto)\nin a proto binary format. The exact merging algorithm that determines the order\nof the classpath entries is described in\n[`derive_classpath.cpp`](https://android.googlesource.com/platform/packages/modules/SdkExtensions/+/android16-release/derive_classpath/derive_classpath.cpp)\nand might change over time."]]