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.
Extensiones SDK es responsable de:
- Decidir el nivel de extensión SDK del dispositivo.
- Proporcionar API para que las aplicaciones consulten el nivel del SDK de 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 SDK Extensions ( 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 temprano en el proceso de arranque del dispositivo y lee metadatos de otros módulos para establecer propiedades del sistema relacionadas con la extensión SDK (por ejemplo,build.version.extensions.r
).javalib/framework-sdkextension.jar
: este archivo se encuentra en la ruta de clase de arranque que expone las API a las aplicaciones para consultar el nivel del SDK de extensión.
Derivando el nivel del SDK de extensión
El programa derive_sdk
lee los metadatos almacenados como archivos binarios protobuf 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 SdkExtensions
en el paquete android.os.ext
. Utilice el método getExtensionVersion(int)
para leer la versión de una extensión del SDK (por ejemplo, getExtensionVersion(Build.VERSION_CODES.R)
).
Derivando rutas de clases
El servicio derive_classpath
lee y fusiona archivos de configuración individuales en /system/etc/classpaths/
y /apex/*/etc/classpaths/
. Cada configuración almacena mensajes protobuf de classpaths.proto
en un formato proto binario. El algoritmo de fusión exacto que determina el orden de las entradas de classpath se describe en derive_classpath.cpp
y puede cambiar con el tiempo.