Extensões do SDK

O módulo de extensões do SDK decide o nível do SDK de extensão do dispositivo e fornece APIs para que os apps consultem esse nível. Esse módulo pode ser atualizado, 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 de extensão.
  • (A partir do Android 12) Determinar os valores das variáveis de ambiente BOOTCLASSPATH, DEX2OATBOOTCLASSPATH e SYSTEMSERVERCLASSPATH.

Formato do módulo

O módulo SDK Extensions (com.android.sdkext) está no formato APEX e está disponível para dispositivos com Android 11 ou mais recente.

Formato do pacote

O módulo SDK Extensions (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, mescla-os e define a definição de variáveis de ambiente CLASSPATH.

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

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

Derivar o nível do SDK de extensão

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

Ler o nível do SDK de extensão

O módulo SDK Extensions 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 uma mensagem protobuf de classpaths.proto em um formato binário proto. O algoritmo exato de mesclagem que determina a ordem das entradas do classpath é descrito em derive_classpath.cpp e pode mudar com o tempo.