| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 移动开发如何用好热更新?说说其中的技术原理 -> 正文阅读 |
|
[移动开发]移动开发如何用好热更新?说说其中的技术原理 |
热更新是一种App软件开发者常用的更新方式。简单来说,就是在用户下载安装App之后,打开App时遇到的即时更新。 在2017年苹果App Store针对热更新的下架事件以后,开发者们也在不断的探索及尝试最优技术解决方案。随着技术的迭代,各种框架的发展更新,热更新的框架已经日趋成熟,各大互联网公司基本都有研发热更新框架,方案实现及优缺点各有差异,但总的来说有三大类。 ClassLoader 加载方案: 代表有Qzone的超级补丁、大众点评的nuwa、百度金融的rocooFix,、以及美团的robust。 Native层替换方案: 代表有阿里的Dexposed、AndFix与腾讯的内部方案KKFix; H5/小程序动态加载: 代表有HTML5方案、小程序容器热更新方案。 接下来介绍几个极具代表性的方案,以及它们的优缺点: 1、QZone的热更新方案QZone方案推出比较早,对热修复技术的推进很有启发意义。它是基于Android dex分包方案,最关键的技术点在于利用字节码插桩的方式绕开了预校验问题。这种方案只支持App重启之后才能修复,也就是App在运行的时候加载到了补丁包也不能及时修复,需要App重新启动的时候才会修复,这是因为QZone方案是基于类加载区需要重新加载补丁类才能实现的,所以必须进行重启才能修复。此外,QZone方案只支持到类结构本身代码层面的修复,不支持资源的修复。 原理class加载原理:dex文件转换成dexFile对象,存入Element[]数组,findclass顺序遍历Element数组获取DexFile,然后执行DexFile的findclass。 优点代码是非侵入式的,对apk体积影响不大。 缺点需要下次启动才修复。 性能损耗大,为了避免类被加上CLASS_ISPREVERIFIED,使用插桩,单独放一个帮助类在独立的dex中让其他类调用。 2、微信Tinker据微信内部人士介绍:微信tinker项目之初最大难点在于如何突破Qzone方案的性能问题,通过研究Instant Run的冷插拔与buck的exopackage找到灵感。它们的思想都是全量替换新的Dex 因为使用全新的dex,所以自然绕开了Art地址可能错乱的问题,在Dalvik模式下也不需要插桩,加载全新的合成dex即可。 原理采用dex替换的方式,避免了dex插桩带来的性能损耗。原理是提供dex差量包,整体替换dex的方案。差量的方式给出patch.dex,然后将patch.dex与应用的classes.dex合并成一个完整的dex,完整dex加载得到dexFile对象作为参数构建一个Element对象然后整体替换掉旧的dex-Elements数组。 Tinker自研了DexDiff/DexMerge算法,对于dex文件的处理经验老道。Tinker还支持资源和So包的更新,So补丁包使用BsDiff来生成,资源补丁包直接使用文件md5对比来生成,针对资源比较大的(默认大于100KB属于大文件)会使用BsDiff来对文件生成差量补丁。 优点兼容性高、补丁小。 缺点需要下次启动才修复。 3、阿里AndFixAndFix采用native hook的方式,这套方案直接使用dalvik_replaceMethod替换class中方法的实现。由于它并没有整体替换class, 而field在class中的相对地址在class加载时已确定,所以AndFix无法支持新增或者删除filed的情况(通过替换init与clinit只可以修改field的数值)。 原理直接在native层进行方法的结构体信息对换,从而实现方法的新旧替换。 优点补丁实时生效,不需要重新启动。 缺点存在稳定及兼容性问题。ArtMethod的结构基本参考Google开源的代码,各大厂商的ROM都可能有所改动,可能导致结构不一致,修复失败。 4、FinClip 小程序容器热更新方案「Native+H5」的App,其热更新的机制大致是:把需要频繁发版的业务应用H5化,并内嵌至 App 中。当含有页面链接的App版本过审以后,这些H5 页面可以随时远程热更新,用户在不更新App版本的基础上,就能使用最新版的业务应用。 虽说 h5 与小程序均能帮助 Hybrid 应用实现热更新,但鉴于小程序优于h5的性能,这里仅为大家介绍基于小程序容器的热更新方案。 FinClip 是近几年大热的小程序容器技术,App 通过连接后台,从后台拉取小程序包,通过小程序容器运行,可以帮助「Native+小程序」混合开发应用实现热更新。 原理:实现了小程序的容器,由逻辑层负责与 SDK 交互,渲染层负责页面的渲染,同时由 SDK 提供路由界面跳转以及其他原生功能 优点:非侵入式的代码,对apk体积影响不大。 缺点:只对app中的小程序页面有效,对原生模块无能为力。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/30 22:30:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |