Extensions SDK

Le module Extensions SDK détermine le niveau du SDK d'extension de l'appareil et fournit des API permettant aux applications d'interroger le niveau du SDK d'extension. Ce module est mis à jour, ce qui signifie qu'il peut recevoir des mises à jour de fonctionnalités en dehors du cycle de publication normal d'Android.

Les extensions de SDK sont responsables des éléments suivants:

  • Déterminer le niveau du SDK de l'extension de l'appareil.
  • Fournir des API pour que les applications interrogent le niveau du SDK de l'extension
  • (À partir d'Android 12) Détermination des valeurs pour les variables d'environnement BOOTCLASSPATH, DEX2OATBOOTCLASSPATH et SYSTEMSERVERCLASSPATH.

Format du module

Le module Extensions du SDK (com.android.sdkext) est au format APEX et est disponible pour les appareils exécutant Android 11 ou une version ultérieure.

Format du package

Le module Extensions du SDK (com.google.android.sdkext) est au format APEX et contient les composants suivants:

  • (À partir d'Android 12) bin/derive_classpath: binaire natif qui s'exécute au début du processus de démarrage de l'appareil. Il lit les fichiers de configuration de chemin d'accès au cours du système et d'autres modules, les fusionne et définit la définition des variables d'environnement CLASSPATH.

  • bin/derive_sdk: binaire natif qui s'exécute tôt dans le processus de démarrage de l'appareil et lit les métadonnées d'autres modules pour définir les propriétés système liées au SDK d'extension (par exemple, build.version.extensions.r).

  • javalib/framework-sdkextension.jar: ce fichier se trouve sur le bootclasspath qui expose les API aux applications pour interroger le niveau du SDK de l'extension.

Obtenir le niveau du SDK de l'extension

Le programme derive_sdk lit les métadonnées stockées sous forme de fichiers protobuf binaires dans le sous-chemin etc/sdkinfo.binarypb à l'intérieur de chaque module APEX. Pour en savoir plus sur la structure protobuf, consultez le fichier protobuf.

Afficher le niveau du SDK de l'extension

Le module Extensions du SDK expose une classe Java SdkExtensions dans le package android.os.ext. Utilisez la méthode getExtensionVersion(int) pour lire la version d'une extension SDK (par exemple, getExtensionVersion(Build.VERSION_CODES.R)).

Établir les classpaths

Le service derive_classpath lit et fusionne des fichiers de configuration individuels dans /system/etc/classpaths/ et /apex/*/etc/classpaths/. Chaque configuration stocke le message protobuf de classpaths.proto dans un format binaire proto. L'algorithme de fusion exact qui détermine l'ordre des entrées de classpath est décrit dans derive_classpath.cpp et peut changer au fil du temps.