El módulo de extensiones del SDK decide el nivel de SDK de la extensión del dispositivo y proporciona las APIs para que las apps consulten el nivel del SDK de la extensión. Este módulo se puede actualizar, lo que significa que puede recibir actualizaciones de funciones fuera del ciclo normal de lanzamientos de Android.
Las Extensiones del SDK son responsables de lo siguiente:
- Decidir el nivel de SDK de la extensión del dispositivo
- Proporciona APIs para que las apps consulten el nivel del SDK de la extensión.
- (A partir de Android 12) Determina los valores de las variables de entorno
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
ySYSTEMSERVERCLASSPATH
.
Formato del módulo
El módulo de extensiones del SDK (com.android.sdkext
) está en formato APEX y está disponible para dispositivos que ejecutan Android 11 o versiones posteriores.
Formato del paquete
El módulo de extensiones del SDK (com.google.android.sdkext
) está en formato APEX y contiene los siguientes componentes:
(A partir de Android 12)
bin/derive_classpath
: Es un objeto binario nativo que se ejecuta al principio del proceso de inicio del dispositivo. Lee archivos de configuración de ruta de clase individuales del sistema y otros módulos, los combina y define la definición de variables de entornoCLASSPATH
.bin/derive_sdk
: Es un binario nativo que se ejecuta al principio del proceso de inicio del dispositivo y lee los metadatos de otros módulos para establecer propiedades del sistema relacionadas con el SDK de la extensión (por ejemplo,build.version.extensions.r
).javalib/framework-sdkextension.jar
: Este archivo se encuentra en el classpath de inicio que expone las APIs a las apps para consultar el nivel de SDK de la extensión.
Deriva el nivel del 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, consulta el archivo protobuf
.
Lee el nivel del SDK de la extensión
El módulo de extensiones del SDK expone una clase de Java SdkExtensions
en el paquete android.os.ext
. Usa el método getExtensionVersion(int)
para leer la versión de una extensión de SDK (por ejemplo, getExtensionVersion(Build.VERSION_CODES.R)
).
Cómo derivar rutas de clase
El servicio derive_classpath
lee y combina archivos de configuración individuales en /system/etc/classpaths/
y /apex/*/etc/classpaths/
. Cada configuración almacena el mensaje de protobuf de classpaths.proto
en un formato binario de 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.