Android 动态链接库隔离

Android 动态链接库隔离

转链接:Android 动态链接库隔离
相关问题:浅谈Android系统编译apk后so文件在dlopen时出现linker权限问题

系统库共享

Treble架构将系统和应用分离,应用理论上只可以访问NDK提供的本地库和应用自带的本地库。但实际上应用也经常需要使用系统库,每个应用都将系统库打包到自己中未免太浪费了。所以Android还提供了应用访问系统库的方法,通过public.libraries.txt设置白名单。

将本地系统库的名字加入到public.libraries.txt,可以开放给应用。本地系统库放置的位置为,

  • /vendor/lib(芯片供应商的 32 位库)和 /vendor/lib64(芯片供应商的 64 位库)
  • /system/lib(设备制造商的 32 位库)和 /system/lib64(设备制造商的 64 位库)

public.libraries.txt存在多个文件,分别代表不同的意义:

  • /vendor/etc/public.libraries.txt(芯片供应商的库)。
  • /system/etc/public.libraries-COMPANYNAME.txt(设备制造商的库),其中 COMPANYNAME 指的是制造商的名称(例如 awesome.company)。如果某些库来自外部解决方案提供商,则可以在设备中包含多个此类 .txt 文件。
  • /system/etc/public.libraries.txt(标准公共本地库),原生代码system/core/rootdir/etc/中的文件,理论上不应该修改。

注意:由设备制造商公开的本地库必须命名为 lib*COMPANYNAME.so,例如 libFoo.awesome.company.so。换句话说,没有公司名称后缀的 libFoo.so 不得公开。库文件名中的 COMPANYNAME 必须与列出库名称的 txt 文件的名称中的 COMPANYNAME 匹配。

从 Android 8.0 开始,供应商的本地库需要遵循以下额外限制,需要进行相应设置:

  1. 必须给供应商的本地库赋予适当的权限,以便应用可以访问。如过有任何应用(包括第三方应用)要求访问一个供应商的本地库,则该库必须在供应商特定的 file_contexts中被标记为same_process_hal_file。例如,设置libnative.so权限以供应用使用,
/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
  1. 库不得依赖(无论是直接依赖,还是通过其依赖项间接依赖)VNDK-SP 库和 LLNDK 库之外的任何系统库。您可以在 development/vndk/tools/definition/tool/datasets/eligible-list–release.csv 中找到 VNDK-SP 库和 LLNDK 库的列表。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值