<转>Alibaba-AndFix Bug 热修复 以及添加到自己项目中

按步骤一直没有弄出效果,最后按这篇博客弄出来了。

参考博客:http://blog.csdn.net/yaya_soft/article/details/50460102

github上andfix的地址 https://github.com/alibaba/AndFix

原理:http://blog.csdn.net/qxs965266509/article/details/49816007


简单的理解是

生成补丁包,然后重命名为out.patch复制到android根目录下,然后启动app,加载补丁

将注解类Method在native层替换掉。


使用方法是用命令andfix提供的打包工具

apkpatch-1.0.3.jar

apkpatch.bat

apkpatch.sh

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.


(这里我的系统mac OS  window应该用)

使用命令./apkpatch.sh  -f new.apk -t old.apk -o output1 -k test.keystore  -p 111111 -a test -e 111111;

(这里我的系统mac OS  window应该用)

apkpatch.bat -f new.apk -t old.apk -o output1 -k test.keystore  -p 111111 -a test -e 111111;


此时命令输出成功打开output1会看到后缀.apatch文件

将后缀apatch后缀重命名为.zip

打开后可以看到classes.dex和META-INF文件夹

classes.dex转化jar后的源码如下

可以使用以下提到的工具查看classes.dex源码:

dex2jar  将dex转jar 命令行工具

http://www.jb51.net/softs/353141.html

Jdgui来查看jar源码  图形工具mac版

http://download.csdn.net/detail/u010268947/7657031#comment



<转>Alibaba-AndFix Bug 热修复 以及添加到自己项目中_第1张图片


CERT.RSA

CERT.SF

MANIFEST.MF

Manifest-Version: 1.0
Created-By: 1.0 (ApkPatch)

Name: classes.dex
SHA1-Digest: 7Sl9fRkO7ae1fNc+M6GluMFyP3E=


PATCH.MF

Manifest-Version: 1.0
Patch-Name: new
Created-Time: 4 Apr 2016 14:12:55 GMT
From-File: new.apk
To-File: old.apk
Patch-Classes: com.yang.tony.andfixdemo.MainActivity_CF
Created-By: 1.0 (ApkPatch)




以下是自己根据其他博客和github的地址写的demo

点击UPLOAD VERSION 显示new

点击RESET PATCH 会弹出OLD


值得注意的是andfix只能加载一次补丁,如果要生效需要调用

mPatchManager.removeAllPatch();
// load patch mPatchManager.loadPatch();



下面是自己为了方便生成补丁写的工具类---

<转>Alibaba-AndFix Bug 热修复 以及添加到自己项目中_第2张图片


<转>Alibaba-AndFix Bug 热修复 以及添加到自己项目中_第3张图片


下载地址:http://download.csdn.net/detail/b275518834/9485250


注意热修复是在内存中进行的,如果重启的话,app会还原为来原来没有打补丁的状态。

你可能感兴趣的:(<转>Alibaba-AndFix Bug 热修复 以及添加到自己项目中)