Android AndFix修复方式的限制

这里阅览了很多网上关于修复的资料,一一贴在这里便于查看:

https://github.com/alibaba/AndFix  这是官方处  要了解使用,一定得看看这里。

http://www.jianshu.com/p/479b8c7ec3e3 如果你看不懂官方的,就看看这里。

http://blog.csdn.net/lpftobetheone/article/details/50435371  适合初步了解使用,一个简单的Demo(这篇文章里面有对补丁只能加载一次问题的解决)

http://www.cnblogs.com/common1140/p/5287040.html  这一篇更贴近于我们的实际开发,如何使用修复- 产生 - 上传补丁 -下载补丁

https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=1&srcid=1106Imu9ZgwybID13e7y2nEi#wechat_redirect 这里是寻找原理的地方

下面说一下修复的几种方式:

AndFix修复:

① 不支持YunOS
② 无法添加新类和新的字段
③ 需要使用加固前的apk制作补丁,但是补丁文件很容易被反编译,也就是修改过的类源码容易泄露。
④ 使用加固平台可能会使热补丁功能失效(看到有人在360加固提了这个问题,自己还未验证)。

⑤ andfix不支持布局资源等的修改

⑥ 官网:AndFix supports Android version from 2.3 to 7.0, both ARM and X86 architecture, both Dalvik and ART runtime, both 32bit and 64bit.

⑦ 应用patch不需要重启。但由于从实现上直接跳过了类初始化,设置为初始化完毕,所以像是静态函数、静态成员、构造函数都会出现问题,复杂点的类Class.forname很可能直接就会挂掉。

⑧ AndFix的一个潜在问题:

    加载一次补丁后,out.apatch文件会copy到getFilesDir目录下的/apatch文件夹中,在下次补丁更新时,会检测补丁是否已经添加在apatch文件夹下,已存在就不会复制加载sdcard的out.apatch。

源码:

public void addPatch(String path) throws IOException { File src = new File(path);
    File dest = new File(mPatchDir, src.getName());
    if(!src.exists()){ 
    throw new FileNotFoundException(path); }
  
if (dest.exists()) {
     Log.d(TAG, "patch [" + path + "] has be loaded."); return; }
   FileUtil.copyFile(src, dest);
// copy to patch's directory Patch patch = addPatch(dest); if (patch != null) {
    loadPatch(patch); }
}

 

posted @ 2016-10-15 23:52  Spiderman.L  阅读(2854)  评论(0编辑  收藏  举报