Extensions SDK

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

Le module SDK Extensions sert à :

  • déterminer le niveau de l'extension SDK de l'appareil ;
  • fournir des API permettant aux applications d'interroger le niveau de l'extension SDK ;
  • (à partir d'Android 12) déterminer les valeurs des BOOTCLASSPATH, DEX2OATBOOTCLASSPATH, et SYSTEMSERVERCLASSPATH variables d'environnement.

Format du module

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

Format du package

Le module SDK Extensions (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 individuels du chemin de classe à partir 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 au début du 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 à l'extension SDK (par exemple, build.version.extensions.r).

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

Dériver le niveau de l'extension SDK

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

Lire le niveau de l'extension SDK

Le module SDK Extensions 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)).

Dériver les chemins de classe

Le service derive_classpath lit et fusionne les 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 du chemin de classe est décrit dans derive_classpath.cpp et peut changer avec le temps.