android各大热修复框架比较

Dexpost:(未测试)
1)原理:在底层虚拟机运行时hoop方法;
2)地址:https://github.com/alibaba/dexposed;
3)缺点:适配方面存在一些问题,目前不支持android6.0,5,1;art运行时;
4)优点:无需重启就可以达到修复bug的目的;

AndFix:(已测试)
1)原理:在Native层使用指针替换的方法替换bug方法,达到修复bug的目的;
2)地址:https://github.com/alibaba/AndFix;
3)缺点:底层替换,稳定性方面可能需要实际检测;
4)优点:无需中期就可以达到修复bug的目的;

HotFix:(个人维护,可能存在坑)
1)原理:通过替换类加载器中bugclass,达到修复bug的目的;
2)地址:https://github.com/dodola/HotFix;
3)缺点:需要重新启动才可以修复bug;
4)优点:java运行层修复,稳定性较好;

Nuwa:(个人维护,可能存在坑)
1)原理:通过替换类加载器中bugclass,达到修复bug的目的;
2)地址:https://github.com/jasonross/Nuwa;
3)缺点:需要重新启动才可以修复bug;
4)优点:java运行层修复,稳定性较好;

DroidFix:(个人维护,可能存在坑)
1)原理:通过替换类加载器中bugclass,达到修复bug的目的;
2)地址:https://github.com/bunnyblue/DroidFix;
3)缺点:需要重新启动才可以修复bug;
4)优点:java运行层修复,稳定性较好;

Dexposed不支持Art模式(5.0+),且写补丁有点困难,需要反射写混淆后的代码,粒度太细,要替换的方法多的话,工作量会比较大。

AndFix支持2.3-6.0,但是不清楚是否有一些机型的坑在里面,毕竟jni层不像java曾一样标准,从实现来说,方法类似Dexposed,都是通过jni来替换方法,但是实现上更简洁直接,应用patch不需要重启。但由于从实现上直接跳过了类初始化,设置为初始化完毕,所以像是静态函数、静态成员、构造函数都会出现问题,复杂点的类Class.forname很可能直接就会挂掉。

ClassLoader方案支持2.3-6.0,会对启动速度略微有影响,只能在下一次应用启动时生效,在空间中已经有了较长时间的线上应用,如果可以接受在下次启动才应用补丁,是很好的选择。

总的来说,在兼容性稳定性上, ClassLoader方案很可靠 ,如果需要应用 不重启就能修复 ,而且方法足够简单,可以使用 AndFix ,而 Dexposed由于还不能支持art,所以只能暂时放弃,希望开发者们可以改进使它能支持art模式,毕竟xposed的种种能力还是很吸引人的(比如hook别人app的方法拿到解密后的数据,嘿嘿),还有比如无痕埋点啊线上追踪问题之类的,随时可以下掉。

你可能感兴趣的:(android各大热修复框架比较)