[automerger skipped] Merge mainline-release 6664920 to stage-aosp-master - DO NOT MERGE am: deb7306e76 -s ours am: 999e7213f1 -s ours

am skip reason: Change-Id I32c27f243ae63dd57a0ccd415540dca3dba6fb1d with SHA-1 1768f1868c is in history

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/SdkExtensions/+/12579507

Change-Id: I3698481e7d4f4b39db28582cf97c5bac23d386af
tree: c6f284e1486e1907b84c607dbd0e3ef3e4f3244e
  1. derive_sdk/
  2. framework/
  3. testing/
  4. tests/
  5. Android.bp
  6. com.android.sdkext.avbpubkey
  7. com.android.sdkext.pem
  8. com.android.sdkext.pk8
  9. com.android.sdkext.x509.pem
  10. gen_sdkinfo.py
  11. manifest.json
  12. OWNERS
  13. README.md
  14. sdk.proto
  15. TEST_MAPPING
README.md

SdkExtensions module

SdkExtensions is a module that decides the extension SDK level of the device, and provides APIs for applications to query the extension SDK level.

Structure

The module is packaged in an apex, com.android.sdkext, and has two components:

  • 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 build.version.extensions.r).
  • javalib/framework-sdkextension.jar: This is a jar on the bootclasspath that exposes APIs to applications to query the extension SDK level.

Deriving 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.binarypb 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.

Reading extension SDK level

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. getExtensionVersion(Build.VERSION_CODES.R).