虽然阿里的AndFix框架已经出来很长时间了,但是还不了解它的同学依然挺多,接下来就跟着我一起来到AndFix的世界里一起看看,如何达到不用重新安装app就可以修复bug。

1.什么是AndFix?

AndFix是阿里巴巴出的一个专门针对Android的热修复框架

,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的。

看看阿里巴巴官方对AndFix的描述:

英文好的可以看官网说明文档(有翻译不妥欢迎指出)

1.AndFix是一个Android库,它是在线解决bugs,而不是重新安装app的一种解决方案。

2.AndFix是Android hot-fix

的缩写

3.AndFix 支持Android的2.3-7.0的版本,支持ARM和X86的处理器,支持Dalvik与ART的运行时,支持32位和64位。

4.AndFix的补丁文件的格式是.apatch

,它是由您自己的服务器分发到客户端解决您的应用程序的错误。

2.AndFix的原理

AndFix的实现原理是方法体的替换

 

 

3.修复过程

 
 

4.获取AndFix库

直接将AndFix AAR添加到您的项目作为编译库。

对于Maven的依赖:

<dependency>

<groupId>com.alipay.euler</groupId>

<artifactId>andfix</artifactId>

<version>0.5.0</version>

<type>aar</type>

</dependency>

对gradle的依赖:

dependencies {

compile 'com.alipay.euler:andfix:0.3.1@aar'

}

5.如何使用AndFix

1.初始化PatchManager

patchManager = new PatchManager(context);

patchManager.init(appversion);//current version

2.加载补丁

patchManager.loadPatch();

你应该尽可能早地加载补丁,通常在你的应用程序初始化阶段加载补丁,例如:在Application.onCreate()

中加载补丁

3.添加补丁

patchManager.addPatch(path);//path of the patch file that was downloaded

当一个新的补丁文件已经下载,,通过调用了addPatch()方法就会立即生效。

6.补丁制作工具

1.下载补丁制作工具

AndFix 给我们提供了一个制作补丁的工具apkpatch

2.使用补丁工具

1.准备两个android apk文件 , 一个是在线的apk文件,另一个是修复bug后的apk文件(两个apk的版本号一样)

2.通过这两个apk文件生成一个补丁文件.apatch

//在补丁的工具文件夹中,打开控制台,并在控制台输入:

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.

3.在控制台中执行上面命令后,在指定的<output>文件夹中后会生成,如下文件:

smali

app-release1-44c095be1acbdd01beed3afd478182f0.apatch

diff.dex

其中app-release1-44c095be1acbdd01beed3afd478182f0.apatch

就是补丁文件。

除了AndFix,还有很多其它非常好用的框架,还有很多东西需要大家自己探索。当然,如果你关注我们,你会收获更多。我们也愿意助你在学习道路上起航扬帆。

作者:可以写但没有必要
链接:https://www.jianshu.com/p/b2f4b4ef9f56
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. javascript中怎样区分元素和节点?
  2. css transform skew变换
  3. C#验证身份证号码
  4. DotNetCore跨平台~Startup类的介绍
  5. Uva(10048),最短路Floyd
  6. makefile生成静态库和动态库
  7. 0603 python 基础02
  8. 解决XCode插件在XCode6.4上失效的办法
  9. python2.x和python3.x的区别
  10. 设计模式的征途—22.中介者(Mediator)模式
  11. Html5 Canvas介绍
  12. HTML&amp;CSS
  13. Java_深度剖析ConcurrentHashMap
  14. MySQL Group Replication-MGR集群
  15. Spring Bean定义配置
  16. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用
  17. EL语言表达式 (一)【语法和特点】
  18. JS-图片控制-动画管理模块
  19. 程序猿CET4和CET6考试攻略
  20. 在头文件中声明class 类 与 include类所在的头文件区别---理解

热门文章

  1. 2017.10.6 国庆清北 D6T1 排序
  2. P3388 【模板】割点(割顶)&amp;&amp; 桥
  3. (3)Angular的开发
  4. 原创:Solr Wiki 中关于Suggester(搜索推荐)的简单解读
  5. IDEA中新建子模块
  6. PIT 编辑器编辑及协同架构说明
  7. Promethues实战-简易教程系列
  8. 三大框架 之 Struts2
  9. docker 访问宿主机网络
  10. Java TreeSet,Collections使用