Extensiones del SDK

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 lanzamientos de Android.

Las extensiones del SDK son responsables de lo siguiente:

  • Decide el nivel del SDK de extensión del dispositivo.
  • Proporciona APIs para que las apps consulten el nivel del SDK de extensión.
  • (A partir de Android 12) Determina los valores de las variables de entorno BOOTCLASSPATH, DEX2OATBOOTCLASSPATH y SYSTEMSERVERCLASSPATH.

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 archivo binario nativo que se ejecuta al principio del proceso de inicio del dispositivo. Lee archivos de configuración de classpath individuales del sistema y otros módulos, los combina y define la definición de las variables de entorno CLASSPATH.

  • bin/derive_sdk: Es un archivo binario nativo que se ejecuta al principio del proceso de arranque del dispositivo y lee los 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 se encuentra en la ruta de arranque que expone las APIs a las apps para consultar el nivel del SDK de extensión.

Cómo derivar el nivel del SDK de extensión

El programa derive_sdk lee los metadatos almacenados como archivos binarios de protobuf en la ruta de acceso secundaria etc/sdkinfo.binarypb dentro de cada módulo APEX. Para obtener detalles sobre la estructura de protobuf, consulta el archivo protobuf.

Leer el nivel del SDK de extensión

El módulo SDK Extensions expone una clase Java SdkExtensions 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)).

Cómo derivar rutas de acceso a clases

El servicio derive_classpath lee y combina archivos de configuración individuales en /system/etc/classpaths/ y /apex/*/etc/classpaths/. Cada configuración almacena un mensaje de búfer de protocolo de classpaths.proto en un formato binario de proto. El algoritmo de combinación exacto que determina el orden de las entradas de la ruta de clase se describe en derive_classpath.cpp y puede cambiar con el tiempo.