原生库的命名空间

Android 7.0 推出了针对原生库的命名空间,旨在限制内部 API 可见性,并解决应用在使用平台库(而非它们自己的库)时意外终止的问题。请参阅通过 Android 7.0 中的私有 C/C++ 符号限制提升稳定性这篇 Android 开发者博文,了解针对应用的更改。

架构

这项更改会将系统库与应用库分离开来,这样可以极大地避免意外使用内部系统库(反之亦然)。

原生库的命名空间

图 1. 原生库的命名空间

原生库的命名空间可防止应用使用私有平台的原生 API(例如使用 OpenSSL)。它还可以避免应用在使用平台库(而非它们自己的库)时出现意外终止的情况(如使用 libpng 时)。

添加其他原生库

除了标准的公共原生库之外,供应商还可以选择提供可供应用访问的其他原生库,方法是将它们放在 /vendor 库文件夹(如果是 32 位的库,则为 /vendor/lib;如果是 64 位的库,则为 /vendor/lib64)下,并将其列于 /vendor/etc/public.libraries.txt

将应用更新为不使用非公共原生库

该功能仅适用于 SDK 版本为 24 或更高版本的应用;要了解向后兼容性,请参阅表 1. 当您的应用链接到非公共原生库时会发生什么情况。可供应用访问的 Android 原生库(又称为公共原生库)列表列于 CDD 部分 3.1.1。适用于版本 24 或更高版本且使用任何非公共库的应用应进行更新。如需了解详情,请参阅链接到平台库的 NDK 应用