相比知道热修复的童学,对基本原理应该有所了解吧,这边不加以累诉
制作补丁过程
工具下载:apkpatch
(https://raw.githubusercontent.com/alibaba/AndFix/master/tools/apkpatch-1.0.3.zip)
文件准备:一个存在Bug或者原始的Apk(old.apk)、一个修改后的Apk(new.apk)、一 个签名文件(例如:demo.jks)。即可
1.1 .1签名文件生成
Android Studio制作签名文件步骤:Build->Generate Singned Apk 如图:

点击Create new..

填写完成后,点击ok,回到Generate Singned Apk界面,点击next

在Build Type选择构建类型release。选择Finish这样就生成了签名文件。
APK Destination Folder : apk目标文件夹
Build Type : 构建类型
release是发布版本用的签名文件
debug是debug用的签名文件
1.1.2配置gradle让APP自动签名
1 . 点击Project Structure


点击OK,完成配置,项目加载完成后

2.生成补丁
打开cmd ->进入apkpatch位置(cd /d D:\software\apkpatch-1.0.3)->运行
apkpatch -f new.apk -t old.apk -o outApk -k demo.jks -p xxxxxx -a key -e xxxxx

-f Bug修改后的Apk
-t Bug未修改Apk
-o 输出位置
-k 签名文件位置
-p 签名文件密码
-a 别名
-e 别名密码

将生成的new-86112f4778c67a620082b737ae673830.apatch补丁重命名为Apk.apatch

3.集成AndFix
AndFix执行的原理是实现方法体的替换,如下图所示(该图片来自AndFix github介绍):

3.1:添加依赖
dependencies {
compile 'com.alipay.euler:andfix:0.4.0@aar'
}
3.1初始化 PatchManager
patchManager = new PatchManager(context);
patchManager.init("1.0");//current version
3.2 Load patch 加载补丁
patchManager.loadPatch();
通常都是在Application的onCreate()方法中进行初始化。
3.3Add patch 添加补丁
patchManager.addPatch(path);//path:补丁文件下载到本地的路径。
当一个新的补丁文件被下载后,调用addPatch(path)就会立即生效。
贴上下载补丁代码

总结:
只能对某些方法有效,有的手机不兼容,坑太多,不建议使用
有条件的同学可以使用 微信平台的Tinker(http://www.tinkerpatch.com/)
优点:1.修复率高 2.集成简单
网友评论