Android 应用热修复工具 AndFix

之前跟大家介绍一个Alibaba的框架dexposed框架,此框架能够动态的从线上完成一些补丁的工作。但是,由于它的性能和兼容性(不支持ART)所以,很多朋友都决定不再研究此框架。

今天,这里我再次给大家介绍一个Alibaba的开源框架——AndFix。和Dexposed一样,此框架一样是为了能够在线的打补丁。即发现了bug之后,通过线上补丁修复本地的逻辑代码的工具库。

原理与Dexposed类似,这里我们不做详解,如果不清楚的童鞋,可以看另两篇文章:
http://blog.csdn.net/yzzst/article/details/47954479
http://blog.csdn.net/yzzst/article/details/47659987

如果你要问我,为什么alibaba内部团队要做两个差不多的东西?
我只能回答,如果你也在大公司干过,你应该知道有一种悲哀叫——KPI。




AndFix的Github地址:https://github.com/alibaba/AndFix

如何使用?
笔者翻译的官方文档,如下:


AndFix

AndFix是一个Android App的在线热补丁框架。使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug。AndFix就是 “Android Hot-Fix”的缩写。

就目前来说,AndFix支持Android 2.3到6.0版本,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。

AndFix 的补丁文件是以 .apatch 结尾的文件。


AndFix原理

AndFix的原理很简单。就是针对项目中原有方法的替换取代工作:

title=

而我们打一个在线的补丁包,也就有了如下的步骤逻辑:

title=


整合项目使用

直接添加 AndFix aar 到项目中的 编译依赖库中。

maven 依赖:

?
1
2
3
4
5
6
<code class = "hljs" xml= "" ><dependency>
     <groupid>com.alipay.euler</groupid>
     andfix</artifactid>
     <version> 0.3 . 0 </version>
     <type>aar</type>
</dependency></code>

或者是Gradle依赖

?
1
2
3
<code class = "hljs" nginx= "" >dependencies {
     compile 'com.alipay.euler:andfix:0.3.0@aar'
}</code>

如何使用

1 . 初始化PatchManager:

?
1
2
<code class = "language-java" hljs= "" >patchManager = new PatchManager(context);
patchManager.init(appversion); //current version</code>

2 . 载入补丁包
越早的载入补丁包越好,通常来说,我们一般都会在自定义的Application中的onCreate方法里面载入补丁包。即:

?
1
<code class = "language-java" hljs= "" >patchManager.loadPatch();</code>

3 . 添加补丁包
新的补丁包,下载后调用addPatch方法添加补丁。这个补丁会立即生效。

?
1
<code class = "language-java" hljs= "" >patchManager.addPatch(path); //path of the patch file that be downloaded</code>

ProGuard混淆设置

确保一些class文件在使用的时候不被proguard所混淆,当然,proguard的混淆配置如下所示:

原生method
?
1
<code avrasm= "" class = "hljs" >com.euler.cloudfix.CloudFix</code>
annotation
?
1
2
3
4
5
<code class = "hljs" scala= "" >com.euler.cloudfix.annotation.MethodReplace
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
     native <methods>;
}</methods></code>

开发使用工具

别以为补丁就是我们直接开发一个apk就好了,制作补丁是需要专门的工具的。这里有一个工具,叫做 apkpatch的工具,用来制作AndFix的补丁。

地址:https://github.com/alibaba/AndFix/raw/master/tools/apkpatch.zip

如何使用该工具

生成.apatch 文件

?
1
2
3
4
5
6
7
<code class = "hljs" haml= "" > usage: apkpatch -f < new > -t <old> -o<output> -k <keystore> -p <***> -a  -e <***>
  -a,--alias      alias.
  -e,--epassword <***>   entry password.
  -f,--from <loc>        new Apk file path.
  -k,--keystore <loc>    keystore path.
  -n,--name <name>       patch name.
  -o,--out </name></loc></loc></alias></alias></keystore></output></old></ new ></code>
output dir. -p,--kpassword <***> keystore password. -t,--to  old Apk file path.

merge .apatch 文件

?
1
2
3
4
5
6
7
<code class = "hljs" haml= "" > usage: apkpatch -m  -k <keystore> -p <***> -a  -e <***>
  -a,--alias      alias.
  -e,--epassword <***>   entry password.
  -k,--keystore <loc>    keystore path.
  -m,--merge <loc...>    path of .apatch files.
  -n,--name <name>       patch name.
  -o,--out </name></loc...></loc></alias></alias></keystore></apatch_path...></code>
output dir. -p,--kpassword <***> keystore password.

运行 sample

import samples/AndFixDemo 到自己的IDE中,设置AndFixDemo 依赖于AndFix(library project or aar)。 build项目,保存编译后的结果为1.apk,安装apk到设备中。 修改com.euler.test.A, 引用com.euler.test.Fix。 build 项目, 保存为 2.apk. 使用apkpatch工具制作一个补丁。 重命名补丁文件为out.apatch,然后将文件拷贝到sd卡中。 运行 1.apk 查看logcat。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值