热更新你都知道哪些?

article/2025/8/27 10:00:59

热更新系列目录

  1. 热更新你都知道哪些?
  2. 热更新Sophix的爬坑之路
  3. 腾讯热更新Tinker的故事
  4. 阿里热更新Sophix的故事

Android热更新

  • 前言
  • 1. 什么是热更新?
  • 2. 主流热更新方案
  • 3. 腾讯系热更新
  • 4. 阿里系热更新
  • 总结

博客创建时间:2020.05.16
博客更新时间:2021.02.24


前言

首先我们需要明白没有完美的热更新方案,只有更好的热更新方案,热更新不会有100%的成功率。截止2021上半年,我推荐使用Sophix,期待以后有更加强大的类似方案。

热修复因为大量涉及android底层知识,又因为android本身开源,华为vivo小米几大厂商都可能修改底层相关代码,兼容困难。所以热修复技术开发维护难度巨大,人力和时间投入不菲。目前主要有腾讯,阿里等几家互联网大厂因自身刚性需求,实现了此功能。


1. 什么是热更新?

对于“热”这个字从不同的角度会有不同的观点:

  1. 站在app开发者角度的“热”是指在不发版的情况来实现更新。
  2. 从Google提出的“热”是指值无需重新启动。

热更新就是不停机实时更新,HotUpdateHotFix,真正的热更新是不用重启就能更新,在Android 中还不能达到完全的真正热更新。

在热更新出现之前,通过反射注解、反射调用和反射注入等方式已经可以实现类的动态加载了。热更新的实质就是替换,需要替换运行时新的类和资源文件的加载,就可以认为是热操作了。热更新就是一种热操作,它是一种改变app运行行为的技术,其本质就是利用hook操作进行替换,在代码上是一种侵入性的操作。

google和苹果是不支持热更新的,只有在中国特殊国情下才出现了这种黑科技,主要是热更新对程序安全性有一定影响。

为什么需要热更新?
改善用户体验(节省流量、时间、操作程度),快速紧急修复Bug.修复立即生效,是热修复所追求的宗旨。


2. 主流热更新方案

首先我们需要认知没有完美的热更新方案,只有更好的热更新,热更新不会有100%的成功率。截止2020上半年最强大的热更新方案,我推荐使用Sophix。

热修复因为大量涉及android底层知识,又因为android本身开源,华为vivo小米几大厂商都可能修改底层相关代码,兼容困难。所以热修复技术开发维护难度巨大,人力和时间投入不菲。目前主要有腾讯,阿里等几家互联网大厂因自身刚性需求,实现此功能。

热更新的技术方案我将其分为3种:

  1. 腾讯系的热更新方案Tinker、Qzone。Tinker是腾讯系产品中热更新的主力技术。
  2. 阿里系的热更新技术,Andfix、阿里百川Hotfix1.X、Sophix。我们可以按顺序看作是技术方法的逐步升级。Sophix在技术层结合了Tinker和HotFix,吸取了两者之精华和优势,个人认为截止2020.05是目前最简单实用及稳定强大的热更新技术。
  3. 其他厂的热更新方案如美团点评Robust、饿了么 Amigo

在这里插入图片描述


不管多种热更新方案细节有多少不同,其底层的核心路线只有两条类加载替换底层替换
在这里插入图片描述
类加载替换
对于类加载在热更新中的使用,请查看我的另一篇博客《类加载机制原理解析》

底层替换
底层替换是一种nativite方案,其操作是在Native修改Filed指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗的目的。
在这里插入图片描述
在类被加载后,类中的每个方法都会在虚拟机中对应ArtMethod,Artmethod记录了这个java方法的所属类、访问权限、代码执行内存地址等信息。

通过在运行时利用hook操作native指针,通过这种篡改ArtMethod指针的方式,将补丁方法ArtMethod的成员值逐一赋给旧方法实现替换。所以该种方案能及时生效。

Native修改Filed指针需要在native层进行三步操作:

  • 打开链接库获得操作句柄,获得native层的内部函数,得到ClassObject对象
  • 修改访问权限属性为public
  • 得到新旧方法的指针,新方法指向目标方法,实现方法的替换。

3. 腾讯系热更新

腾讯系的热更新方案主要有Qzone和Tinker两种,分别用于QQ和微信两大App中。关于其介绍请阅读我的博文《腾讯热更新Tinker的故事》


4. 阿里系热更新

腾讯系的热更新方案主要有Qzone和Tinker两种,分别用于QQ和微信两大App中。关于其介绍请阅读我的博文《阿里热更新Tinker的故事》


总结

我只使用过基于Bugly的Tinker和阿里的Sophix两种热更新方案。强烈推荐使用Sophix。为什么不推荐使用Bugly呢,虽然是免费的。

  1. Bugly的热更新免费意味着服务质量差,技术QQ支持群百年无响应,别指望能有技术人员来给你答疑。Sophix使用的是钉钉群进行技术支持,技术支持响应速度和态度简直天壤之别。
  2. 服务器时不时就会有崩溃问题,全量更新,热更新不敢使用了,这服务器宕机实在有损大厂威严
  3. 针对同一版本,Bugly集成的Tinker只能打一次补丁,第二次就失败了。Sophix可以对同一版本进行多次补丁修复
  4. Tinker的接入和打包都比较麻烦,代码侵入性高。Sophix接入简单,傻瓜式打包。
  5. 阿里有一整套的技术开发生态链,我可以服务器、后台、数据库、移动端测试、推送等都可以接入阿里云。
  6. Tinker的补丁包形式是.zip,Sophix的补丁包是.jar形式

相关链接

  1. 热更新你都知道哪些?
  2. 热更新Sophix的爬坑之路
  3. 腾讯热更新Tinker的故事
  4. 阿里热更新Sophix的故事

扩展链接:

  1. ART与Dalvik、JVM之间的关系你懂了吗?
  2. System.exit(0) 与 android.os.Process.killProcess(android.os.Process.myPid())

博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !


http://chatgpt.dhexx.cn/article/nBh6S97t.shtml

相关文章

热更新技术简易原理及技术推荐

为了照顾萌新童鞋,最开始还是对热更新的概念做一个通俗易懂的介绍。 热更新用通俗的讲就是软件不通过应用商店的软件版本更新审核,直接通过应用自行下载的软件数据更新的行为。在用户下载安装App之后,打开App时遇到的即时更新,是…

热更新及其原理

热更新:是app常用的更新方式,只需下载安装更新部分的代码 工作原理:动态下开发代码,使开发者在不发布新版本的情况下修复bug和发布功能,绕开苹果审核机制,避免长时间的审核以及多次被拒绝造成的成本。 优…

HTML/CSS实现小米官网搜索框效果

效果图: 需求分析: 1、输入框焦点事件 onfocus:成为焦点, 点击输入框的时候,出现闪烁光标,此时可以输入内容。 onblur :失去焦点, 点击页面空白区域,光标消失。此时不可以输入内容。 2、获取元素 3、注册事件 2.1…

html中的搜索代码,Web自动化(3):网页自动搜索功能

unsplash.jpg 写在前面 如果我们需要在期刊中搜索我们想要找的文章,那么我们如何才能达到这个目的。我们首先看一下,手动和自动对比图: 网页搜索.png 其实内容全部一样,我们只是用自动化程序,来代替我们手动操作。 1. 创建webdriver驱动对象,驱动打开网页 # 导入包 from …

java搜索代码_Java实现搜索功能代码详解

首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是get请求,并且是向当前页面发送get请求 //示例代码 请求路径为当前页面路径 "/product" 当我们要实现多条件搜索功能时,可以将搜索条件封装为一个map集合,再根据m…

干货!最全优秀搜索框设计案例(含代码链接)

面对纷繁复杂的网页内容,用户通过查询关键词表达需求,期望在响应的查询结果中快速获取准确的信息和流畅的用户体验。用户与网络世界的万千联系都是从搜索开始的。搜索框之于用户就像是用户与应用或网站之间的对话窗口。小小的搜索框传递着用户与网站、应…

php网页制作中搜索框的代码,在网页里嵌入百度搜索框功能

今天发现某个网站是直接使用百度搜索作为自己网站的搜索功能的,感觉这个挺好玩的,不需要去研究复杂的搜索算法而又直接使用了百度搜索这个强大的搜索引擎为自己撑腰。无论对自己还是对用户来说都是相当不错的选择,下面作者将要和大家分享一下…

利用CSS写精美搜索框

利用html写搜索样式框 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>8款纯CSS3搜索框</title&g…

JavaScript实现智能搜索框

应用场景&#xff1a; 1. 搜索框在页面中占据的空间过小&#xff0c;希望无论浏览到什么位置&#xff0c;可以轻易地回到并聚焦搜索框。 2. 搜索框里面的文字大小过小&#xff0c;希望能够在上方开辟一块空间放大内容 解决思路&#xff1a; 1. 对整个页面添加键盘事件keyup…

html中搜索栏怎么写,html搜索框怎么做

很多:从记忆角度讲运用(谐音记忆法,联想法) 平常来说呢,可分为(死记硬背发,音标记忆法) 另外:自己创造 总结【谐音记忆法,死记硬背发,音标记忆法】 html/css如何写出如下搜索框效果&#xff0c;请给出代码 html制作一个搜索框&#xff0c;代码是什么&#xff1f; 打开Hbuilder编…

搜索导航HTML,CSS 带搜索导航栏的示例代码

本文为大家介绍如何使用 CSS 创建一个带搜索的导航栏。 以下实例均是响应式的。 可以先看下效果图: 创建一个搜索栏 主页 关于 联系我们 /* 在顶部导航栏中添加黑色背景颜色 */ .topnav {overflow: hidden; background-color: #e9e9e9; } /* 设置导航栏的链接样式 */ .topnav …

淘宝网搜索框源代码

搜索框代码&#xff1a; <script typetext/javascript> alimama_pidmm_11487878_0_0; alimama_typeg; alimama_tks{}; alimama_tks.style_i1; alimama_tks.lg_i1; alimama_tks.w_i350; alimama_tks.h_i69; alimama_tks.btn_i1; alimama_tks.txt_s; alimama_tks.hot_i1; a…

百度搜索框代码,实现回车点击,跳转到新页面,简单

参考网站&#xff1a;https://110.nanshiw.com/ 上图为实现效果 代码如下&#xff1a; <script> function butClick() {var val document.getElementById("search_key").value;if(val.length 0){alert(搜索为空&#xff0c;请输入内容);return false;}else…

智能搜索框html代码,js实现搜索框关键字智能匹配代码

只要使用搜索引擎的朋友应该都有这样的体会&#xff0c;就是当在搜索框输入关键字的时候&#xff0c;会出现自能匹配现象&#xff0c;这绝对是非常好的用户体验&#xff0c;下面就是一段类似的代码&#xff0c;当然这里只是掩饰&#xff0c;所以只能匹配的数据都是本地固定好的…

html5搜索框在最右侧,html5搜索框特效点击搜索框弹出分类搜索框代码

特效描述:html5搜索框特效 点击搜索框弹出 分类搜索框。点击搜索框弹出分类搜索框代码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 Search People Sara Soueidan Rachel Smith Peter Finlan Patrick Cox

网页添加百度搜索框代码大全

★ 用法&#xff1a;在下面选择合适的样式&#xff0c;复制代码到网页中相应位置粘贴即可。 ★ 样式一&#xff08;20030&#xff09; 代码&#xff1a; <iframe id"baiduframe" marginwidth"0" marginheight"0" scrolling"no" fr…

【项目】实现网页搜索框功能

一、实现搜索框的部分代码 【注&#xff1a;涉及api接口和中后台数据交互】 1. 最终呈现形式&#xff1a; 2. 代码实现&#xff1a; HTML文件中&#xff1a; <!-- 搜索框部分 --><div class"search-bar" fxFlexAlign"center" style" ma…

FLOWABLE流程引擎分析

flowable流程引擎分析 历史: flowable工作流引擎是从jboss的jbpm->alfresco的activiti->flowable 逐步演化过来的, 核心开发人员是同一个团队. 都是因为与原公司的设计理念存在分歧,导致两次出走. flowable自16年fork之后,已经成为一个活跃的社区,逐步赢得的许多工作流引…

流程引擎课堂(一)| 关于开源流程引擎Activiti 的需要注意的几点

编者按&#xff1a;流程引擎在各个行业都有应用&#xff0c;其重要性不言而喻&#xff0c;充分了解流程引擎是一项重要课题。本文详细介绍了开源流程引擎Activiti 的优点与局限性&#xff0c;为流程引擎的选型提出了参考性建议。 基础概念 首先&#xff0c;我们来了解几个概念…

自主研发的流程引擎怎么样?好用吗?

编者按&#xff1a;随着数字化管理的发展&#xff0c;企业对于业务流程系统的要求越来越精细化&#xff0c;有些企业选择自主研发的流程引擎&#xff0c;自主研发的流程引擎怎么样&#xff1f;本文介绍了一款国产自主研发的流程引擎。 为什么要自主研发 企业的流程系统很重要&…