Android热修复Sophix的使用

这两天花了点时间,了解和使用了下阿里的热修复框架Sophix。

使用起来是简单,高效的,没有什么侵入性代码,完全是傻瓜模式。

缺点就是要收费。

好消息是,你的app只赚了点微不足道的小钱,那么不收你费。如果要收你费了,你应该感到高兴!

SDK稳健接入 - 移动研发平台EMAS - 阿里云

热修复在原理上,有两种:一种是native层修改ArtMethod, 还有就是类加载模式。

修复的内容包括,java代码,so,  资源。

Sophix不支持新增四大组件。

  • 修改ArtMethod

这种模式市面上只有阿里使用。是热部署!

当dex文件加载进内存后, 每一个方法的信息都会在虚拟机内存上有一个对应的ArtMethod对象。只要替换掉这个ArtMethod,就能实现热修复。

下面的代码是Sophix热修复的核心原理。

JNIEXPORT jstring JNICALL
Java_com_study_MainActivity_replaceMethod(JNIEnv *env, jobject thiz, jobject src,
                                                   jobject des) {

   smeth = (art:mirror:ArtMethod*)env->FromReflectedMethod(src);//核心
   dmeth = (art:mirror:ArtMethod*)env->FromReflectedMethod(des);//核心

   memcpy(smeth, dmeth, sizeof(ArtMethod))

}

sizeof(ArtMethod), 不同手机品牌或者型号,有的会魔改ArtMethod内容。导致size不统一。

他们想到了,在手机上动态测定size的方法,因为ArtMethod是以链式的方式存放的,所以相邻两个ArtMethod的地址差值,那就是size。

是不是很简单? 不简单的,还需要解决Java编译特性导致的各种问题。比如方法数增加。

下面这本书是他们团队出的,有详细的介绍:

 深入探索Android热修复原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值