AndFix应用案例接入过程
AndFix是阿里巴巴支付宝团队推出的热修复project。利用这个功能我们交付给用户的版本不再是覆水难收了,具备热修复的能力。
1、demo演示和说明
- 文件清单列表
下载文件解压后,目录文件清单如下,因为patch文件路径是hardcode在/sdcrad/out.patch,使用时确保放在这个路径。
目录下文件 | 介绍 | 操作说明 |
---|---|---|
/APK/app-release.apk | 线上使用着的apk(有bug存在) | 请安装到手机上 |
/APK/app-release_fix.apk | 修改bug后签名打包的apk | 不用安装,生成patch时用到 |
/apatchtools/apkpatch.sh | 生成patch工具类 | 使用下面接入步骤的命令即可生成.apatch文件到指定目录 |
/apatch/out.apatch | fixbug后生成的patch文件 | 请放在 /sdcrad/out.patch |
sourcecode | 源码 | 如果要修改apatch指定路径可以修改源码演示 |
2、接入步骤
一、配置 gradle依赖
dependencies { compile 'com.alipay.euler:andfix:0.3.1@aar'}
- 1 . 初始 PatchManager:
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
- 2 . 加载 patch. 选择尽早的时机做加载,such as application.oncreate():
patchManager.loadPatch();
- 3 . 加载 patch. 下载path完毕后即可加载patch
//path of the patch file that be downloaded
patchManager.addPatch(path);
二、ProGuard
- Andfix使用到的native方法类
com.alipay.euler.andfix.AndFix
- 注解保留
com.alipay.euler.andfix.annotation.MethodReplace
- 添加混淆文件声明
-keep class * extends java.lang.annotation.Annotation-keepclasseswithmembernames class * { native <methods>;}
三、使用生成patch工具类命令
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.
-k,--keystore <loc> keystore path.
-n,--name <name> patch name.
-o,--out <dir> output dir.
-p,--kpassword <***> keystore password.
-t,--to <loc> old Apk file path.
使用举例:(win环境下对应修改路径也是一样的)
./apkpatch.sh -f /Users/e0uoq/AndfixDemo2/app-release.apk -t /Users/e0uoq/AndfixDemo2/app/app-release.apk -o /Users/e0uoq/andfixpatch -k /Users/e0uoq/andfixkey.jks -p andfix_key -a andfixsign -e andfix_sign
此外还提供了apatch合并的命令,将多个apatch合并为一个
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.
下一节继续介绍:实现原理核心代码详解(davlik部分)
ps:后面补上github地址。
网友评论