El módulo de extensiones del SDK decide el nivel del SDK de extensión del dispositivo y proporciona APIs para que las apps consulten el nivel del SDK de extensión. Este módulo se puede actualizar, lo que significa que puede recibir actualizaciones de funciones fuera del ciclo normal de lanzamiento de Android.
Las extensiones del SDK son responsables de lo siguiente:
- Decidir el nivel del SDK de extensión del dispositivo
- Proporcionar APIs para que las apps consulten el nivel del SDK de extensión
- (A partir de Android 12) Determinar los valores de las
BOOTCLASSPATH,DEX2OATBOOTCLASSPATHySYSTEMSERVERCLASSPATHvariables de entorno
Formato del módulo
El módulo de extensiones del SDK (com.android.sdkext) está en
formato APEX y está disponible para dispositivos
con 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 arranque del dispositivo. Lee archivos de configuración de classpath individuales del sistema y otros módulos, los une y define la definición de las variables de entornoCLASSPATH.bin/derive_sdk: Es un objeto binario nativo que se ejecuta al principio del proceso de arranque del dispositivo y lee metadatos de otros módulos para establecer propiedades del sistema relacionadas con el SDK de extensión (por ejemplo,build.version.extensions.r).javalib/framework-sdkextension.jar: Este archivo está en el bootclasspath que expone APIs a las apps para consultar el nivel del SDK de extensión.
Deriva el nivel del SDK de 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
protobuf
archivo.
Lee el nivel del SDK de extensión
El módulo de extensiones del SDK expone una clase
SdkExtensions
Java en el paquete android.os.ext. Usa el método getExtensionVersion(int) para leer la versión de una extensión del SDK (por ejemplo, getExtensionVersion(Build.VERSION_CODES.R)).
Deriva classpaths
El servicio derive_classpath lee y une archivos de configuración individuales en /system/etc/classpaths/ y /apex/*/etc/classpaths/. Cada configuración almacena
un mensaje protobuf de classpaths.proto
en un formato binario proto. El algoritmo de unión exacto que determina el orden
de las entradas de classpath se describe en
derive_classpath.cpp
y puede cambiar con el tiempo.