补丁方案选定

当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案

Tinker

AndFix

阿里百川HotFix

QZone

不同角度的分析

阿里百川角度分析


Tinker 角度分析

Tinker -- 微信Android热补丁方案

Tinker是什么

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

它主要包括以下几个部分:

gradle编译插件:tinker-patch-gradle-plugin

核心sdk库:tinker-android-lib

非gradle编译用户的命令行版本:tinker-patch-cli.jar

为什么使用Tinker

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

总的来说:

AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的;

Robust兼容性与成功率较高,但是它与AndFix一样,无法新增变量与类只能用做的bugFix方案;

Qzone方案可以做到发布产品功能,但是它主要问题是插桩带来Dalvik的性能问题,以及为了解决Art下内存地址问题而导致补丁包急速增大的。

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

Tinker的已知问题


由于原理与系统限制,Tinker有以下已知问题:

Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件;

由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;

在Android N上,补丁对应用启动时间有轻微的影响;

不支持部分三星android-21机型,加载补丁时会主动抛出"TinkerRuntimeException:checkDexInstall failed";

tinker的一般模式并不支持加固,需要使用usePreGeneratedPatchDex模式,即提前生成补丁模式。某些加固工具可能会将非exported的四大组件类名替换,这些类将无法修改。对于Android N之后的设备,本模式可能会因为内联而出现问题,建议过滤N之后的设备;

对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。

更多相关文章

  1. Android(安卓)屏幕适配方案
  2. Vue2.0 之 自带浏览器里无法打开(兼容处理) - 解决方案
  3. Android(安卓)ListItem 的布局方案
  4. Android(安卓)Stdio无法找到安卓设备的解决方案(List of devices
  5. JEECG 移动端解决方案(HTML5方式)
  6. Android拦截并获取WebView内部POST请求参数
  7. 关于更新Android(安卓)sdk之后出现This Android(安卓)SDK requir
  8. Android(安卓)进阶——持久化存储序列化方案Serializable和IPC及
  9. mac下安装android studio 遇到问题及解决方案

随机推荐

  1. Android获得电话本中的数据(ContentProvid
  2. android核心模块及相关技术
  3. 第二章 IPC机制
  4. Android(安卓)动态logo bootanimation.zi
  5. Binder驱动的实现
  6. C虾仔笔记 - EditText编辑框
  7. android 5.0系统 EditText控件
  8. android基本架构
  9. 基于蓝牙socket开发Android蓝牙通信
  10. Android实现全屏显示的方法