美文网首页
热修复之Tinker

热修复之Tinker

作者: 嘿_叫我小王 | 来源:发表于2020-03-10 23:37 被阅读0次

    热修复是什么

    在热修复出现之前,一个已经上线的app中如果出现了bug,即使是一个非常小的bug,不及时更新的话有可能存在风险,若要及时更新就得将app重新打包发布到应用市场后,让用户再一次下载,这样就大大降低了用户体验,当热修复出现之后,这样的问题就不再是问题了。热修复无需重新发布版本,可以在程序运行后台偷偷修复,不让用户感受到修复的过程,而且用户无需下载新的应用,这样的修复代价小,bug 修复成功率高,把损失降到最低。我们一般的修复内容包含代码修复,项目资源修复,项目 so 库修复等。

    热修复框架的种类繁多,按照公司团队划分主要有以下几种:

    阿里系 AndFix、Dexposed、阿里百川、Sophix
    腾讯系 微信的Tinker、QQ空间的超级补丁、手机QQ的QFix
    知名公司 美团的Robust、饿了么的Amigo、美丽说蘑菇街的Aceso
    其他 RocooFix、Nuwa、AnoleFix

    Tinker是什么

    Tinker就是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。

    为什么我们要使用Tinker呢

    当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案。但它们都存在无法解决的问题,这也是正是我们推出Tinker的原因。


    热修复框架对比

    总的来说:

    AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的;
    Robust兼容性与成功率较高,但是它与AndFix一样,无法新增变量与类只能用做的bugFix方案;
    Qzone方案可以做到发布产品功能,但是它主要问题是插桩带来Dalvik的性能问题,以及为了解决Art下内存地址问题而导致补丁包急速增大的。

    特别是在Android N之后,由于混合编译的inline策略修改,对于市面上的各种方案都不太容易解决。而Tinker热补丁方案不仅支持类、So以及资源的替换,它还是2.X-8.X(1.9.0以上支持8.X)的全平台支持。利用Tinker我们不仅可以用做bugfix,甚至可以替代功能的发布。Tinker已运行在微信的数亿Android设备上,那么为什么你不使用Tinker呢?

    Tinker的已知问题

    1. Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件(1.9.0支持新增非export的Activity);
    2. 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;
    3. 在Android N上,补丁对应用启动时间有轻微的影响;
      不支持部分三星android-21机型,加载补丁时会主动抛出"TinkerRuntimeException:checkDexInstall failed";
    4. 对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。

    那么,Tinker的原理是什么呢?

    先上github官方首页的图

    image

    服务端做dex差量,将差量包下发到客户端,在ART模式的机型上本地跟原apk中的classes.dex做merge,merge成为一个新的merge.dex后将merge.dex插入pathClassLoader的dexElement,为了实现差量包的最小化,Tinker自研了DexDiff/DexMerge算法。Tinker还支持资源和So包的更新,So补丁包使用BsDiff来生成,资源补丁包直接使用文件md5对比来生成,针对资源比较大的(默认大于100KB属于大文件)会使用BsDiff来对文件生成差量补丁。

    重点来了,前面都是理论,那如何集成Tinker呢?

    我是参考了一篇文章,也有那位博主写好的demo。大家可以按照文章去集成,就可以实现Tinker热修复的效果。

    注意:如果大家跑demo,可能会报错(我就报了很多次),如果大家解决不出来,可以在评论区评论,如果有和我报错一样,可以帮助解决

    今天的Tinker就到这了,再见!

    相关文章

      网友评论

          本文标题:热修复之Tinker

          本文链接:https://www.haomeiwen.com/subject/gnnwdhtx.html