插件化学习笔记四:热修复框架andFix使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_31093133/article/details/82421567

热修复:在用户无感知的情况下不用发版本就修复线上应用的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文件路径

比如:
andFix

生成.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是补丁文件名。

andFix

运行后结果如下图所示:
andFix
andFix
生成的文件叫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的简单介绍。

猜你喜欢

转载自blog.csdn.net/baidu_31093133/article/details/82421567