Nível da API do fornecedor

O nível da API do fornecedor se refere à versão da interface com suporte da partição do fornecedor. A interface é bidirecional e descreve a API que a partição do fornecedor fornece à partição do sistema (a camada de abstração de hardware ou interface HAL) e também a API que a partição do fornecedor exige da partição do sistema (o kit de desenvolvedores nativos de baixo nível ou interface do LLNDK).

O nível da API do fornecedor também é usado para determinar os requisitos de software do fornecedor (VSRs, na sigla em inglês), que é uma coleção de requisitos funcionais e não funcionais que o software na partição do fornecedor precisa atender.

O restante desta página explica como as propriedades do sistema são usadas, dependendo da versão do Android, para determinar o nível da API do fornecedor.

Congelamento dos fornecedores

O Android permite que um fornecedor congele a partição do fornecedor em uma versão específica do VSR. O conjunto de recursos que o Android espera da partição do fornecedor é determinado pelo nível da API do fornecedor associado a ela. No momento da execução, o comportamento do software em execução na partição do sistema é ajustado para acomodar o nível da API do fornecedor da partição do fornecedor. Por exemplo, o software na partição do sistema pode não usar novos recursos se eles não tiverem suporte do nível da API da partição do fornecedor.

O congelamento do fornecedor só está disponível se você estiver criando um dispositivo compatível com Android.

Determinar o nível da API do fornecedor (Android 14-QPR3 e mais recentes)

Para o Android 14-QPR3 e versões mais recentes, o nível da API do fornecedor é lançado separadamente, o que significa que o nível da API do SDK e o nível da API do fornecedor estão fora de sincronia.

Devido aos cronogramas de lançamento separados, para o Android 14-QPR3 e versões mais recentes, o nível da API do fornecedor é completamente desvinculado do nível da API do SDK. Para garantir que esse desacoplamento esteja claro, o formato do nível da API do fornecedor é uma data formatada como AAAAMM (ano e mês), enquanto o nível do SDK é um número inteiro.

O Android 14-QPR3 e versões mais recentes contêm as seguintes propriedades do sistema relacionadas ao nível da API do fornecedor (ro.vendor.api_level):

Propriedade do sistema Formato Descrição Configuração inicial
ro.board.api_level AAAAMM O nível da API do fornecedor com suporte do software de um chipset. Essa propriedade é definida para todos os chipsets. Isso é definido automaticamente pelo sistema de compilação.
ro.board.first_api_level AAAAMM O nível da API do fornecedor com que o software de um chipset foi lançado pela primeira vez. Essa propriedade é uma função apenas do chipset e é definida pelos fornecedores de SoC se o chipset de SoC estiver qualificado para congelamento do fornecedor. Após a configuração inicial, ela não pode ser modificada. Os fornecedores de SoC definem essa configuração usando BOARD_SHIPPING_API_LEVEL.
ro.product.first_api_level Número inteiro O nível da API do SDK com que o dispositivo é inicializado inicialmente. Essa propriedade é definida pelo OEM e nunca é atualizada, mesmo após upgrades do SO.
ro.vendor.api_level AAAAMM O nível da API do fornecedor ao qual o dispositivo como um todo precisa se conformar. Descrito após a tabela.
ro.board.api_frozen booleano Essa propriedade é definida como true se o nível da API do fornecedor representado por ro.board.api_level estiver finalizado. Se essa propriedade não for definida, o padrão será false.
ro.llndk.api_level AAAAMM O nível da API do fornecedor no formato AAAAMM que o LLNDK atual na partição do sistema oferece. O LLNDK é compatível com versões anteriores, portanto, qualquer imagem do fornecedor que seja menor ou igual a esse nível da API pode ser atualizada com essa imagem do sistema. Essa propriedade é definida pela partição do sistema.

A propriedade ro.vendor.api_level é derivada de uma das duas maneiras a seguir:

  • Se o chipset se qualificou para o congelamento do fornecedor:

    ro.vendor.api_level = min(
      ro.board.api_level,
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level))
    
  • Se o chipset não estiver sob congelamento de fornecedor:

    ro.vendor.api_level =
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level)
    

O método AVendorSupport_getVendorApiLevelOf() determina o nível correspondente da API do fornecedor de um nível da API do SDK. Por exemplo, AVendorSupport_getVendorApiLevelOf(35), em que 35 é o nível da API do SDK da versão principal do Android em 2024, retorna 202404, que é a data aproximada do Android 14-QPR3 quando o nível da API do fornecedor atual foi definido.

Determinar o nível da API do fornecedor (Android 13)

O nível da API do fornecedor segue o da API do SDK, que é referente à interface do app-OS e é atualizado uma vez por ano quando a nova plataforma Android é lançada no AOSP.

O Android 13 contém as propriedades do sistema abaixo relacionadas ao nível da API do fornecedor (ro.vendor.api_level):

Propriedade do sistema Formato Descrição Configuração inicial
ro.board.first_api_level Número inteiro O nível da API do fornecedor com que o software de um chipset foi lançado pela primeira vez. Essa é uma função exclusiva do chipset e não pode ser modificada por fornecedores de SoC ou OEMs. Essa propriedade é definida apenas para chipsets qualificados para o congelamento do fornecedor O valor é estabelecido definindo BOARD_SHIPPING_API_LEVEL no arquivo device.mk.
ro.board.api_level Número inteiro O nível da API do fornecedor com suporte do software de um chipset. Esta propriedade é definida apenas para os chipsets qualificados para o congelamento de fornecedor. Essa propriedade é definida para todos os chipsets. Inicialmente, o valor dessa propriedade é definido pelo sistema de build como o mesmo valor de ro.board.first_api_level, mas pode ser atualizado se a partição do fornecedor for atualizada.
ro.product.first_api_level Número inteiro O nível da API do SDK com que o dispositivo é inicializado inicialmente. Essa propriedade é definida pelo OEM e nunca é atualizada, mesmo após upgrades do SO.
ro.vendor.api_level Número inteiro O nível da API do fornecedor ao qual o dispositivo como um todo precisa se conformar. Descrito após a tabela.
ro.vndk.version Número inteiro A versão do VNDK para a qual a partição do fornecedor é criada. Essa propriedade é definida pela partição do sistema.
ro.vendor.build.version.sdk Número inteiro O nível da API do SDK da árvore de origem em que a partição do fornecedor foi criada.
ro.vendor.build.version.release Número inteiro A versão da plataforma da árvore de origem em que a partição do fornecedor foi criada.
ro.vendor.build.version.release_or_codename Número inteiro O nome de código da árvore de origem em que a partição do fornecedor foi criada.

A propriedade ro.vendor.api_level é definida automaticamente como o mínimo de ro.board.api_level (ou ro.board.first_api_level se ro.board.api_level não estiver definido) e ro.product.first_api_level.