CN113448611B - 一种应用程序快速热更新的方法及*** - Google Patents
一种应用程序快速热更新的方法及*** Download PDFInfo
- Publication number
- CN113448611B CN113448611B CN202111007964.5A CN202111007964A CN113448611B CN 113448611 B CN113448611 B CN 113448611B CN 202111007964 A CN202111007964 A CN 202111007964A CN 113448611 B CN113448611 B CN 113448611B
- Authority
- CN
- China
- Prior art keywords
- patch
- package
- scheme
- module
- application program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明涉及互联网领域,特别涉及一种应用程序快速热更新的方法及其***。该方法先将根据需要修复的内容,选择出最适宜的热更新方案。可选择的热更新方案包括基于React Native框架的方案一,基于JSON文件的方案二,以及基于H5页面的方案三;方案一和二的优先级高于方案三;此外,为了提高热更新的效率和成功率,还可以在热更新过程中采用增量更新的方式完成修复过程,降低问题修复过程传递的数据量。本发明提供的一种应用程序快速热更新的***包括:项目工程模块,boudle仓库,补丁服务器,客户端,以及方案选择模块。本发明解决了现有热更新方案无法适应不同类型修复内容,用户体验较差,安全性不足的问题。
Description
技术领域
本发明涉及互联网领域,特别涉及一种应用程序快速热更新的方法及***。
背景技术
热更新是一种开发者快速修复应用程序出现的问题的方法;当应用程序在运行过程中出现问题时,如果无法及时修复问题将会给用户和开发者带来不可估量的损失,而大部分应用商店在开发者提供新版本的应用程序时需要进行审核,审核周期至少为2-3天,这意味着开发者可能无法及时通过版本更新来修复突发的技术问题,这可能会对用户体验造成极大的负面影响。热更新方法可以绕开了版本更新过程中的审核过程,灵活、快速地修复应用中出现的问题,保障用户的使用体验,直到开发者在更新的常规版本中对应用程序中的问题进行正式修复和更新。
传统热更新方案通常采用Web APP(网络应用程序)的方式。APP(应用程序)提供一个外壳,内嵌手机上的浏览器访问H5(HTML5,一种构建以及呈现互联网内容的语言方式,是互联网的下一代标准)页面,在H5页面进行UI(用户界面)交互。这种方式可以跳过正式版本更新的审核流程,更新UI就是更新H5页面,有一定的时效性。缺点是无法针对不同修复内容进行适应,导致APP的流畅性不如原生,用户体验不好,跟原生组件的交互方案复杂,维护难度大,同时因为是H5页面来实现APP,相当于将所有内容暴露给用户,存在相应的安全问题,难以满足用户数据和隐私的安全防护要求,以及开发者对技术保密性的需求。
发明内容
基于此,为了克服现有热更新方案无法适应不同类型修复内容,用户体验较差,安全性不足的缺点;有必要提供一种更高效、更安全的应用程序快速热更新的方法及其***。
本发明提供一种应用程序快速热更新的方法,该方法用于在发现客户端中运行的项目出现问题时,针对项目的修复内容对应用程序进行快速热更新,该方法包括如下步骤:
根据需要修复的内容选择适用的热更新方案;热更新方案包括基于React Native框架的方案一,基于JSON文件的方案二,以及基于H5页面的方案三。
方案一实现应用程序热更新的过程如下:
(1)根据需要解决的问题对本地项目中的项目文件的代码进行修改,对修改后的项目文件进行打包,项目文件中包含对应的业务代码压缩文件和资源文件;并将项目文件压缩后上传至补丁服务器。
(2)补丁服务器根据上传的项目文件生成相应的补丁包,配置补丁包的版本号、补丁包对应的应用程序的版本号。然后输出补丁包的下载地址和补丁包的MD5值。
(3)客户端启动时,首先查询当前补丁服务器中配置的最新的补丁信息。补丁信息至少包括:补丁包的版本号、补丁包的下载地址和补丁包的MD5值;然后判断本地的客户端中的应用程序的版本号与补丁服务器中发布的最新的补丁包对应的应用程序的版本号是否匹配;是则从补丁服务器中下载最新的补丁包,否则跳过热更新过程,正常启动客户端。
(4)在上步骤的补丁包下载完成后,校验补丁包的MD5值,校验通过后将补丁包解压后替换客户端中应用程序的本地文件,替换完成后重新加载应用程序的代码,完成应用程序的热更新过程。
方案二实现应用程序热更新的过程如下:
(Ⅰ)根据应用程序中各模块的更新内容生成相应的JSON文件;JSON文件用于描述生成的页面,包括渲染出的页面的内容以及处理事件的类型;并将JSON文件上传至补丁服务器。
(Ⅱ)补丁服务器根据上传的JSON文件生成相应的补丁包,配置补丁包的版本号、补丁包对应的应用程序的版本号;输出补丁包的下载地址和补丁包的MD5值。
(Ⅲ)客户端启动后,首先查询补丁服务器配置的最新的补丁信息;补丁信息至少包括:补丁包的版本号、补丁包的下载地址和补丁包的MD5值;然后在各个模块入口判断补丁服务器中是否发布有该模块的最新的补丁包;是则从补丁服务器中下载补丁包,否则跳过该模块的更新过程,正常运行该模块。
(Ⅳ)在上步骤的补丁包完成后,校验补丁包的MD5值,校验通过后,解析更新后的JSON文件进入热更新后的相应模块。
其中,方案三实现应用程序热更新的过程中,通过H5页面实现应用程序的所有模块的功能,然后在H5页面中进行问题的修复;客户端启动后,直接访问热更新后的H5页面中的内容。
本发明提供的方案中,同时设计了三个实现对应用程序进行热更新的方法,其中方案一和方案二分别针对页面细节出现的模块化问题以及页面表单更新问题这两类最常见类型修复问题进行处理,可以达到快速解决问题的目的,对不同的故障类型具有较强的针对性。方案一和方案二的修复方法相对于常规的Web APP网页更新方式属于较为封闭的场景,所以具有更高的保密性和安全性。同时,为了保障各类型的故障修复进行可以快速完成热更新,本发明还将基于H5页面热更新方案作为本发明的兜底方案。
作为本发明进一步地改进,三个热更新方案的优先级顺序如下:方案一和方案二的优先级相同,且方案一和方案二的优先级大于方案三。
作为本发明进一步地改进,热更新方案的选择方法如下:
(a)当需要修复的内容为页面细节部分的元素问题或应用程序中需要更新的模块基于React Native框架编写时,优先选择方案一。
(b)当应用程序中需要热更新的模块中的内容是格式固定的表单展示页面或应用于程序中需要热更新的模块基于JSON文件设计时,优先选择方案二。
(c)当需要热更新的是营销类的页面,或方案一或方案二均无法完成问题修复时,选择方案三作为进行热更新的方案。
作为本发明进一步地改进,采用基于JSON文件的方案二对应用程序进行热更新时,应用程序中包含UI视图解释器和事件解释器;UI视图解释器用于解析页面中内容属性,包括元素的位置、背景色、元素的大小和圆角;UI视图解释器通过解析将JSON文件描述的视图生成出来。事件解释器用于解析页面中的动作属性,包含元素的点击、页面的跳转、元素之间的联动;事件解释器通过解析将JSON文件描述的页面或模块串联起来。
作为本发明进一步地改进,JSON文件生成的补丁包中还包含对补丁是否进行强制执行的配置信息;当补丁包中包含强制执行的配置信息时,相应的补丁在下载完成后强制执行,直接完成解析和模块热更新。
作为本发明进一步地改进,方案三中,客户端通过浏览器加载H5页面,H5页面的热更新内容上传到补丁服务器中;热更新后的H5页面使用原页面的链接,并替换原页面的内容。
作为本发明进一步地改进,热更新的H5页面通过JavaScript编程语言与运行客户端的设备中的原生功能进行交互,并通过JS Bridge通信机制实现数据互通和调用设备中原生功能的效果。
作为本发明进一步地改进,方案一还可以采用增量更新的方式完成应用程序及其模块的热更新过程;增量更新方式包括版本增量更新和功能模块增量更新两种方式;
其中,版本增量更新的方法如下:
(1)针对修复后的项目文件采用增量算法获得版本增量包,版本增量包中包含项目文件在修复过程中所有经过改动的内容;其中,版本增量包的数量为多个,包含任意一个历史版本更新至当前最新版本的增量包。
(2)将版本增量包上传到补丁服务器,并配置补丁信息。
(3)客户端从补丁服务器中下载自身的版本对应的版本增量包之后,将版本增量包与本地的基础文件包合并得到全量包,并利用全量包对本地客户端中应用程序进行更新。
功能模块增量更新的方法如下:
(ⅰ)在生成的版本增量包的基础上,根据功能模块对版本增量包进行拆分包处理,剔除功能稳定、无需进行热更新的功能模块,剩余的基于一个或多个独立的模块的补丁包即为模块增量包;输出对应的模块增量包的包名。
(ⅱ)将模块增量包上传到补丁服务器,并配置补丁信息,补丁信息中至少还包括该模块增量包中包含的模块更新的说明。
(ⅲ)客户端从补丁服务器中下载相应的模块增量包之后,对本地基础文件包进行对应拆分,然后将拆分后的基础文件包与模块增量包合并,得到全量包;利用全量包替换本地的基础文件包之后,再重新加载应用程序的代码,完成热更新过程。
本发明中,增量更新过程中,采用开源库中的“***-diff-match-patch”代码对不同版本的全量包中的字符串进行diff和patch操作,计算出针对不同版本的基础文件包的补丁包。
本发明还包括一种应用程序快速热更新的***,该***采用前述的应用程序快速热更新的方法,对存在问题的项目进行快速热更新,修复项目中的出现的问题。该***包括:项目工程模块,boudle仓库,补丁服务器,客户端,以及方案选择模块。
其中,方案选择模块用于根据当前修复的问题类型,选择最佳的热更新方案,热更新方案包括基于React Native框架的方案一,基于JSON文件的方案二,以及基于H5页面的方案三。
项目工程模块中包含存储在本地的与实现客户端中应用程序正常运行相关的所有工程代码;项目中存在的问题的修复过程需要通过修改工程代码解决。
boudle仓库用于管理项目中的工程代码;boudle仓库在每次修复问题之后,将修改后的全量代码上传到一个补丁服务器中。
补丁服务器用于获取方案选择模块确定的最终热更新方案,针对该方案生成相应的补丁包;并在收到客户端的请求时,下发相应的补丁包;其中补丁服务器根据上传的最新版本的全量代码生成全量补丁包,或根据全量补丁包和任意历史版本的基础文件包的差异生成增量补丁包。增量补丁包包括版本增量包和模块增量包。全量补丁包为包含所有业务代码和资源文件的全量代码;版本增量包为仅包含当前被修改的业务代码和资源文件的增量代码;模块增量包为版本增量包拆包后剔除无需更新的模块的剩余的一个或多个独立的补丁包。
客户端中运行有用于实现项目工程的功能的应用程序,并在每次运行时向补丁服务器获取补丁信息,在补丁服务器中存在新的补丁包时,向补丁服务器发出补丁请求,将相应的补丁包下载到本地后,实现对应用程序进行热更新。
本发明提供的一种应用程序快速热更新的方法及其***;可以针对应用程序运行过程出现的各类型问题进行及时修复,绕开应用商店繁琐且耗时的审核过程,保障项目的正常运营。解决特定***下热更新效率低,范围窄的问题。因此,通过本发明可以大大的减少了人力、开发成本,提高应用程序的稳定性。
本发明通过一套完整方案,提供了多种情况下的热更新方案,使得热更新具有普遍性和灵活性,时效性也得到了保障。同时设计使用H5页面更新作为兜底方案,让热更新的范围覆盖至整个APP,保证了热更新的完整性。
本发明提供的方案中,优先采用基于React Native框架和基于JSON文件的方案。并将基于H5页面的更新方案作为及时性要求更高的营销类页面的更新方案,或者是作为其它两个方案无法实现问题修复时的兜底方案。因此相对于传统的热更新方案,保密性更高,安全性更强;能够有效保护用户和项目运营方的数据安全。
附图说明
通过附图中所示的本发明优选实施例更具体说明,本发明上述及其它目的、特征和优势将变得更加清晰。
图1为本发明实施例1中一种应用程序快速热更新的方法的流程图;
图2为本发明实施例1中热更新方案的选择方法的流程图;
图3为本发明实施例1中基于React Native框架的热更新方案的处理流程图;
图4为本发明实施例1中基于JSON文件的热更新方案的处理流程图;
图5为本发明实施例2中采用增量更新方式的应用程序快速热更新的方法的流程图;
图6为本发明实施例3中一种应用程序快速热更新的***的模块示意图。
具体实施方式
下面结合附图和具体实施例对本发明技术方案作进一步的详细描述,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
实施例1
本实施例提供一种应用程序快速热更新的方法,该方法用于在发现客户端中运行的项目出现问题时,针对项目的修复内容对应用程序进行快速的热更新,如图1所示,该方法包括如下流程:
根据需要修复的内容选择适用的热更新方案;热更新方案包括基于React Native框架的方案一,基于JSON文件的方案二,以及基于H5页面的方案三。方案一和方案二的优先级相同,且方案一和方案二的优先级大于方案三。
在本实施例中,热更新方案的选择方法如图2所示,具体过程如下:
(1)确定当前需要通过热更新完成修复的内容的类型;
(2)判断需要修复的内容是否为页面细节部分的元素问题或应用程序中需要更新的模块基于React Native框架编写的,是则选择方案一;否则进入下一步骤。
(3)判断需要热更新的模块中的内容是否为格式固定的表单展示页面或应用于程序中需要热更新的模块基于JSON文件设计的,是则选择方案二,否则进入下一步骤。
(4)当需要热更新的是营销类的页面,或方案一或方案二均无法完成问题修复时,选择方案三作为进行热更新的方案。
本实施例中,方案一属于基于React Native框架的热更新方案。该方案充分利用了React Native动态加载包的机制,在获取服务端下载的最新代码后替换本地代码,然后动态加载最新的代码来实现热更新。与本实施例中其它两类热更新方案不同的是,该方案不仅可以更新某些特定的模块,而且可以对APP内所有React Native框架编写的模块进行更新,这也使得该方案更加灵活,更适用于解决生产问题。
方案一可以快速、高效地实现应用程序热更新,如图3所示,具体的步骤如下:
(1)根据需要解决的问题对本地项目中的项目文件的代码进行修改,对修改后的项目文件进行打包,项目文件中包含对应的业务代码压缩文件和资源文件;并将项目文件压缩后上传至补丁服务器。
在实施过程中,本地的问题代码完成修改后,通过react-native bundle命令对当前React Native项目进行打包,以iOS***为例,具体命令如下:
react-native bundle --platform ios --dev false --entry-file index.js--bundle-output /example/ \
index.ios.jsbundle --assets-dest /examle/
运行该命令后,可以在对应目录下生成相应的index.ios.jsbundle文件和assets文件夹,二者分别包含业务代码压缩文件和需要调用的资源文件。其中,项目文件可以压缩成zip格式,然后上传至补丁服务器。
(2)补丁服务器根据上传的项目文件生成相应的补丁包,配置补丁包的版本号、补丁包对应的应用程序的版本号。然后输出补丁包的下载地址和补丁包的MD5值。
本实施例中,补丁服务器仅在客户端向补丁服务器发出请求时,根据发出请求的app的版本号,向客户端下发相应的补丁包文件。
(3)客户端启动时,首先查询当前补丁服务器中配置的最新的补丁信息。补丁信息至少包括:补丁包的版本号、补丁包的下载地址和补丁包的MD5值;然后判断本地的客户端中的应用程序的版本号与补丁服务器中发布的最新的补丁包对应的应用程序的版本号是否匹配;是则从补丁服务器中下载最新的补丁包,否则跳过热更新过程,正常启动客户端。
本实施例中,客户端中的app通过异步下载的方式将补丁从补丁服务器下载到本地。
(4)在上步骤的补丁包下载完成后,校验补丁包的MD5值,校验通过后将补丁包解压后替换客户端中应用程序的本地文件,替换完成后重新加载应用程序的代码,完成应用程序的热更新过程。
本实施例中的方案二主要基于描述视图的JSON配置文件(JSON Described View)完成应用程序的热更新过程。该方案通过服务端将热更新的JSON文件下发给客户端,客户端根据约定好的解析算法,逐步解析JSON文件,然后渲染出UI。该方案适用于格式比较固定的表单展示页面,在客户端需要预埋好相对应的事件处理,在表单内容需要做变更时,在服务端下发最新版本的JSON文件,更新到客户端即可。
方案二实现应用程序热更新的过程如图4所示,具体包括如下步骤:
(Ⅰ)根据应用程序中各模块的更新内容生成相应的JSON文件;JSON文件用于描述生成的页面,包括渲染出的页面的内容以及处理事件的类型;并将JSON文件上传至补丁服务器。
其中,客户端中的app应当首先定义好JSON文件的格式,包括可以渲染的UI内容类型、处理事件类型,在APP内部设置相应的UI视图解释器和事件解释器。UI视图解释器可以解析的内容包含但不限于元素的位置、背景色、大小、圆角等属性,通过解析把JSON描述的视图生成出来;事件解释器可以解析包含元素的点击、页面的跳转、元素之间的联动等属性,通过解析把整个JSON文件描述的页面或者模块串联起来。
(Ⅱ)补丁服务器根据上传的JSON文件生成相应的补丁包,配置补丁包的版本号、补丁包对应的应用程序的版本号;输出补丁包的下载地址和补丁包的MD5值。
(Ⅲ)客户端启动后,首先查询补丁服务器配置的最新的补丁信息;补丁信息至少包括:补丁包的版本号、补丁包的下载地址和补丁包的MD5值;然后在各个模块入口判断补丁服务器中是否发布有该模块的最新的补丁包;是则从补丁服务器中下载补丁包,否则跳过该模块的更新过程,正常运行该模块。
(Ⅳ)在上步骤的补丁包完成后,校验补丁包的MD5值,校验通过后,解析更新后的JSON文件进入热更新后的相应模块。
本实施例中,JSON文件生成的补丁包中还包含对补丁是否进行强制执行的配置信息;当补丁包中包含强制执行的配置信息时,相应的补丁在下载完成后强制执行,直接完成解析和模块热更新。进而可以达到灵活控制热更新进程,实现对必要修复内容的快速响应的效果。
其中,方案三实现应用程序热更新的过程中,通过H5页面实现应用程序的所有模块的功能,然后在H5页面中进行问题的修复;客户端启动后,直接访问热更新后的H5页面中的内容。客户端通过浏览器加载H5页面,H5页面的热更新内容上传到补丁服务器中;热更新后的H5页面使用原页面的链接,并替换原页面的内容。
H5页面要达到模拟原生的效果,除了H5页面自身的UI渲染之外,还需要和原生的功能进行交互,如相机、麦克风等,进而实现H5页面和原生功能的互通。热更新的H5页面通过JavaScript编程语言与运行客户端的设备中的原生功能进行交互,并通过JS Bridge通信机制(一种H5页面和设备原生功能的通信机制)实现数据互通和调用设备中原生功能的效果。
本发明提供的方案中,同时设计了三个实现对应用程序进行热更新的方法,其中方案一和方案二分别针对页面细节的模块化问题以及页面表单更新问题这两类最常见类型修复问题进行处理,可以达到快速解决问题的目的,对不同的故障类型具有较强的针对性。方案一和方案二的修复方法相对于常规的Web APP网页更新方式属于较为封闭的场景,所以具有更高的保密性和安全性。同时,为了保障各类型的故障修复进行可以快速完成热更新,本发明还将基于H5页面热更新方案作为本发明的兜底方案。当出现方案一和方案二都无法修复的问题时,可以切换到H5的页面,在H5端进行问题修复或者相关提示。由于H5页面具有不受限制的特性,在生产中可以灵活使用,从而修复各类复杂的线上问题。
实施例2
本实施例提供一种应用程序快速热更新的方法。在实施例1中,基于React Native框架的方案一采用的热更新方式是向客户端下发全量补丁,然后直接替换本地的文件。而在实施例1中React Native方案的基础上,本实施例还可以采用增量更新的方式完成应用程序的热更新。
采用增量更新的原因主要是考虑到当应用程序中的业务代码和图片资源等比较多时,上传和下载的全量补丁包的文件就会比较大。文件的上传和下载需要依赖设备和运营商的网络,会受到网络和设备中流量和网速的限制。因此为了提高用户体验,更快速、高效地完成热更新过程;应当要想办法将网络消耗降到最低。采用增量更新的方式就很好地克服了网络限制的问题。
增量更新通常时针对方案一的,将方案三作为兜底方案,因此采用增量更新的方式完成应用程序热更新时,本实施例中提供的一种应用程序快速热更新的方法的流程如图5所示。
在本实施例中对基于React Native框架的方案一采用增量更新的方式完成热更新;增量更新方式包括版本增量更新和功能模块增量更新两种方式。
其中,增量更新就是根据代码和资源的改动确定补丁包的文件内容和大小。原始文件的改动有多少增量补丁就有多少,那些没有改动的部分不被包含在补丁的范围内。
一方面,可以根据不同应用程序的版本剩下相应的增量包,计算过程采用数学语言描述就是:增量包=新版本-旧版本。同时考虑到运行在本地客户端上的应用程序的版本可能并不一致,包含了历史更新过程中的各个正式发布的历史版本,在热更新过程提供的补丁包也应该覆盖到所有的历史版本。
在本实施例中增量包的类型应当根据历史版本分为多个类型,以存在3个正式发布历史版本的app为例,增量包的计算过程如下:
新版本(V4)- 旧版本(V1、V2、V3)= 增量包(会有3个包,分为:V1-V4.zip,V2-V4.zip ,V3-V4.zip)。客户端找上的app根据自己的当前版本(比如V3),下载对应的增量包(V3-V4.zip)。并在app中通过 旧版本(V3) + 增量包(V3-V4.zip) = 新版本(V4) ,计算出了新版本的全量包。进而实现对app的更新过程。
在本实施例中,增量更新过程中,采用开源库中的“***-diff-match-patch”代码对不同版本的全量包中的字符串进行diff和patch操作,计算出针对不同版本的基础文件包的补丁包。具体的方法如下:
(1)补丁服务器生成增量包时使用如下公式:
patch_make(text1,text2) => patches
(2)客户端中的app生成全量包时使用如下公式:
patch_apply(patches,text1) => [text2,results]
本实施例通过以上拆分和合并的操作,减少了增量补丁包的大小,降低了数据传输过程对网络和设备的数据传输能力的要求 ,提高了打补丁的成功率。
基于上述内容的描述,将版本增量更新的方法总结如下:
(1)针对修复后的项目文件采用增量算法获得版本增量包,版本增量包中包含项目文件在修复过程中所有经过改动的内容;其中,版本增量包的数量为多个,包含任意一个历史版本更新至当前最新版本的增量包。
(2)将版本增量包上传到补丁服务器,并配置补丁信息。
(3)客户端从补丁服务器中下载自身的版本对应的版本增量包之后,将版本增量包与本地的基础文件包合并得到全量包,并利用全量包对本地客户端中应用程序进行更新。
另一方面,在版本增量包的基础上,还可以针对app中不同的模块,对补丁包进行进一步的拆分,通过这部分的优化,实现更细颗粒度地管理补丁下发过程的目的。
例如在本实施例中,完整的app的基础文件包括基础Common包、业务代码和ReactNative第三方库。其中,基础Common包、第三方库一般比较稳定,不需要频繁更新,而业务代码则需要经常更新,以适应不同的功能和业务。当本方案中需要进行热更新的代码模块较大,逻辑较复杂时,可以将文件拆分呈不同的模块,仅对需要进行更新的模块进行更新,达到降低代码数据量的效果。
具体实现是,将工程以拆分包的方式实现,在生成增量补丁时,会输出对应的包名,APP下载到补丁后,匹配对应拆分包的原始包,拆分包补丁和原始包生成拆分包的全量包,替换原来的拆分包,再重新加载工程,完成热更新。本实施例中拆分包的形式还可以减少补丁生成和合成的时间,降低代码和补丁的维护成本。
基于上述内容的描述,本实施例中的功能模块增量更新的方法总结如下:
(ⅰ)在生成的版本增量包的基础上,根据功能模块对版本增量包进行拆分包处理,剔除功能稳定、无需进行热更新的功能模块,剩余的基于一个或多个独立的模块的补丁包即为模块增量包;输出对应的模块增量包的包名。
(ⅱ)将模块增量包上传到补丁服务器,并配置补丁信息,补丁信息中至少还包括该模块增量包中包含的模块更新的说明。
(ⅲ)客户端从补丁服务器中下载相应的模块增量包之后,对本地基础文件包进行对应拆分,然后将拆分后的基础文件包与模块增量包合并,得到全量包;利用全量包替换本地的基础文件包之后,再重新加载应用程序的代码,完成热更新过程。
本实施例在实施例1的基础上,进一步采用增量更新的方式完成方案一的热更新过程中。设计了版本增量包和模块增量包两种不同的增量更新方式,从而最大化实现了对补丁包中文件数据量的缩减,降低了热更新过程对网络的依赖,缩短了文件传输时间,提高了热更新的成功率。达到更快速、更好的故障修复效果。
实施例3
本实施例提供一种应用程序快速热更新的***,该***采用前述的应用程序快速热更新的方法,对存在问题的项目进行快速热更新,修复项目中的出现的问题。如图6所示,该***包括:项目工程模块,boudle仓库,补丁服务器,客户端,以及方案选择模块。
其中,方案选择模块用于根据当前修复的问题类型,选择最佳的热更新方案,热更新方案包括基于React Native框架的方案一,基于JSON文件的方案二,以及基于H5页面的方案三。在实际应用过程中,该模块可以是一个根据程序实现机器识别的模块,也可以是一个由人工决策和控制的选择模块。
项目工程模块中包含存储在本地的与实现客户端中应用程序正常运行相关的所有工程代码;项目中存在的问题的修复过程需要通过修改工程代码解决。
boudle仓库用于管理项目中的工程代码;boudle仓库在每次修复问题之后,将修改后的全量代码上传到一个补丁服务器中。
补丁服务器用于获取方案选择模块确定的最终热更新方案,针对该方案生成相应的补丁包;并在收到客户端的请求时,下发相应的补丁包;其中补丁服务器根据上传的最新版本的全量代码生成全量补丁包,或根据全量补丁包和任意历史版本的基础文件包的差异生成增量补丁包。增量补丁包包括版本增量包和模块增量包。全量补丁包为包含所有业务代码和资源文件的全量代码;版本增量包为仅包含当前被修改的业务代码和资源文件的增量代码;模块增量包为版本增量包拆包后剔除无需更新的模块的剩余的一个或多个独立的补丁包。
客户端中运行有用于实现项目工程的功能的应用程序,并在每次运行时向补丁服务器获取补丁信息,在补丁服务器中存在新的补丁包时,向补丁服务器发出补丁请求,将相应的补丁包下载到本地后,实现对应用程序进行热更新。
本实施例中,整个项目修复共涉及到三种热更新方案,因此需要根据要修复的内容,通过方案选择模块选择对应的方案。方案选择模块在决策过程中,针对比较细颗粒度的问题,例如页面中的细节部分的元素或内容发生错误,可以优先考虑使用React Native的方案。该方法可以直接修复JavaScript端的问题,相对更加灵活和轻便。而对于JSON配置文件,则适用于APP内使用表单的模块,这类型的模块比较有规律性,可以通过JSON配置文件的来控制UI和事件处理。使用H5来做热更新通常是营销页面等实时性比较强的页面,另外,H5页面还可以作为前面两种方案的兜底方案,H5页面实现APP的所有功能。当出现问题而用React Native方案和JSON文件方案均无法完成修复时,可以通过配置开关切换到H5页面来实现APP的功能,然后在H5页面进行问题的修复,以达到热修复的效果。
整个流程涉及到四个主体,分别是项目工程、bundle仓库、补丁服务器和客户端。项目工程是我们本地工程代码,在发现线上问题,在原工程进行修复完成之后,将修改后代码提交到bundle仓库。bundle仓库是管理项目代码的地方。
基于bundle仓库最新的项目代码,通过CI脚本,执行react-native bundle命令,可以生成补丁包。这里可以生成两种形式的补丁包,一是全量的补丁包,包含了全量代码的jsbundle文件和assets资源文件。二是业务代码的补丁包,仅包含了业务代码的jsbundle文件和assets资源文件。此外,第二种形式还可以将整个业务代码的补丁包根据模块名再拆分成相对独立的模块补丁包,这样可以更精准的进行补丁操作,减少生成包含冗余代码的补丁。同时,生成原始工程的基准包,包括全量基准包和各模块基准包,用于处理后续的增量补丁。
本实施例需要使用支持HTTP请求的补丁服务器,以及后台的管理人员,来支持补丁的上传、下载、删除等基本操作。在上传完补丁后,需要做补丁的相关配置。
以补丁的全量包增量更新为例。上传全量的补丁包到补丁服务器,选择补丁的更新方式为增量更新,这时需要同步上传全量的基准包,然后补丁服务器对这两个包进行diff计算,生成增量补丁包,以及对应的MD5值,同时配置补丁包的版本号以及补丁包对应的应用程序的版本号,这样就完成了补丁包和应用程序版本的一一对应。
配置完成后,打开应用程序,客户端会先请求补丁服务器的补丁信息,补丁服务器用发出请求的应用程序的版本信息去匹配是否包含该版本的最新补丁包,如果不包含,告知应用程序直接跳过流程,无需更新补丁。如果包含,则返回对应补丁包的信息,包括补丁包的下载地址、版本号、MD5值、是否是增量补丁包等等。应用程序用本地补丁版本号与其进行对比,确定需要更新补丁后,异步下载增量补丁包。解压下载后的增量补丁包,使用diff算法和本地代码生成全量包,将此全量包替换本地代码,同时更新本地的补丁版本号,完成替换后重新加载应用程序。至此,应用程序的热更新过程完成。
本实施例中,给出了实施如实施例1或2中的一种应用程序快速热更新的方法的完整的***的部署方案,在实际应用中,通过这样的***可以快速及时应对项目中出现的各种问题,及时、灵活、准确地对各种项目问题进行热更新和维护,消除问题对项目运营过程产生的影响。
以上仅为本发明的优选实施例,并非因此限制本发明的保护范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的保护范围内。
Claims (9)
1.一种应用程序快速热更新的方法,其用于在发现客户端中运行的项目出现问题时,针对项目的修复内容对应用程序进行快速热更新,其特征在于,所述方法包括如下步骤:
根据需要修复的内容选择适用的热更新方案;所述热更新方案包括基于React Native框架的方案一,基于JSON文件的方案二,以及基于H5页面的方案三;
所述方案一实现应用程序热更新的过程如下:(1)根据需要解决的问题对本地项目中的项目文件的代码进行修改,对修改后的项目文件进行打包;所述项目文件中包含对应的业务代码压缩文件和资源文件;并将所述项目文件压缩后上传至补丁服务器;(2)补丁服务器根据上传的所述项目文件生成相应的补丁包,配置补丁包的版本号、补丁包对应的应用程序的版本号;输出补丁包的下载地址和补丁包的MD5值;(3)客户端启动时,首先查询当前补丁服务器中配置的最新的补丁信息;所述补丁信息至少包括:补丁包的版本号、补丁包的下载地址和补丁包的MD5值;然后判断本地的客户端中的应用程序的版本号与补丁服务器中发布的最新的补丁包对应的应用程序的版本号是否匹配;是则从所述补丁服务器中下载最新的补丁包,否则跳过热更新过程,正常启动客户端;(4)在上步骤的补丁包下载完成后,校验补丁包的MD5值,校验通过后将所述补丁包解压后替换客户端中应用程序的本地文件,替换完成后重新加载应用程序的代码,完成应用程序的热更新过程;
所述方案二实现应用程序热更新的过程如下:(Ⅰ)根据应用程序中各模块的更新内容生成相应的JSON文件,所述应用程序中包含UI视图解释器和事件解释器;所述UI视图解释器用于解析页面中内容属性,包括元素的位置、背景色、元素的大小和圆角;所述UI视图解释器通过解析将JSON文件描述的视图生成出来;所述事件解释器用于解析页面中的动作属性,包含元素的点击、页面的跳转、元素之间的联动;所述事件解释器通过解析将JSON文件描述的页面或模块串联起来;所述JSON文件用于描述生成的页面,包括渲染出的页面的内容以及处理事件的类型;并将所述JSON文件上传至补丁服务器;(Ⅱ)补丁服务器根据上传的所述JSON文件生成相应的补丁包,配置补丁包的版本号、补丁包对应的应用程序的版本号;输出补丁包的下载地址和补丁包的MD5值;(Ⅲ)客户端启动后,首先查询补丁服务器配置的最新的补丁信息;所述补丁信息至少包括:补丁包的版本号、补丁包的下载地址和补丁包的MD5值;然后在各个模块入口判断所述补丁服务器中是否发布有该模块的最新的补丁包;是则从所述补丁服务器中下载所述补丁包,否则跳过该模块的更新过程,正常运行该模块;(Ⅳ)在上步骤的补丁包完成后,校验补丁包的MD5值,校验通过后,解析更新后的JSON文件进入热更新后的相应模块中;
所述方案三实现应用程序热更新的过程中,通过H5页面实现应用程序的所有模块的功能,然后在H5页面中进行问题的修复,客户端启动后,直接访问热更新后的H5页面中的内容。
2.根据权利要求1所述的应用程序快速热更新的方法,其特征在于:三个所述热更新方案的优先级顺序如下:方案一与方案二优先级相同,且方案一和方案二的优先级大于方案三。
3.根据权利要求2所述的应用程序快速热更新的方法,其特征在于:针对三种不同热更新方案的选择方法如下:
(a)当需要修复的内容为页面细节部分的元素问题或所述应用程序中需要更新的模块基于React Native框架编写时,优先选择方案一;
(b)当所述应用程序中需要热更新的模块中的内容是格式固定的表单展示页面或所述应用于程序中需要热更新的模块基于JSON文件设计时,优先选择方案二;
(c)当需要热更新的是营销类的页面,或方案一或方案二均无法完成问题修复时,选择方案三作为进行热更新的方案。
4.根据权利要求1所述的应用程序快速热更新的方法,其特征在于:所述JSON文件生成的补丁包中还包含对补丁是否进行强制执行的配置信息;当所述补丁包中包含强制执行的配置信息时,相应的补丁在下载完成后强制执行,直接完成解析和模块热更新。
5.根据权利要求1所述的应用程序快速热更新的方法,其特征在于:所述方案三中,客户端通过浏览器加载H5页面,H5页面的热更新内容上传到补丁服务器中;热更新后的H5页面使用原页面的链接,并替换原页面的内容。
6.根据权利要求5所述的应用程序快速热更新的方法,其特征在于:所述热更新的H5页面通过JavaScript编程语言与运行客户端的设备中的原生功能进行交互,并通过JSBridge通信机制实现数据互通和调用设备中原生功能的效果。
7.根据权利要求6所述的应用程序快速热更新的方法,其特征在于:方案一还可以采用增量更新方式完成应用程序及其模块的热更新过程;所述增量更新方式包括版本增量更新和功能模块增量更新两种方式;
其中,所述版本增量更新的方法如下:(1)针对修复后的项目文件采用增量算法获得版本增量包,所述版本增量包中包含项目文件在修复过程中所有经过改动的内容;所述版本增量包的数量为多个,包含任意一个历史版本更新至当前最新版本的增量包;(2)将版本增量包上传到补丁服务器,并配置补丁信息;(3)客户端从补丁服务器中下载自身的版本对应的版本增量包之后,将版本增量包与本地的基础文件包合并得到全量包,并利用全量包对本地客户端中的应用程序进行更新;
所述功能模块增量更新的方法如下:(ⅰ)在生成的版本增量包的基础上,根据功能模块对版本增量包进行拆分包处理,剔除功能稳定、无需进行热更新的功能模块,剩余的基于一个或多个独立的模块的补丁包即为模块增量包;输出对应的模块增量包的包名;(ⅱ)将模块增量包上传到补丁服务器,并配置补丁信息,所述补丁信息中至少还包括该模块增量包中包含的模块更新的说明;(ⅲ)客户端从补丁服务器中下载相应的模块增量包之后,对本地基础文件包进行对应拆分,然后将拆分后的基础文件包与模块增量包合并,得到全量包;利用全量包替换本地的基础文件包之后,再重新加载应用程序的代码,完成热更新过程。
8.根据权利要求7所述的应用程序快速热更新的方法,其特征在于,增量更新过程中,采用开源库中的“***-diff-match-patch”代码对不同版本的全量包中的字符串进行diff和patch操作,计算出针对不同版本的基础文件包的补丁包。
9.一种应用程序快速热更新的***,其特征在于,所述***采用权利要求1-8中任意一项所述的应用程序快速热更新的方法,对存在问题的项目进行快速热更新,修复项目中的出现的问题;所述***包括:
方案选择模块,其用于根据当前修复的问题类型,选择最佳的热更新方案,热更新方案包括基于React Native框架的方案一,基于JSON文件的方案二,以及基于H5页面的方案三;
项目工程模块,其用于在存储与实现客户端中应用程序正常运行相关的所有工程代码;项目中存在的问题的修复过程需要通过修改工程代码解决;
boudle仓库,其用于管理项目中的工程代码;boudle仓库在每次修复问题之后,将修改后的全量代码上传到一个补丁服务器中;
补丁服务器,其用于获取所述方案选择模块确定的最终热更新方案,针对该方案生成相应的补丁包;并在收到一个客户端的请求时,下发相应的补丁包;其中,所述补丁服务器根据上传的最新版本的全量代码生成全量补丁包,或根据所述全量补丁包和任意历史版本的基础文件包的差异生成增量补丁包;所述增量补丁包包括版本增量包和模块增量包;所述全量补丁包为包含所有业务代码和资源文件的全量代码;所述版本增量包为仅包含当前被修改的业务代码和资源文件的增量代码;所述模块增量包为所述版本增量包经拆包后剔除无需更新的模块后,剩余的一个或多个独立的补丁包;
客户端,其用于运行实现项目工程的功能的应用程序,并在每次运行时向所述补丁服务器获取补丁信息,在所述补丁服务器中存在新的补丁包时,向所述补丁服务器发出补丁请求,将相应的补丁包下载到本地后,实现对应用程序进行热更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111007964.5A CN113448611B (zh) | 2021-08-31 | 2021-08-31 | 一种应用程序快速热更新的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111007964.5A CN113448611B (zh) | 2021-08-31 | 2021-08-31 | 一种应用程序快速热更新的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113448611A CN113448611A (zh) | 2021-09-28 |
CN113448611B true CN113448611B (zh) | 2021-11-30 |
Family
ID=77819156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111007964.5A Active CN113448611B (zh) | 2021-08-31 | 2021-08-31 | 一种应用程序快速热更新的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113448611B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114020321B (zh) * | 2021-11-09 | 2023-08-18 | 江苏点石乐投科技有限公司 | 一种基于用户行为数据的智能应用界面制定***和方法 |
CN114265859B (zh) * | 2021-12-20 | 2022-09-02 | 上海爱可生信息技术股份有限公司 | 一种通过增强数据库驱动实现语句审核的方法 |
CN113961224B (zh) * | 2021-12-23 | 2022-03-08 | 中邮消费金融有限公司 | 基于Android端的应用程序更新方法及*** |
CN114756234B (zh) * | 2022-06-13 | 2022-09-30 | 中邮消费金融有限公司 | 基于传统应用和动态配置策略的app开发方法 |
CN116257278B (zh) * | 2023-05-15 | 2023-10-31 | 北京阿帕科蓝科技有限公司 | 一种应用软件的补丁执行方法和存储介质 |
CN117827261A (zh) * | 2024-03-06 | 2024-04-05 | 暗物智能科技(广州)有限公司 | 基于字符串的Electron应用增量更新方法、***、介质及终端 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106789249A (zh) * | 2016-12-22 | 2017-05-31 | 北京五八信息技术有限公司 | 热更新方法、客户端及服务器 |
CN108076147A (zh) * | 2017-12-13 | 2018-05-25 | 上海哔哩哔哩科技有限公司 | 互联网服务的服务端渲染热更新方法、***及存储介质 |
CN109032638A (zh) * | 2018-07-18 | 2018-12-18 | 广州宸瑞软件科技有限公司 | 移动应用软件的热更新方法、服务器和移动终端 |
WO2019019643A1 (zh) * | 2017-07-26 | 2019-01-31 | 深圳壹账通智能科技有限公司 | 应用程序热更新方法、装置、终端和存储介质 |
CN109445833A (zh) * | 2018-11-09 | 2019-03-08 | 苏宁消费金融有限公司 | 一种React-native热更新的方法 |
CN109491695A (zh) * | 2018-10-19 | 2019-03-19 | 华南理工大学 | 一种集成安卓应用的增量更新方法 |
WO2020253469A1 (zh) * | 2019-06-20 | 2020-12-24 | 京东方科技集团股份有限公司 | 脚本文件包的热更新方法及装置 |
CN112799703A (zh) * | 2021-02-01 | 2021-05-14 | 微民保险代理有限公司 | 资源文件的处理方法、装置、客户端及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112286504B (zh) * | 2020-11-12 | 2024-05-24 | 普元信息技术股份有限公司 | 移动APP中基于ReactNative实现小程序开发并加载的方法 |
CN112463198B (zh) * | 2020-12-09 | 2021-06-22 | 深圳智药科技有限公司 | 基于Electron的更新方法及*** |
-
2021
- 2021-08-31 CN CN202111007964.5A patent/CN113448611B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106789249A (zh) * | 2016-12-22 | 2017-05-31 | 北京五八信息技术有限公司 | 热更新方法、客户端及服务器 |
WO2019019643A1 (zh) * | 2017-07-26 | 2019-01-31 | 深圳壹账通智能科技有限公司 | 应用程序热更新方法、装置、终端和存储介质 |
CN108076147A (zh) * | 2017-12-13 | 2018-05-25 | 上海哔哩哔哩科技有限公司 | 互联网服务的服务端渲染热更新方法、***及存储介质 |
CN109032638A (zh) * | 2018-07-18 | 2018-12-18 | 广州宸瑞软件科技有限公司 | 移动应用软件的热更新方法、服务器和移动终端 |
CN109491695A (zh) * | 2018-10-19 | 2019-03-19 | 华南理工大学 | 一种集成安卓应用的增量更新方法 |
CN109445833A (zh) * | 2018-11-09 | 2019-03-08 | 苏宁消费金融有限公司 | 一种React-native热更新的方法 |
WO2020253469A1 (zh) * | 2019-06-20 | 2020-12-24 | 京东方科技集团股份有限公司 | 脚本文件包的热更新方法及装置 |
CN112799703A (zh) * | 2021-02-01 | 2021-05-14 | 微民保险代理有限公司 | 资源文件的处理方法、装置、客户端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113448611A (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113448611B (zh) | 一种应用程序快速热更新的方法及*** | |
US7716414B2 (en) | Method for updating a mobile device using an update package obtained from a remote server | |
CN108279932B (zh) | 一种移动终端动态配置用户界面方法和装置 | |
CN102523268B (zh) | 一种客户端升级方法和*** | |
CN110334021B (zh) | 接口测试案例的生成方法、装置、设备及存储介质 | |
CN112181477B (zh) | 复杂事件处理方法、装置及终端设备 | |
CN113064630B (zh) | 移动端app自动打包方法、***、电子设备及存储介质 | |
US20170262263A1 (en) | Process and system for the generation of an operating program in the form of a mobile application that is capable of operating on a mobile device | |
CN111209001A (zh) | 批量生成安卓各渠道apk的方法、***、设备和介质 | |
CN113641582A (zh) | 混合模式移动应用调试方法及*** | |
CN112149035A (zh) | 网站静态资源处理方法及装置 | |
CN115617780A (zh) | 数据导入方法、装置、设备及存储介质 | |
CN109918113A (zh) | Ios应用热修复/热更新方法、服务器及存储介质 | |
CN106649581A (zh) | 一种网页的修复方法以及客户端 | |
CN115129574A (zh) | 一种代码测试方法和装置 | |
CN115185489B (zh) | 一种时序数据算法组态***和方法 | |
CN113641580B (zh) | 混合模式移动应用调试方法及*** | |
CN113469740A (zh) | 广告数据获取方法、装置、设备及存储介质 | |
CN114385503A (zh) | 接口测试方法、装置、设备及存储介质 | |
CN114489854A (zh) | 模块化的软件开发方法、***、设备及存储介质 | |
CN114168146A (zh) | 一种补丁包生成方法、装置以及设备 | |
CN112947943A (zh) | 软件配置编译方法、电子设备以及可读存储介质 | |
CN113626330A (zh) | 混合模式移动应用调试方法及*** | |
CN113157308A (zh) | 一种软件打包的方法、装置及*** | |
CN111427770A (zh) | 一种资源测试方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |