AndFix简介
AndFix,全称是 Android hot-fix。是阿里开源的一个Android热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug,支持Android 2.3 到 6.0。
GitHub源码
AndFix使用
使用方法
在build.gradle中添加依赖:
1 | compile 'com.alipay.euler:andfix:0.5.0@aar' |
添加读取SDcard权限
1 | <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> |
Application:
1 | public class MainApplication extends Application { |
这里通过一个测试类来验证,修复之前:
1 | public class Test { |
修复之后:
1 | public class Test { |
把获得的字符串现实在一个TextView
上面。
生成Patch文件
使用工具apkpatch-1.0.3来生成patch文件,这个工具可以在这里下载。
用法:
1 | usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***> |
原理:根据两个apk包,一个是线上已经发布的包,另外一个是新的修复bug的包,生成一个差异文件,就是所谓的补丁文件即patch文件。
根据下面命令生成一个.patch文件1
2./apkpatch.sh -f new.apk -t old.apk -o out.apatch -k debug.keystore -p android -a androiddebugkey -e android
add modified Method:Ljava/lang/String; getString() in Class:Lcom/android/hq/andfixtest/Test;
会在当前目录下面生成out.apatch目录,目录中.apatch后缀的文件就是我们需要的patch文件。
验证
进入目录将.apatch文件重命名后copy到手机中。先安装old.apk,运行,显示There is a bug!然后再将patch文件copy到sdcard,重启应用显示Bug has been fixed!测试成功!
之后应用会把patch放在/data/data/*/files/apatch,sdcard目录下面的删除掉就可以了。
遇到的错误
File too short to be a zip file
1 | 01-19 17:16:16.138 9508 9508 D AndFix : vm is: art , apilevel is: 23 |
加上读取SDCard权限,就不报这个错误了
1 | <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> |
open failed: EISDIR
1 | 01-20 09:54:50.351 25113 25113 D MainApplication: inited. |
遇到这个错误是你要把out.apatch目录下面的patch文件copy到sdcard,而不是out.apatch整个目录。