Relinker解惑

原创 2015年11月20日 18:57:23
Relink是什么?
Relink是一个加载Android so文件(shared library)的一个库。

为什么要使用Relink库?
载入so库的传统做法是使用
System.loadLibrary(library);
但是有时会出现UnsatisfiedLinkError,Relink库能大幅减小报错的概率

出现UnsatisfiedLinkError的原因?
发布出去的产品,出现这个错误多数都是找不到so文件。
常见的找不到so文件的原因
1. 产品打包时出问题,没有包括相关的so文件。-------这只能在流程上加以规范。
2. app为了缩小体积,针对cpu平台打包对应的so文件。比如针对arm设备的发布包只打包arm类别的so文件,当mips的设备使用这种发布包时,就有这样的异常。-----目前有些用户并不懂得选择cpu类型,只能是应用商店来处理吧。当然我自己也有个想法,就是app安装之后,知道了设备具体类型,即时从网络下载对应的so文件。
3. Android PackageManager的一个缺陷,升级产品时,so文件没成功拷贝。------这个就是 Relinker 想要解决的问题。

怎么使用Relinker库?
加入Relink库到工程中,使用
ReLinker.loadLibrary(context, "mylibrary")
代替
System.loadLibrary("mylibrary");

代码
https://github.com/KeepSafe/ReLinker

实现思路
加载so文件时却找不到相关的so文件,Relinker会尝试从apk中拷贝so库到/data/data/myPackage/libs 目录,修改其读写权限。

参考
https://medium.com/keepsafe-engineering/the-perils-of-loading-native-libraries-on-android-befa49dce2db
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Realm 引用多个库的jni架构平台支持冲突的问题

因为原来的工程里面的.so库,只有armeabi,加入Realm库后,引起冲突 log如下: java.lang.UnsatisfiedLinkError: com.android.tools.f...

Android dlopen failed: has text relocations

问题apk加载so时,产生has text relocations错误。 经过测试发现和targetSdkVersion有关,这个问题出现在加载so时,编译时sdk小于23 也就是android6.0...

Android开发6.0出现java.lang.UnsatisfiedLinkError...xxx.so has text relocations

有人反馈说app在6.0上面等不进去,点击就会出错,后来我用了一台android6.0的系统手机测试,发现出现了java.lang.UnsatisfiedLinkError...xxx.so has ...

IT学生解惑真经(计算机专业学生必看的)

非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。 --------韩愈《师说》  在校的IT学生有几百万都在为如何如何学习才能找到工作、融入社会而迷惑我们需要的不是灵丹妙药而是一本让你少走几年...

CFNetwork解惑系列(一)是否要在kCFStreamEventHasBytesAvailable时读取所有数据

本次话题来自apple邮件列表《Must you read all you can on kCFStreamEventHasBytesAvailable?》 我们知道非block的CFStream...
  • Mamong
  • Mamong
  • 2015年03月22日 08:43
  • 1050

JDBC解惑(一) 之 Connection创建

问题: 最近接触到jdbc,我有个疑问,建立连接的时候调用的都是接口,那么接口的方法是怎么实现的呢? 比如声明: Connection con; Statement sql; Resul...

为您解惑:HTML5中使用MathML数学公式的简单讲解..........

HTML5 的 HTML 语法允许我们在文档内使用 ... 标签应用 MathML 元素。 部分MathML 元素如下: .........   用于设置其包裹的最终表达式的样式。 如:.....

解惑——iOS中成员变量和属性区别

一篇文章告诉你到底怎么区别iOS成员变量和属性的前世今生

java中将数组转换为集合,不能进行增删操作解惑

java中我们经常会使用Arrays.asList(数组);将数组转换为List类型,但是却不能对转换后的List进行增删的解释。...

Kafka Consumer端的一些解惑

最近一直忙着各种设计和文档,终于有时间来更新一点儿关于kafka的东西。之前有一篇文章讲述的是kafka Producer端的程序,也就是日志的生产者,这部分比较容易理解,业务系统将运行日志或者业务日...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Relinker解惑
举报原因:
原因补充:

(最多只允许输入30个字)