热修复:在用户无感知的情况下不用发版本就修复线上应用的bug。
andFix:
阿里的热修复框架,可以用来修复方法级别的bug,无法新增字段或者类。使用简单方便,支持Android 2.3到6.0
官方地址:
GitHub - alibaba/AndFix: AndFix is a library that offer hot-fix for Android App.
https://github.com/alibaba/AndFix
1、导入andFix:
dependencies {
compile 'com.alipay.euler:andfix:0.5.0@aar'
}
2、初始化andFix:通常在我们的Application类里初始化
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
//通常在初始化之后就加载所有补丁文件
patchManager.loadPatch();
3、添加新的补丁文件:从自己的服务器获取补丁文件以后加载补丁文件
patchManager.addPatch(path);//path of the patch file that was downloaded
那么补丁文件是什么?又如何生成呢?
1、补丁文件是以.apatch结尾的文件
2、通过使用官方提供的apkpatch工具通过对有bug的apk和修复后的apk文件进行比较后生成的补丁文件
apkpatch工具下载:
apkpatch补丁生成工具
工具的使用:
准备两个apk文件,一个是线上的有bug的apk文件,比如叫old.apk,另一个是本地修复bug后的apk文件,比如叫new.apk
准备好签名文件,使用签名文件是为了防止他人获取到补丁文件以后恶意篡改内容,造成安全性上的问题。
1、生成.apatch文件的命令
usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
-a,--alias <alias> keystore entry alias. //签名文件的别名
-e,--epassword <***> keystore entry password. //签名文件别名的密码
-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文件路径
比如:
生成.apatch文件示例:
使用windows终端执行命令:
.\apkpatch-1.0.3.jar -f .\new.apk -t .\old.apk -k .\andfixtest.jks -p 123456 -a key0 -e 123456 -o output -n study
其中:andfixtest.jks 是我的apk的签名文件,123456是签名文件密码。 key0是签名文件的别名,别名的密码同样是123456
output是补丁文件的所在的文件夹,study是补丁文件名。
运行后结果如下图所示:
生成的文件叫study-**.apatch
另外,当团队的每个成员都修复了自己的bug,可能会产生多个补丁文件,apkpatch工具也可以对这些补丁文件进行合并,使用如下命令即可:
usage: apkpatch -m <apatch_path...> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
-a,--alias <alias> keystore entry alias.
-e,--epassword <***> keystore entry password.
-k,--keystore <loc> keystore path.
-m,--merge <loc...> path of .apatch files.
-n,--name <name> patch name.
-o,--out <dir> output dir.
-p,--kpassword <***> keystore password.
混淆:
-printmapping proguard.map
首先需要生成mapping文件记录混淆规则,之后可以把printmapping 这句话注释掉,每次只使用applymapping。
-applymapping proguard.map
要注意保留下面的内容:
Native方法 ,比如:com.alipay.euler.andfix.AndFix
Annotation,比如:com.alipay.euler.andfix.annotation.MethodReplace
另外需要在ProGuard中添加配置:
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}
demo地址:
GitHub - GodisGod/AndFixTestDemo
https://github.com/GodisGod/AndFixTestDemo
以上就是andFix的简单介绍。