服务概述
热修复服务提供紧急修复线上 bug,无需重新发版即可在用户无感知的情况下完成原生代码问题修复的能力。热修复服务支持多种修复策略设置,包括但不限于修复版本、修复范围等。热修复组件拥有成熟、完整的流程,支持热修复补丁的下发、暂停、灰度、修复、回滚等流程。发布平台可以实时监控热修复补丁下发的阶段,并具备完备的漏斗统计,可以实时统计补丁触达率等。
注意:
请开发者注意限制该热修复能力,避免使用此能力擅自更改 App 的主要功能。
Android
修复是基于用户已安装的母包和新包之间进行 diff 生成补丁,通过推送系统动态的将补丁下发到用户手机上,然后和母包进行合并和加载,实现新功能动态加载到母包上的效果,从而达到动态修复线上问题的效果。
iOS
在 iOS 开发领域,应用迭代周期长且发版速度慢,当线上遇到严重问题时是无法通过发版渠道进行快速修复的。因此对于 iOS 应用来说,能快速修复线上严重问题而无需发版的热修复方法是非常重要的。TMF iOS 热补丁提供基于 JSPatch 的热修复方法,在利用 Objective-C 运行时特性的基础上,通过 JavaScript 原生代码替换原有的方法实现,从而修复线上的问题。
应用场景
热修复组件可在线上快速推送修复补丁到终端进行修复操作。
热修复组件可以通过下发功能性补丁包来完成轻量级业务修改,完成线上快速更新。
热修复组件可以通过下发更新性补丁包来完成轻量级运营或新特性灰度。
产品优势
Android
TMF 是 Android 的热补丁解决方案,支持动态下发代码、So 库以及资源,让应用能够在不需要重新安装的情况下实现更新。
类型 | TMF 热修复 |
类替换 | 支持 |
So 替换 | 支持 |
资源替换 | 支持 |
全平台支持 | 支持 |
即时生效 | 重启进程生效 |
开发透明 | 支持 |
支持全面、开发透明,补丁包小,性能损耗低。
全量替换新的 dex(无需插桩,没有 art 地址错乱问题,无兼容问题,开发透明)。
基于 diff 算法新旧 dex 差异计算得到补丁包,体量小。
基于自研 dexdiff 算法,利用 dex 格式进一步优化包大小。
支持完善(Gradle 接入,进程管理,安全校验等)。
海量验证(腾讯系亿级海量用户验证)。
精准触达,十分钟内即可获取推送质量的数据反馈,一天内触达率高达90%以上。
iOS
以下是热修复业界核心方案对比,TMF 采取 JSPatch 的热修复核心方案:
工具 | Wax | JSPatch |
引擎 | Lua | JavascriptCore,iOS 原生支持,效率最高 |
补丁语言 | Lua | Javascript(JSPatch) |
系统支持 | 第三方库,iOS 所有版本 | >=iOS 7 |
方法调用 | va_list,效率高,但存在64位问题 | forwardInvocation,方案无位数限制 |
修复语言支持 | ObjC | ObjC + C |
block 支持 | 支持浮点类型,安装包增量大 | 不支持浮点类型 |
开发工具 | Lua 开发工具,有代码提醒,要 import 大量文件,包增大 | JSPatch 开发插件,有代码提醒 JSPatch 语言转换工具 |
开源情况 | 开源,多年前停止更新,有较多第三方修改版 | 开源,使用用户多,收集和解决问题迅速 |
TMF 热修复下发方案的优势
强大的下发管理:
支持热修复下发和版本管理。
支持多补丁下发。
支持热修复中途暂停、回滚等回退操作,具有强大的可控能力。
支持补丁灰度下发,热修复下发前可以充分测试补丁,更好的确保线上正式版安全。
高到达率:
利用 TMF 数据同步框架,终端框架利用推拉结合。
尽管 iOS 系统对 App 后台限制严苛,从平台下发热补丁后,6 小时覆盖率高于 70%,12 小时覆盖率高于 90%。
修复能力强:
支持 Objective-C 语言的 runtime 钩子。
支持 C 语言的 Fish Hook 。
安全性与完整性:
使用签名验证补丁包,本地加密存储保证补丁安全 。
实时监控:
客户端针对补丁的触达、下载、回滚等操作进行上报。
可实时监控完整的下发链路,掌握补丁应用情况。