SdkExtensions module is responsible for:
The module is packaged in an apex,
com.android.sdkext, and has several components:
bin/derive_classpath: a native binary that runs early in the device boot process. It reads individual classpath configs files from the system and other modules, merges them, and defines the definition of *CLASSPATH environ variables.
bin/derive_sdk: native binary that runs early in the device boot process and reads metadata of other modules, to set system properties relating to the extension SDK (for instance
javalib/framework-sdkextension.jar: this is a jar on the bootclasspath that exposes APIs to applications to query the extension SDK level.
derive_sdk is a program that reads metadata stored in other apex modules, in the form of binary protobuf files in subpath
etc/sdkinfo.pb inside each apex. The structure of this protobuf can be seen here. The exact steps for converting a set of metadata files to actual extension versions is likely to change over time, and should not be depended upon.
The module exposes a java class
SdkExtensions in the package
android.os.ext. The method
getExtensionVersion(int) can be used to read the version of a particular sdk extension, e.g.
derive_classpath service reads and merges individual config files in the
/apex/*/etc/classpaths. Each config stores protobuf message from
classpaths.proto in a proto binary format. Exact merging algorithm that determines the order of the classpath entries is described in
derive_classpath.cpp and may change over time.
For every new Android SDK level a new extension version should be defined. These are the steps necessary to do that:
GetSdkLevelwith the new enum set
derive_sdk_test.cppverifying the new extensions works
SdkExtensions.getExtensionVersionAPI support the new extensions.