android AndFix--热补丁框架

今天给大家带来阿里巴巴推出的AndFix框架

首次给出大家这个框架的地址:https://github.com/alibaba/AndFix 对源码比较感兴趣的同学们可以自行研究代码

AndFix介绍

AndFix,全称是Android hot-fix。是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug。支持Android 2.3 到 6.0,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime,补丁文件是以 .apatch 结尾的文件

原理

这里写图片描述

替代方式

AndFix判断java自定义的声明方法是否应该被替代,它在ATR上使用art的替代方法,在X86上使用dalvik的替代方法,加载方式是不同的,对于Dalvik来说,需要改变本地的目标文件,连接成AndFix自己的加载方式,这种方式需要注册回掉;对于ART来说,只需要改变自身的ArtMethod属性来取代它

修复过程

这里写图片描述

使用方式

1.添加AndFix依赖包

compile 'com.alipay.euler:andfix:0.3.1@aar'

2.在application中初始化

patchManager = new PatchManager(getApplicationContext());
        patchManager.init(version);//current version
        patchManager.loadPatch();

这里涉及到一个版本问题,如果版本好相同的情况下,有补丁会去加载,如果版本好不相同的情况下,默认补丁会被删除

3.添加新补丁

patchManager.addPatch(path);//path of the patch file that was downloaded

这个方法最好放在你的补丁已经下载的完成之后,还有一个个人遇到的问题,在这里提醒一下大家,这个补丁的名字不能相同,补丁文件在文件名字相同的情况下,它会直接去加载data/packagename/files/apatch_opt这个目录下的文件,所以不同的补丁要使用不同的名字,并且同一个补丁只会加载一次,加载完了可以删除

生成补丁的工具

官方提供的工具apkpatch

下载解压之后长这样:
这里写图片描述

.bat是留给window用的
.sh是OSX用的

./apkpatch.sh -f new.apk -t old.apk -o output1 -k debug.keystore -p android -a androiddebugkey -e android

-f <new.apk> :新版本
-t <old.apk> : 旧版本
-o <output> : 输出目录
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密码
-a <alias>: keystore 用户别名
-e <alias password>: keystore 用户别名密码

这是我本地使用的命令:
这里写图片描述

两个apk之间的变换都会在这里实现出来,当然只能改变方法,不能改变UI方面的东西

生成这么个东西:
这里写图片描述

上面这个.apatch的文件就是补丁啦!

混淆

-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.alipay.euler.andfix.** { *; }

安全性

下载下来的patch文件,在修复之前会验证,在使用apkpatch工具签名的过程中保证文件的安全性,加载之前先去验证这个文件是否是自己的,之后使用md5解密

待解决问题

其中部分手机(部分小米,华为)不能实现热更新

  • 14
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值