Android本地库命名空间
SegmentFault博客
2月 ago
Android 7.0 推出了本地库的命名空间,其目的是限制内部 API 可见性,并解决应用在使用平台库时意外终止的问题。本地库命名空间的架构如下图所示,
从架构上可以看出:
- 系统库与应用库被分离开来,彼此不能交叉使用。
- 系统进程和应用都可以访问NDK库。
- 应用很可能使用与系统库同名的私有库,这种设计避免了应用使用错误库而导致的意外。
但是,应用也经常需要使用系统库,每个应用都将系统库打包到自己中未免太浪费了。所以Android还提供了应用访问系统库的方法,通过public.libraries.txt设置白名单。
本地系统库由芯片供应商和设备制造商提供,它们放置的位置为,
/vendor/lib
(芯片供应商的 32 位库)和/vendor/lib64
(芯片供应商的 64 位库)/system/lib
(设备制造商的 32 位库)和/system/lib64
(设备制造商的 64 位库)
将本地系统库的名字加入到public.libraries.txt,就可以开放给应用来使用。public.libraries.txt存在多个文件,分别为:
/vendor/etc/public.libraries.txt
(芯片供应商的库)。/system/etc/public.libraries-COMPANYNAME.txt
&#