Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Espacios de nombres para bibliotecas nativas

Android 7.0 introdujo espacios de nombres para bibliotecas nativas para limitar la visibilidad de la API interna y resolver situaciones en las que las aplicaciones terminan accidentalmente usando bibliotecas de plataforma en lugar de las suyas. Consulte la publicación de blog Mejora de la estabilidad con restricciones de símbolos C / C ++ privados en Android 7.0 para desarrolladores de Android para conocer los cambios específicos de la aplicación.

Arquitectura

El cambio separa las bibliotecas del sistema de las bibliotecas de aplicaciones y dificulta el uso de las bibliotecas internas del sistema por accidente (y viceversa).

Espacios de nombres para bibliotecas nativas

Figura 1. Espacios de nombres para bibliotecas nativas

Los espacios de nombres para bibliotecas nativas evitan que las aplicaciones utilicen API nativas de plataforma privada (como se hizo con OpenSSL). También elimina situaciones en las que las aplicaciones terminan accidentalmente usando bibliotecas de plataforma en lugar de las suyas propias (como se vio con libpng ).

Agregar bibliotecas nativas adicionales

Además de las bibliotecas nativas públicas estándar, los proveedores de silicio (a partir de Android 7.0) y los fabricantes de dispositivos (a partir de Android 9) pueden optar por proporcionar bibliotecas nativas adicionales accesibles a las aplicaciones colocándolas en las carpetas de la biblioteca respectiva y enumerándolas explícitamente en .txt archivos.

Las carpetas de la biblioteca son:

  • /vendor/lib (para 32 bits) y /vendor/lib64 (para 64 bits) para bibliotecas de proveedores de silicio
  • /system/lib (para 32 bits) y /system/lib64 (para 64 bits) para bibliotecas de fabricantes de dispositivos

Los archivos .txt son:

  • /vendor/etc/public.libraries.txt para bibliotecas de proveedores de silicio
  • /system/etc/public.libraries-COMPANYNAME.txt para bibliotecas de fabricantes de dispositivos, donde COMPANYNAME refiere al nombre del fabricante (como awesome.company ). COMPANYNAME debe coincidir con [A-Za-z0-9_.-]+ ; caracteres alfanuméricos, _, . (punto) y -. Es posible tener varios archivos .txt de este tipo en un dispositivo si algunas bibliotecas son de proveedores de soluciones externos.

Las bibliotecas nativas en la partición del system que los fabricantes de dispositivos hacen públicas DEBEN llamarse lib*COMPANYNAME.so , por ejemplo, libFoo.awesome.company.so . En otras palabras, libFoo.so sin el sufijo del nombre de la empresa NO DEBE hacerse público. El COMPANYNAME en el nombre del archivo de la biblioteca DEBE coincidir con el COMPANYNAME en el nombre del archivo txt en el que aparece el nombre de la biblioteca.

Las bibliotecas nativas que forman parte de AOSP NO DEBEN hacerse públicas (excepto las bibliotecas nativas públicas estándar que son públicas de forma predeterminada). Solo las bibliotecas adicionales agregadas por los proveedores de silicio o los fabricantes de dispositivos pueden ser accesibles para las aplicaciones.

A partir de Android 8.0, las bibliotecas públicas de proveedores tienen las siguientes restricciones adicionales y configuraciones necesarias:

  1. La biblioteca nativa del proveedor debe estar correctamente etiquetada para que las aplicaciones puedan acceder a ella. Si alguna aplicación requiere acceso (incluidas las aplicaciones de terceros), la biblioteca debe etiquetarse como same_process_hal_file en un archivo file_contexts específico del file_contexts la siguiente manera:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    donde libnative.so es el nombre de la biblioteca nativa.
  2. La biblioteca, ya sea directa o transitivamente a través de sus dependencias, no debe depender de bibliotecas del sistema distintas de las bibliotecas VNDK-SP y LLNDK. La lista de bibliotecas VNDK-SP y LLNDK se puede encontrar en development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv .

Actualización de aplicaciones para que no utilicen bibliotecas nativas no públicas

Esta función está habilitada solo para aplicaciones destinadas a la versión 24 o posterior del SDK; para obtener compatibilidad con versiones anteriores, consulte la Tabla 1. Qué esperar si su aplicación se vincula con bibliotecas nativas privadas . La lista de bibliotecas nativas de Android a las que pueden acceder las aplicaciones (también conocidas como bibliotecas nativas públicas) se incluye en la sección 3.1.1 del CDD. Deben actualizarse las aplicaciones destinadas a 24 años o más y que utilicen bibliotecas privadas. Consulte Aplicaciones del NDK vinculadas a bibliotecas de plataforma para obtener más detalles.