Skip to content
jack_1900 edited this page Dec 8, 2016 · 2 revisions

Android平台Hotfix相关的解决方案已经有了不少,有AndFix,Nuwa,Tinker...

基于技术解决方案可分为两类:native hook和ClassLoader hook。

  • AndFix作为native hook的代表,它的实现优美,使用也比较简洁基于修改的类生产对应的类,非常巧妙,生产的patch包体积也很小。但是由于是对dalivk & ART进行hook,由于hook的native API中可能会经过ROM厂商的修改以及Android版本迭代过程中API的变更,都给兼容性带来了挑战。

  • 比如发布的Android N是不能支持的,需要继续做适配工作

  • 饿了么APP当初采用了AndFix作为第一版的技术方案,在三星和华为等的机器上出现很多Dex格式加载相关的问题

  • QQZone作为ClassLoader hook的方案代码,需要对code进行插桩,只可修复Java code,关于资源的加载以及so的修复是不能支持的。后来Tinker把这块补了上来,同时对差分体积做了更深的挖掘,但是相对在打差分包上就有很多的限制,要保留class混淆和res ids的映射文件,比较麻烦。

Amigo 原理与 QQZone 的方案有些类似,QQZone,Tinker,Nuwa这类方案是通过修改PathClassLoader中的dex实现的,Amigo则是釜底抽薪直接替换ClassLoader。同时进一步实现了 so 文件、资源文件、四大组件的修复,可以对APP全面进行修复,不愧 Amigo(朋友)这个称号,能在危急时刻送来全面的帮助。同时Amigo也致力解决使用过程中的带来的束缚,比如对代码进行插桩、打包时保存和指定映射文件等(如果mapping文件丢了后果不堪设想),所以开发和打包完全无侵入。

HotFix只是作为Amigo feature的一小块,其实Amigo真正要解决的是Android APP动态更新的问题。

  • 一键解决老版本覆盖率居高不下的问题
  • 解决多团队并行开发带来的版本周期问题
  • ... 当然还有更多的使用场景等待你去探索。
Clone this wiki locally