Android热修复AndFix

热修复主要用来修复代码、修复bug、添加独立的功能,他的原理主要是操作PathClassLoader、DexClassLoader。

PathClassLoader是类加载器,DexClassLoader可以从.jar和.apk类型的文件内部加载classes.dex文件就好了。他们都是classloder的子类。

classloder是什么呢?与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class文件加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。

一个ClassLoader可以包含多个dex文件,每个dex文件是一个Element(元素),多个dex文件排列成一个有序的数组dexElements,当找类的时候,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找类则返回,如果找不到从下一个dex文件继续查找。

那么这样的话,就可以在这个dexElements中去做一些事情,比如,在这个数组的第一个元素放置我们的patch.jar,里面包含修复过的类,这样的话,当遍历findClass的时候,我们修复的类就会被查找到,从而替代有bug的类。

原理简单说就是当打开的时候使用ClassLoader动态加载,然后使用反射机制来调用插件中的类和方法,一般都会搭配一套插件框架来配合使用。

AndFix

原理:

方法的替换,把有bug的方法替换成补丁文件中的方法。

优点:

重大bug,需要紧急修复

可以下次迭代修复的bug

影响用户体验的行为

无需重启

缺点:

无法添加新类(内部类也不行)和新的字段、新的方法?自己试了方法可以

资源文件无法替换   试了下换原有的图片可以,但是新增的不行

不能修改xml布局文件   不能

加固后的包补丁无法使用,如果要加固,需要加固前的包来生成补丁,不过这样生成的补丁也很容易破解

不能对同一个方法修复两次,否则App根本跑不起来

对加载过的补丁文件要做名字修改 如果名字重叠 就不会再次加载

补丁加载的时机:

可以放在自定义Application的onCreate方法中,也可以放在button的点击事件中,也可以放在监听网络变化的广播中。

操作:

通过命令生成补丁

-a,--alias     keystore entry alias.

-e,--epassword <***>   keystore entry password.

-f,--from        new Apk file path.

-k,--keystore    keystore path.

-n,--name       patch name.

-o,--out         output dir.

-p,--kpassword <***>   keystore password.

-t,--to          old Apk file path.

阿里百川

http://www.tuicool.com/articles/viEJfeE

主要好处是可以对补丁很好的管理,例如停止发布、继续发布、发布回滚等等

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,415评论 25 708
  • 读书笔记,写写画画记忆更深刻,如果还能梳理一下的话,那就更好了。 热修复技术介绍 探索之路 最开始,手淘是基于Xp...
    primLooper阅读 3,977评论 2 15
  • 热修复:产品出现小Bug,如果开发者修复Bug,重新发包,则成本较高、效率低,用户也需要重新下载更新;而热修复即可...
    PhoenixGG阅读 397评论 0 1
  • 即使知道这个是错的,但是你还是去做了。 太多太多不应该,从来没有想过会以这种方式去结束一件我认为现在的我可以做的...
    Serafina_ZJ阅读 311评论 0 0
  • myr-6 如何选购羊绒衫?什么样才是真正的羊绒衫?你在市面上看到标价不超过200的也是羊绒衫吗? 不是所有的羊都...
    6_myr阅读 286评论 0 0