使用AndFix实现热修复

AndFix,全称是Android hot-fix。是阿里开源的一个Android热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug。支持Android 2.3 到 6.0。

01

原理简介

apkpatch将两个apk做一次对比,然后找出不同的部分。可以看到生成的apatch了文件,后缀改成zip再解压开,里面有一个dex文件。通过jadx查看一下源码,里面就是被修复的代码所在的类文件,这些更改过的类都加上了一个_CF的后缀,并且变动的方法都被加上了一个叫@MethodReplace的annotation,通过clazz和method指定了需要替换的方法。

然后客户端sdk得到补丁文件后就会根据annotation来寻找需要替换的方法。最后由JNI层完成方法的替换。

02

多次加载补丁

如果本地保存了多个补丁,那么AndFix会按照补丁生成的时间顺序加载补丁。具体是根据.apatch文件中的PATCH.MF的字段Created-Time。

03

使用

1、添加依赖和混淆

2、初始化PatchManager

在Application.onCreate() 中添加以下代码

可以用这句话获取appversion

String appversion= getPackageManager().getPackageInfo(getPackageName(), 0).versionName; 注意:每次appversion变更都会导致所有补丁被删除,如果appversion没有改变,则会加载已经保存的所有补丁。

3、在合适的地方下载补丁

可配合接口使用,先请求是否有补丁需要下载 代码略

4、加载补丁

注意:加载补丁应在下载完成后加载

这样就ok了

04

补丁生成

使用apkpatch工具生成apatch补丁文件

1、将apkpatch.zip解压,如图:

2、将新版apk、旧版apk、keystore放入上述文件夹中

3、命令行下进入该目录

4、使用命令行生成补丁

5、apatch文件生成在output中

附:生成补丁 语法

原文发布于微信公众号 - Android机动车(JsAndroidClub)

原文发表时间:2017-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶架构师

理解数据库连接池底层原理之手写实现

数据库连接池的基本思想是:为数据库连接建立一个“缓冲池”,预先在池中放入一定数量的数据库连接管道,需要时,从池子中取出管道进行使用,操作完毕后,在将管道放入池子...

11630
来自专栏xcywt

《Linux命令行与shell脚本编程大全》第十五章 呈现数据

15.1 理解输入和输出 现在知道两种显示脚本输出的方法 1)在显示器屏幕上显示 2)将输出文件重定向到文件中 15.1.1 标准文件描述符 Linux系统将每...

22960
来自专栏知识分享

17-GPRS(Air202)串口

{data:switch,bit:1,status:0}   控制GPIO5输出低电平

9710
来自专栏坚毅的PHP

flask源码阅读笔记

2011-10-24 flask是个微型web框架,基于werkzeug提供的基本wsgi和routing功能,扩展出比较完善的server view db访...

35850
来自专栏快乐八哥

Netbeans配置Xdebug

1.进入 http://xdebug.org/wizard.php 页面,新建一个php页面,里面输入 echo phpinfo(); 然后在运行的页面,复制页...

23370
来自专栏linux运维学习

linux学习第五十二篇: exportfs命令,NFS客户端问题,FTP介绍,使用vsftpd搭建ftp服务

exportfs命令 常用选项 -a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 以下操作在服务端上 vim /et...

22480
来自专栏北京马哥教育

Linux有问必答:怎么用CheckInstall从源码创建一个RPM或DEB包

如果你已经从它的源码运行“make install”安装了linux程序。想完整移除它将变得真的很麻烦,除非程序的开发者在Makefile里提供了uninsta...

38940
来自专栏魏艾斯博客www.vpsss.net

2018 年 6 月 wordpress 最新漏洞及解决办法

24660
来自专栏jeremy的技术点滴

nginx使用备忘

315110
来自专栏陈仁松博客

.net core 丢失 api-ms-win-crt-runtime-l1-1-0.dll

今天在服务器上安装完.net core,执行的时候发现提示丢失api-ms-win-crt-runtime-l1-1-0.dll写下解决过程给大家来参考 api...

46480

扫码关注云+社区

领取腾讯云代金券