O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Namespaces para bibliotecas nativas

O Android 7.0 introduziu namespaces para bibliotecas nativas para limitar a visibilidade da API interna e resolver situações em que os aplicativos usam bibliotecas de plataforma acidentalmente em vez de suas próprias. Veja a melhor estabilidade com restrições Símbolo Privada C / C ++ no Android 7.0 Desenvolvedores Android blog para mudanças específicas da aplicação.

Arquitetura

No Android 7.0 e superior, as bibliotecas do sistema são separadas das bibliotecas de aplicativos.

Namespaces para bibliotecas nativas

Figura 1. Os espaços de nomes para bibliotecas nativas

Os namespaces para bibliotecas nativas evitam que os aplicativos usem APIs nativas de plataforma privada (como foi feito com OpenSSL). Ele também remove situações em que aplicativos acidentalmente usam bibliotecas da plataforma em vez de seu próprio (como testemunhado com libpng ). É difícil para as bibliotecas de aplicativos usarem bibliotecas internas do sistema por acidente (e vice-versa).

Adicionar bibliotecas nativas adicionais

Além das bibliotecas nativas públicas padrão, os fornecedores de silício (a partir do Android 7.0) e os fabricantes de dispositivos (a partir do Android 9) podem optar por fornecer bibliotecas nativas adicionais acessíveis aos aplicativos, colocando-as nas respectivas pastas de biblioteca e listando-as explicitamente em .txt arquivos.

As pastas da biblioteca são:

  • /vendor/lib (para 32 bits) e /vendor/lib64 (de 64 bits) para as bibliotecas a partir de fornecedores de silício
  • /system/lib (para 32 bits) e /system/lib64 (de 64 bits) para as bibliotecas a partir de fabricantes de dispositivos

Os arquivos .txt são:

  • /vendor/etc/public.libraries.txt para as bibliotecas a partir de fornecedores de silício
  • /system/etc/public.libraries-COMPANYNAME.txt para as bibliotecas a partir de fabricantes de dispositivos, onde COMPANYNAME refere-se a um nome do fabricante (tal como awesome.company ). COMPANYNAME deve coincidir com [A-Za-z0-9_.-]+ ; caracteres alfanuméricos, _, . (ponto) e -. É possível ter vários desses arquivos .txt em um dispositivo se algumas bibliotecas forem de provedores de solução externos.

Bibliotecas nativas no system partição que são tornadas públicas pelos fabricantes de dispositivos deve ser nomeado lib*COMPANYNAME.so , por exemplo, libFoo.awesome.company.so . Em outras palavras, libFoo.so sem o sufixo o nome da empresa não deve ser tornada pública. O COMPANYNAME no nome do arquivo de biblioteca deve corresponder com a COMPANYNAME no nome do arquivo txt em que o nome da biblioteca é listado.

Bibliotecas nativas que fazem parte do AOSP NÃO DEVEM ser tornadas públicas (exceto as bibliotecas nativas públicas padrão que são públicas por padrão). Apenas as bibliotecas adicionais adicionadas por fornecedores de silício ou fabricantes de dispositivos podem ser disponibilizadas para aplicativos.

A partir do Android 8.0, as bibliotecas públicas do fornecedor têm as seguintes restrições adicionais e configurações necessárias:

  1. A biblioteca nativa do fornecedor deve ser devidamente rotulada para que possa ser acessada pelos aplicativos. Se o acesso for exigida por quaisquer aplicativos (incluindo aplicativos de terceiros), a biblioteca deve ser rotulado como same_process_hal_file em um específico do fornecedor file_contexts arquivo da seguinte forma:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    onde libnative.so é o nome da biblioteca nativa.
  2. A biblioteca, direta ou transitivamente por meio de suas dependências, não deve depender de outras bibliotecas do sistema além das bibliotecas VNDK-SP e LLNDK. Localize a lista de bibliotecas VNDK-SP e LLNDK em development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv .

Atualizar aplicativos para não usar bibliotecas nativas não públicas

Este recurso está habilitado apenas para aplicativos destinados à versão 24 ou posterior do SDK; para compatibilidade com versões anteriores, ver Tabela 1. O que esperar se o seu aplicativo está ligando contra bibliotecas nativas privadas . A lista de bibliotecas nativas Android acessíveis aos aplicativos (também conhecidas como bibliotecas nativas públicas) está listada na seção 3.1.1 do CDD. Os aplicativos destinados a 24 anos ou mais e que usam qualquer biblioteca não pública devem ser atualizados. Veja NDK Apps Linking para bibliotecas da plataforma para mais detalhes.

Atualizar aplicativos para suas dependências de biblioteca nativa

Aplicações que alvo SDK versão 31 (Android 12) ou superior deve especificar explicitamente as suas dependências de bibliotecas compartilhadas nativas usando a <uses-native-library> tag no manifesto do aplicativo. Se alguma parte da biblioteca solicitada não existir no dispositivo, o aplicativo não está instalado. Quando os aplicativos são instalados, eles são fornecidos com apenas as bibliotecas compartilhadas nativas que eles solicitados. Isso significa que os aplicativos não podem acessar bibliotecas nativas compartilhadas que não aparecem no manifesto do aplicativo.