1.Android热更新方案之微信Tinker源码分析
2.腾讯Bugly干货分享Android Patch 方案与持续交付
Android热更新方案之微信Tinker源码分析
接入Android热更新方案之微信Tinker源码分析,主要涉及Tinker接入过程、使用方法、实例构建以及补丁合成结果返回给主进程的处理。接入过程与使用方法可参考相关文档与指南,实践与接入指南详尽,前锋php教程源码具体步骤请参考官方文档。
在微信热更新方案中,实例构建采用默认方式,TinkerInstaller.install(appLike)为关键步骤。Applike默认的ApplicationLike在此之后被调用。
构建过程涉及DefaultTinkerResultService,这是一个IntentService,主要功能是补丁合成结果返回给主进程。在安装成功后,将删除patch,为patch重启生效做准备。
UpgradePatch与RepairPatch是处理patch的类,分别用于处理patch数据删除及尝试修复。tcpudp源码安卓
install多参数方法首先安装标志位为true,tinkerLoadResult.parseTinkerResult进行热修复结果处理并上报。下载patch后,安装patch方法中调用onPatchReceived,此方法在DefaultPatchListener执行。补丁检查后执行runPatchService,Intentservice跳转至TinkerPatchService,在onHandleIntent中调用result = upgradePatchProcessor.tryPatch(context, path, patchResult)方法。
默认情况下,内核协议栈源码此方法调用UpgradePatch的tryPatch方法。此步骤首先进行标志位与patch文件检验,接着进行签名与patch文件MD5校验。检验完毕后,进行dex补丁处理。
tryRecoverDexFiles->patchDexExtractViaDexDiff执行完毕后,将结果传递给AbstractResultService.runResultService(context, patchResult)。
在补丁加载过程中,自定义Application类的steam授权工具源码加载导致无法修改补丁包。为了避免此问题,采用代码框架方式,而非InstantRun hook Application,以尽量减少反射,提升框架兼容性。主要工作是实现将原始Application类完全隔离,确保其他类无法引用自定义的Application。
腾讯Bugly干货分享Android Patch 方案与持续交付
腾讯Bugly开发者社区分享了一篇文章,探讨了Android应用的vxworks nvme驱动源码版本更新问题,尤其是在面对多样的系统版本和市场审核差异时,Android应用升级速度较慢,影响了迭代效率和用户体验。文章提出,借鉴Chrome浏览器的patch升级方案,通过在用户无感知下提供补丁更新,来加速bug处理和版本迭代。
近年来,Android热补丁框架如AndFix、Dexposed和nuwa等兴起,但各有局限。作者团队经过评估,发现AndFix与现网版本匹配但存在代码修改限制和维护难度问题,nuwa仅支持Java代码更新,无法满足全部需求。因此,他们决定自研patch方案,将应用视为加载器,仅负责启动和资源定位,新功能或修复通过下发补丁文件实现。
该方案设计巧妙,通过代理Application的创建过程和生命周期管理,支持所有代码和资源的更新。尽管存在反射Application的复杂性,但通过精心设计,成功解决了加载问题。同时,通过将dex文件分包,解决了类引用变更引发的兼容性问题。然而,Multidex方案在某些特定设备上表现不佳,团队最终转向HackClassLoader,解决了多线程加载问题。
文章最后强调,团队的patch方案旨在提供无缝的开发流程,开发者只需正常打包,patch包生成和应用不会影响正向开发。通过与微信读书的试行,这种持续交付方式有望加速版本迭代,减少线上问题,并收集用户反馈,进一步优化产品。