libserial_port.so text relocations 警告弹窗

本文深入探讨了在Android6.0及更高版本中遇到的TEXTREL警告问题,详细解释了这一警告的产生原因,以及如何通过修改源码和使用较新的NDK编译来消除警告。文章提供了具体的解决方案,包括使用readelf命令定位问题所在,并介绍了如何避免文本重定位以增强应用的安全性和性能。

TEXTREL是"文本重定位”的术语"。
在targetSdkVersion>=23 Android 6.0 以上设备上跑debug版本时,出现一下警告日志,当targetSdkVersion<23且使用debug签名的APK运行在高版本系统上(大于6.0)出现以下弹窗

2019-04-26 15:09:45.033 1685-2398/cn.mashang.vscreen W/linker: /data/app/cn.mashang.vscreen-2/lib/arm/libserial_port.so has text relocations. This is wasting memory and prevents security hardening. Please fix.

在这里插入图片描述

修复源码中的text relocations

问题原因,谷歌了一下
libxxx.so: text relocations 这个问题在Android 6.0官方的更新说明中有说到:
Android 6.0官方的更新说明

现已正确实现 dlopen(3) RTLD_LOCAL 标记。请注意,RTLD_LOCAL 是默认值,因此不显式使用 RTLD_LOCAL 的 dlopen(3) 调用将受到影响(除非您的应用显式使用 RTLD_GLOBAL)。使用 RTLD_LOCAL 时,在随后通过调用 dlopen(3) 加载的库中并不能使用这些符号(这与由 DT_NEEDED 条目引用的情况截然不同)。

在之前版本的 Android 上,如果您的应用请求系统加载包含文本重定位信息的共享库,系统会显示警告,但仍允许加载共享库。从此版本开始,如果您的应用的目标 SDK 版本为 23 或更高,则系统会拒绝加载该库。为帮助您检测库是否加载失败,您的应用应该记录 dlopen(3) 失败日志,并在日志中加入 dlerror(3) 调用返回的问题描述文本。要详细了解如何处理文本重定位,请参阅此指南。

参阅此指南 (难以理解)

定位问题

so文件有text relocations问题,用 readelf命令
如果你是macOS,mac os X下没有这两个命令,可以用brew来安装,brew update && brew install binutils ,然后配置环境变量
用法

readelf -a so文件路径 | grep TEXTREL

在这里插入图片描述

TEXTREL表示代码段重定位表地址,PIC的共享对象不会包含任何代码段重定位表。匹配不到TEXTREL则无问题

谷歌的android-serialport-api串口项目的so文件有TEXTREL问题,那采取较新的NDK编译后呢?text relocations 警告没了。

my/android-serialport

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值