El módulo Extensiones de SDK decide el nivel de SDK de extensión del dispositivo y proporciona API para que las aplicaciones consulten el nivel de SDK de extensión. Este módulo es actualizable, lo que significa que puede recibir actualizaciones de funcionalidad fuera del ciclo de lanzamiento normal de Android.
SDK Extensions es responsable de:
- Decidir el nivel SDK de extensión del dispositivo.
- Proporcionar API para que las aplicaciones consulten el nivel del SDK de la extensión.
- (A partir de Android 12) Determinación de los valores de las variables de entorno
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
ySYSTEMSERVERCLASSPATH
.
Formato del módulo
El módulo de extensiones SDK ( com.android.sdkext
) está en formato APEX y está disponible para dispositivos con Android 11 o superior.
formato de paquete
El módulo de extensiones SDK ( com.google.android.sdkext
) está en formato APEX y contiene los siguientes componentes:
(A partir de Android 12)
bin/derive_classpath
: un binario nativo que se ejecuta al principio del proceso de arranque del dispositivo. Lee archivos de configuración de classpath individuales del sistema y otros módulos, los fusiona y define la definición de las variables de entornoCLASSPATH
.bin/derive_sdk
: un binario nativo que se ejecuta al principio del proceso de arranque del dispositivo y lee los metadatos de otros módulos para establecer las propiedades del sistema relacionadas con el SDK de la extensión (por ejemplo,build.version.extensions.r
).javalib/framework-sdkextension.jar
: este archivo está en bootclasspath que expone las API a las aplicaciones para consultar el nivel del SDK de la extensión.
Derivación del nivel de SDK de la extensión
El programa derive_sdk
lee los metadatos almacenados como archivos protobuf binarios en la subruta etc/sdkinfo.binarypb
dentro de cada módulo APEX. Para obtener detalles sobre la estructura de protobuf, consulte el archivo protobuf
.
Nivel de SDK de extensión de lectura
El módulo SDK Extensions expone una clase java de SdkExtensions
en el paquete android.os.ext
. Utilice el getExtensionVersion(int)
para leer la versión de una extensión SDK (por ejemplo, getExtensionVersion(Build.VERSION_CODES.R)
).
Derivación de classpaths
El servicio derive_classpath
lee y fusiona archivos de configuración individuales en /system/etc/classpaths/
y /apex/*/etc/classpaths/
. Cada configuración almacena el mensaje protobuf de classpaths.proto
en un formato binario proto. El algoritmo de combinación exacto que determina el orden de las entradas de classpath se describe en derive_classpath.cpp
y puede cambiar con el tiempo.