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 acidentalmente acabam usando bibliotecas de plataforma em vez de suas próprias. Consulte a postagem do blog Aprimorando a estabilidade com restrições de símbolo C / C ++ privadas no Android 7.0 Android Developers para alterações específicas do aplicativo.

Arquitetura

A mudança separa as bibliotecas do sistema das bibliotecas do aplicativo e torna difícil o uso acidental de bibliotecas internas do sistema (e vice-versa).

Namespaces para bibliotecas nativas

Figura 1. Namespaces 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 os aplicativos acidentalmente acabam usando bibliotecas de plataforma em vez de suas próprias (como testemunhado com libpng ).

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 (para 64 bits) para bibliotecas de fornecedores de silício
  • /system/lib (para 32 bits) e /system/lib64 (para 64 bits) para bibliotecas de fabricantes de dispositivos

Os arquivos .txt são:

  • /vendor/etc/public.libraries.txt para bibliotecas de fornecedores de silício
  • /system/etc/public.libraries-COMPANYNAME.txt para bibliotecas de fabricantes de dispositivos, onde COMPANYNAME se refere a um nome do fabricante (como awesome.company ). COMPANYNAME deve corresponder a [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 na partição do system que são tornadas públicas pelos fabricantes de dispositivos DEVEM ser nomeadas lib*COMPANYNAME.so , por exemplo, libFoo.awesome.company.so . Em outras palavras, libFoo.so sem o sufixo do nome da empresa NÃO DEVE ser tornado público. O COMPANYNAME no nome do arquivo da biblioteca DEVE corresponder ao COMPANYNAME no nome do arquivo txt no qual o nome da biblioteca está 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 exigido por qualquer aplicativo (incluindo aplicativos de terceiros), a biblioteca deve ser rotulada como same_process_hal_file em um arquivo file_contexts específico do file_contexts como segue:
    /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. A lista de bibliotecas VNDK-SP e LLNDK pode ser encontrada em development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv relevant-list- 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, consulte a Tabela 1. O que esperar se seu aplicativo estiver vinculado a 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. Consulte NDK Apps vinculados a bibliotecas de plataforma para obter mais detalhes.