Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

SDK 扩展

SDK 扩展模块用于确定设备的扩展 SDK 级别,并提供供应用查询扩展 SDK 级别的 API。此模块可更新,意即该模块可在 Android 常规发布周期外的时间接收功能更新。

SDK 扩展负责:

  • 确定设备的扩展 SDK 级别。
  • 为应用提供用于查询扩展 SDK 级别的 API。
  • (从 Android 12 开始)确定 BOOTCLASSPATHDEX2OATBOOTCLASSPATHSYSTEMSERVERCLASSPATH 环境变量的值。

模块格式

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 中,用于向应用公开用于查询扩展 SDK 级别的 API。

派生扩展 SDK 级别

derive_sdk 程序可读取作为二进制 protobuf 文件存储在每个 APEX 模块内的 etc/sdkinfo.binarypb 子路径中的元数据。如需详细了解 protobuf 结构,请参阅 protobuf 文件。

读取扩展 SDK 级别

SDK 扩展模块在 android.os.ext 软件包中公开了 SdkExtensions Java 类。使用 getExtensionVersion(int) 方法可读取 SDK 扩展的版本(例如 getExtensionVersion(Build.VERSION_CODES.R))。

派生类路径

derive_classpath 服务会读取 /system/etc/classpaths//apex/*/etc/classpaths/ 中的各个配置文件并进行合并。每个配置都以 proto 二进制文件格式存储来自 classpaths.proto 的 protobuf 消息。derive_classpath.cpp 中介绍了用于确定类路径条目顺序的精确合并算法,算法可能会随时间改变。