android 热修补AndFix

来源:互联网 发布:淘宝网的相关网站 编辑:程序博客网 时间:2024/04/28 22:45

好久没有写博客了,借着最近比较闲,研究了一下热修补的实现。

    搜了好多资料,实现热修补大体分两种方法

    1.使用dex 的分包机制。
    2.使用第三方开源

1.使用dex 的分包机制。比较麻烦,你需要先了解dex是如何分包的实现的,具体可以参考http://kymjs.com/code/2016/05/08/01

2.使用第三方开源,
  1. Dexposed
  2. AndFix
   其中Dexposed 支持2.3到4.0 系统,不包括3.0 但是到了5.0就不好使了,所以这不是我们今天要讲的。
   那就讲讲andFix  全称 Android HotFix 直接说主题吧。

使用方式

   1.首先添加依赖   compile 'com.alipay.euler:andfix:0.3.1@aar'
   2.在Application.onCreate() 中添加以下代码
patchManager = new PatchManager(context);patchManager.init(appversion);//current versionpatchManager.loadPatch();注意每次appversion变更都会导致所有补丁被删除,如果appversion没有改变,则会加载已经保存的所有补丁。

 3.然后在需要的地方调用PatchManager的addPatch方法加载新补丁,比如可以在下载补丁文件之后调用。
 4.之后就是打补丁的过程了,首先生成一个apk文件,然后更改代码,在修复bug后生成另一个apk。
  通过官方提供的工具apkpatch
  生成一个.apatch格式的补丁文件,需要提供原apk,修复后的apk,以及一个签名文件。
  可以直接使用命令apkpatch查看具体的使用方法。
 使用示例:

  1. mac OS 

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

  2. window

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

  注意:不管是哪个系统,都要先进入工具的根目录下 然后操作,必须签名保证路径等信息正确。

  具体命令可以参考

    命令执行如下: 

  生成如下三个文件, .apatch就是我们要的文件

 

      你可以在本地建个文件夹,将.apatch放在本地测试下具体是这样的,手机先安装有bug的apk  通过一个button点击调用

     

String  path_all = Environment.getExternalStorageDirectory()+File.separator+ "apatch_path"+File.separator+"123.apatch";
    
patchManager.addPatch(path_all);

 这样就ok了,然后退出本类,再次进入看到的就是你修复后的代码了

5.通过网络传输或者adb push的方式将apatch文件传到手机上,然后运行到addPatch的时候就会加载补丁。

加载过的补丁会被保存到data/packagename/files/apatch_opt目录下,所以下载过来的补丁用过一次就可以删除了。



 参考文献:http://www.jianshu.com/p/479b8c7ec3e3    https://github.com/dodola/HotFix

0 0