commit | 99af1f4b02e646a2a7a3f0471f877641dc82e68c | [log] [tgz] |
---|---|---|
author | Paul Duffin <paulduffin@google.com> | Wed Jul 13 11:18:49 2022 +0000 |
committer | Paul Duffin <paulduffin@google.com> | Fri Jul 15 14:50:06 2022 +0000 |
tree | 932e3a5e8d0b672d60695d8dfc670bb7f5fbb5d5 | |
parent | d03b7b48c6f95befd4b8657d0bddbbe8746e8c08 [diff] |
Dedup *fragments information common to apex and sdk Previously, both the sdk and apex had to specify the same *fragments property to ensure that building a system image from a prebuilt version of the module (both APEX and sdk snapshots) would work. This change avoids the duplication by adding the apex to the sdk which allows the sdk to automatically export any APIs and related information provided by the APEX. At the moment that just includes information from *fragments properties but may expand in future. Bug: 232401814 Test: # Build snapshots with a fixed build number BUILD_NUMBER=fixed packages/modules/common/build/mainline_modules_sdks.sh # Remove api diff files as they contain file stamps of generated files so # differ every time they are generated. find out/dist/mainline-sdks -name \*txt | xargs rm # Save the snapshots away. mv out/dist/mainline-sdks before-changes # Apply this change. # Repeat the first two steps above and then run the following to verify # that this change had no effect on the generated snapshot contents. meld before-changes out/dist/mainline-sdks Change-Id: Ia5eeb3c1efc3ab0e94fae39f56276cbbf45ef9df
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 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.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. getExtensionVersion(Build.VERSION_CODES.R)
.
derive_classpath
service reads and merges individual config files in the /system/etc/classpaths/
and /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.
An extension is a way to group a set of modules so that they are versioned together. We currently define a new extension for every Android SDK level that introduces new modules. Every module shipped in previous versions are also part of the new extension. For example, all the R modules are part of both the R extensions and the S extensions.
The steps to define a new extension are:
derive_sdk.cpp
by:GetSdkLevel
with the new enum setderive_sdk_test.cpp
verifying the new extensions workSdkExtensions.getExtensionVersion
API support the new extensions.