Extensões do SDK

O módulo "Extensões do SDK" decide o nível do SDK da extensão do dispositivo e fornece APIs para que os apps consultem o nível do SDK da extensão. Esse módulo é atuável, ou seja, ele pode receber atualizações de funcionalidade fora do ciclo normal de lançamento do Android.

As extensões do SDK são responsáveis por:

  • Decidir o nível do SDK de extensão do dispositivo.
  • Fornecimento de APIs para que os apps consultem o nível do SDK da extensão.
  • (A partir do Android 12) Determinação dos valores das variáveis de ambiente BOOTCLASSPATH, DEX2OATBOOTCLASSPATH e SYSTEMSERVERCLASSPATH.

Formato do módulo

O módulo de extensões do SDK (com.android.sdkext) está no formato APEX e está disponível para dispositivos com o Android 11 ou mais recente.

Formato do pacote

O módulo de extensões do SDK (com.google.android.sdkext) está no formato APEX e contém os seguintes componentes:

  • (A partir do Android 12) bin/derive_classpath: um binário nativo executado no início do processo de inicialização do dispositivo. Ele lê arquivos de configuração de classpath individuais do sistema e de outros módulos, os mescla e define a definição das variáveis de ambiente CLASSPATH.

  • bin/derive_sdk: um binário nativo executado no início do processo de inicialização do dispositivo e que lê os metadados de outros módulos para definir propriedades do sistema relacionadas ao SDK da extensão (por exemplo, build.version.extensions.r).

  • javalib/framework-sdkextension.jar: esse arquivo está no bootclasspath que expõe APIs para apps para consultar o nível do SDK da extensão.

Derivar o nível do SDK da extensão

O programa derive_sdk lê metadados armazenados como arquivos protobuf binários no subcaminho etc/sdkinfo.binarypb dentro de cada módulo do APEX. Para detalhes sobre a estrutura do protobuf, consulte o arquivo protobuf.

Nível de leitura do SDK da extensão

O módulo de extensões do SDK expõe uma classe SdkExtensions Java no pacote android.os.ext. Use o método getExtensionVersion(int) para ler a versão de uma extensão do SDK (por exemplo, getExtensionVersion(Build.VERSION_CODES.R)).

Derivar classpaths

O serviço derive_classpath lê e mescla arquivos de configuração individuais em /system/etc/classpaths/ e /apex/*/etc/classpaths/. Cada configuração armazena a mensagem protobuf de classpaths.proto em um formato binário proto. O algoritmo de mesclagem exato que determina a ordem das entradas do caminho de classe é descrito em derive_classpath.cpp e pode mudar com o tempo.