简介
1、AndFix是一个Android App的在线热补丁框架。使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug。AndFix就是 “Android Hot-Fix”的缩写。
2、就目前来说,AndFix支持Android 2.3到6.0版本,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。
3、AndFix 的补丁文件是以 .apatch 结尾的文件。
Demo
需要下载服务端的补丁,可参考该demo
可参考这篇文章实现本地sd卡中模拟热更新,以下可通过该demo实现
推荐篇文章,我觉得写得很详细,链接
实现
1、配置gradle,使用AndFix
compile 'com.alipay.euler:andfix:0.3.1@aar'`
2、在proguard-rules.pro中设置混淆文件
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}
3、添加so包(之前没加报错了。。。这步待定,其他人没说要加。。。)
4、添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
5、代码编写,打包
编写的代码:这个随便啦,可以在MainActivity里弄两个显示不一样的Toast,就ok了,如
private void toast()
{
Toast.makeText(this, "this is new apk", Toast.LENGTH_SHORT).show();
}
这里涉及到两个概念:
- 宿主apk——已经发布在应用市场上,有bug并且需要修复的apk;
- 补丁apk——在本地开发的,修复了bug的apk;
我们使用apkpatch,原理是用Java的自定义注解来判断一个方法是否应该被替换,如果有更改,会生成补丁。
6、生成补丁
通过cmd进入控制台,进入apkpatch目录
用apkpatch的命令生成补丁,方法如下
usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
-a,--alias <alias> keystore entry alias. 给出keyStrore的alias
-e,--epassword <***> keystore entry password. 输出KeyStore的密码
-f,--from <loc> new Apk file path. 补丁apk
-k,--keystore <loc> keystore path. 给出keyStore的路径
-n,--name <name> patch name. 补丁名,可以不指定
-o,--out <dir> output dir. 生成的补丁放入的路径
-p,--kpassword <***> keystore password.
-t,--to <loc> old Apk file path.给出宿主apk
然后到生成补丁的目录中,找到生成的patch文件,重命名patch文件
7、模拟实现热修复
先在手机上安装宿主apk,打开,此时实现的还是旧的方法。
关闭手机上的该应用进程
然后再sd卡的指定目录中放入生成的patch。
打开app,实现热更新