按步骤一直没有弄出效果,最后按这篇博客弄出来了。
参考博客: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
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();
下面是自己为了方便生成补丁写的工具类---
下载地址:http://download.csdn.net/detail/b275518834/9485250
注意热修复是在内存中进行的,如果重启的话,app会还原为来原来没有打补丁的状态。