CN111026401A - 一种移动端热修复方法 - Google Patents
一种移动端热修复方法 Download PDFInfo
- Publication number
- CN111026401A CN111026401A CN201911232763.8A CN201911232763A CN111026401A CN 111026401 A CN111026401 A CN 111026401A CN 201911232763 A CN201911232763 A CN 201911232763A CN 111026401 A CN111026401 A CN 111026401A
- Authority
- CN
- China
- Prior art keywords
- mobile terminal
- hot repair
- script
- syntax tree
- abstract syntax
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- 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)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种移动端热修复方法,涉及移动互联网技术领域,用于在移动端app启动时更新app和/或修复漏洞,包括如下步骤:启动移动端app和热修复引擎,初始化内置符号表,获取并解析热修复脚本,生成抽象语法树,执行热修复脚本,移动端app根据解析出的热修复脚本更新app和/或修复漏洞,根据抽象语法树执行app程序。本发明执行效率高、无需开发人员熟悉脚本语言。
Description
【技术领域】
本发明涉及移动互联网领域,具体涉及一种移动端热修复方法。
【背景技术】
现有技术中,移动端app热修复主要是借助于脚本语言来实现。依赖的脚本语言以JavaScript、Lua为主。当前的移动设备(手机和平板电脑)主要有两类系统:安卓系统和iOS系统。iOS系统上的软件需要使用Objective-C或者Swift语言进行开发,安卓系统上的软件需要使用Java或者Kotlin编程语言进行开发。若出现需要热修复的情况,开发人员需要先在原生上测试完成之后,然后将正确的代码转化为对应的脚本语言进行下发才能实现最终的热修复。
但是现有技术中的热修复方法仍有不足:一方面,原生修复之后转换成对应的脚本语言二次调试,增加了调试时间,大幅降低线上问题响应速度;另一方面,开发人员需要熟悉脚本语言,对开发人员的技术栈提出了硬性要求;三,脚本语言是一种解释性语言,苹果明令禁止这种动态下发脚本语言热修复的方式,一经发现,直接拒审。
【发明内容】
为解决前述问题,本发明提供了一种移动端热修复方法,执行效率高、无需开发人员熟悉脚本语言。
为了达到上述目的,本发明采用如下技术方案:
一种移动端热修复方法,包括如下步骤:
启动热修复引擎,初始化内置符号表;
获取热修复脚本;
解析热修复脚本,生成抽象语法树;
执行热修复脚本,根据解析出的热修复脚本进行移动端更新和/或修复;
根据抽象语法树执行移动端程序。
可选的,所述内置符号表为散列表,用以将热修复脚本中的标识符与程序设计语言的关键字一一对应,使热修复脚本中的标识符转换为字符流。
可选的,所述程序设计语言为C语言。
可选的,所述内置符号表在移动端和热修复脚本中通用。
可选的,解析热修复脚本时,所述字符流作为输入,通过正则匹配的方式生成对应的符号流,再以符号流作为输入,解析生成抽象语法树初版,随后语义分析解析生成有效的抽象语法树。
可选的,移动端更新和/或修复时,根据有效的抽象语法树,通过移动端的原生系统语言完成。
可选的,热修复引擎内置通用步骤,执行移动端程序时,当执行到需要修复的步骤时,跳转到热修复引擎内置的通用步骤,执行与热修复引擎内置的通用步骤相对应的有效的抽象语法树,完成步骤执行。
可选的,初始化内置符号表以后,热修复引擎以当前移动端的版本号获取与所述版本号相对应的热修复脚本,如果获取成功,则进行热修复脚本的解析和执行,如果获取失败或无相对应的热修复脚本,则移动端热修复方法结束。
本发明具有如下有益效果:
本发明所提供的移动端app热修复方法,由于开发人员只需要将原生代码做一点小改动即可当做热修复脚本进行下发,无需转换成对应的脚本语言,因此无需进行二次调试,节约了调试的时间,提升了线上问题的响应速度;并且,热修复引擎是基于C语言实现的,执行效率远高于脚本语言,并且无需开发人员熟悉脚本语言,降低了对于技术人员的技术要求;同时,热修复引擎依赖的词法解析器属于移动端系统原生支持,大幅降低审核被拒风险。
【附图说明】
下面结合附图对本发明作进一步说明:
图1为本发明实施例的整体工作流程图;
图2为本发明实施例解析热修复脚本的流程图;
图3为本发明实施例中抽象语法树的示意图。
【具体实施方式】
下面结合本发明实施例的附图对本发明实施例的技术方案进行解释和说明,但下述实施例仅为本发明的优选实施例,并非全部。基于实施方式中的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得其他实施例,都属于本发明的保护范围。
在本说明书中引用的“一个实施例”或“实例”或“例子”意指结合实施例本身描述的特定特征、结构或特性可被包括在本专利公开的至少一个实施例中。短语“在一个实施例中”在说明书中的各位置的出现不必都是指同一个实施例。
实施例:
如图1和图2所示,一种移动端app热修复方法,用于在移动端app启动时更新app和/或修复漏洞,其特征在于,移动端app热修复方法包括如下步骤:
启动移动端app,热修复引擎随移动端app启动而启动,初始化内置符号表。内置符号表为散列表,用以将热修复脚本中的标识符与程序设计语言的关键字一一对应,使热修复脚本中的标识符转换为字符流。具体到本实施例中,所采用的的程序设计语言为C语言。本实施例所提供的内置符号表,
将常用的标识符和内置符号表的声明或者使用信息绑定在一起,因此在解析热修复脚本的时候,遇到该类标识符,热修复引擎自动识别该类标识符如何链接使用,如下表所示,为一个简易的符号表,例如,解析热修复脚本过程中遇到“CGPoint”标识符,热修复引擎根据内置符号表中的说明,知悉其代表的是一个“struct”,因此,热修复引擎会直接按照“struct”来解析该段热修复脚本:
类型 | 名称 |
Block | dispatch_source_create |
Blcck | dispatch_time |
Int | DISPAICH_BLOCK_BARRIER |
Struct | CGPoint |
Struct | NSRunloopCommonModes |
并且,内置符号表在移动端app和热修复脚本中通用。
初始化内置符号表以后,热修复引擎以当前移动端app的版本号获取与版本号相对应的热修复脚本,如果获取成功,则进行热修复脚本的解析和执行,即热修复的后续步骤,如果获取失败或无相对应的热修复脚本,则移动端app热修复方法结束。
解析热修复脚本,生成抽象语法树。解析热修复脚本时,先以字符流作为输入,通过正则匹配的方式生成对应的符号流。字符流到符号流的过程,依赖的是预先定义的规则,规则的定义核心是正则表达式匹配。图3是用“1+2+3+4=”做示例的,对应的规则以及符号信息如下表所示,通过正则匹配的方式完成字符流到符号流的转化:
规则 | 符号 | 说明 |
[1-][0-9]<sup>*</sup> | NUMBER | 数定 |
+ | PLUS | 加法 |
= | ASSIGN | 赋值 |
[\t] | 空格等忽略 |
符号流到抽象语法树初版的转化模拟编程语法来完成,仍然以“1+2+3+4=”为例,如图3所示,一个加法运算包含一个左操作数、一个右操作数和一个运算符,因此,其对应的编程语法为“左操作数+右操作数”,而操作数可能是一个数字也可能是一个运算语句(expr),因此“1+2+3+4”可以理解成“expr+4”,对应的符号流就是“expr PLUS NUMBER”,而expr进一步解析成对应的符号流就是“expr1 PLUS NUMBER”,一直解析到最小符号单位,随后,语义分析解析生成有效的抽象语法树。
抽象语法树初版经过语义分析生成有效的抽象语法树,仍以“+”运算符为例,从表达式“expr+1”中可以看出,左操作数是一个字符串,右操作数是一个数字,经语义分析可以推断出,该表达式的结果仍是一个字符串,因此,右操作数需要以字符串的方式来处理,因此,将右操作数转换为字符串,从而完成有效的抽象语法树的生成。
执行热修复脚本,移动端app根据解析出的热修复脚本更新app和/或修复漏洞。程序的执行其实质就是各个函数调用的过程,而函数调用是通过栈完成的。每一个函数所维护的信息部分叫做栈帧,栈帧中包含了该函数指针地址。因此热修复引擎解析完成之后,获取需要修复的函数列表,为每一个函数动态生成一个新的函数,并将新函数的函数地址替换掉原栈帧中存储的函数地址,因此,程序在执行到该函数的时候,会自动调用到新函数中,而不是原问题函数,从而完成热修复。
依赖于解析出来的抽象语法树,借助于原生系统语言的动态性完成类/方法的修复或者实现的替换。
根据抽象语法树执行app程序,更新app和/或修复漏洞时,根据有效的抽象语法树,通过移动端的原生系统语言完成。
在本实施例中,热修复引擎内置通用步骤,通用步骤属于本领域技术人员皆知的技术,在此不再赘述。执行app程序时,当执行到需要修复的步骤时,则进行步骤重定向,跳转到热修复引擎内置的通用步骤,执行与热修复引擎内置的通用步骤相对应的有效的抽象语法树,完成步骤执行。
本实施例所提供的移动端app热修复方法,由于开发人员只需要将原生代码做一点小改动即可当做热修复脚本进行下发,无需转换成对应的脚本语言,因此无需进行二次调试,节约了调试的时间,提升了线上问题的响应速度;并且,热修复引擎是基于C语言实现的,执行效率远高于脚本语言,并且无需开发人员熟悉脚本语言,降低了对于技术人员的技术要求;同时,热修复引擎依赖的词法解析器属于移动端系统原生支持,大幅降低审核被拒风险。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,熟悉该本领域的技术人员应该明白本发明包括但不限于附图和上面具体实施方式中描述的内容。任何不偏离本发明的功能和结构原理的修改都将包括在权利要求书的范围中。
Claims (8)
1.一种移动端热修复方法,其特征在于,所述移动端热修复方法包括如下步骤:
启动热修复引擎,初始化内置符号表;
获取热修复脚本;
解析热修复脚本,生成抽象语法树;
执行热修复脚本,根据解析出的热修复脚本进行移动端更新和/或修复;
根据抽象语法树执行移动端程序。
2.根据权利要求1所述的移动端热修复方法,其特征在于:所述内置符号表为散列表,用以将热修复脚本中的标识符与程序设计语言的关键字一一对应,使热修复脚本中的标识符转换为字符流。
3.根据权利要求2所述的移动端热修复方法,其特征在于:所述程序设计语言为C语言。
4.根据权利要求1所述的移动端热修复方法,其特征在于:所述内置符号表在移动端和热修复脚本中通用。
5.根据权利要求2所述的移动端热修复方法,其特征在于:解析热修复脚本时,所述字符流作为输入,通过正则匹配的方式生成对应的符号流,再以符号流作为输入,解析生成抽象语法树初版,随后语义分析解析生成有效的抽象语法树。
6.根据权利要求1所述的移动端热修复方法,其特征在于:移动端更新和/或修复时,根据有效的抽象语法树,通过移动端的原生系统语言完成。
7.根据权利要求1所述的移动端热修复方法,其特征在于:热修复引擎内置通用步骤,执行移动端程序时,当执行到需要修复的步骤时,跳转到热修复引擎内置的通用步骤,执行与热修复引擎内置的通用步骤相对应的有效的抽象语法树,完成步骤执行。
8.根据权利要求1所述的移动端热修复方法,其特征在于:初始化内置符号表以后,热修复引擎以当前移动端的版本号获取与所述版本号相对应的热修复脚本,如果获取成功,则进行热修复脚本的解析和执行,如果获取失败或无相对应的热修复脚本,则移动端热修复方法结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911232763.8A CN111026401A (zh) | 2019-12-05 | 2019-12-05 | 一种移动端热修复方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911232763.8A CN111026401A (zh) | 2019-12-05 | 2019-12-05 | 一种移动端热修复方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111026401A true CN111026401A (zh) | 2020-04-17 |
Family
ID=70207577
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911232763.8A Pending CN111026401A (zh) | 2019-12-05 | 2019-12-05 | 一种移动端热修复方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111026401A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115296999A (zh) * | 2022-09-28 | 2022-11-04 | 深圳依时货拉拉科技有限公司 | 移动端热修复方法、装置、热修复系统及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823694A (zh) * | 2014-02-10 | 2014-05-28 | 深圳市同洲电子股份有限公司 | 一种脚本文件的更新方法及装置 |
CN108920133A (zh) * | 2018-06-14 | 2018-11-30 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
CN109117209A (zh) * | 2018-07-23 | 2019-01-01 | 广州多益网络股份有限公司 | 序列化和反序列化方法及装置 |
CN110096264A (zh) * | 2019-04-29 | 2019-08-06 | 珠海豹好玩科技有限公司 | 一种代码运行方法及装置 |
-
2019
- 2019-12-05 CN CN201911232763.8A patent/CN111026401A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823694A (zh) * | 2014-02-10 | 2014-05-28 | 深圳市同洲电子股份有限公司 | 一种脚本文件的更新方法及装置 |
CN108920133A (zh) * | 2018-06-14 | 2018-11-30 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
CN109117209A (zh) * | 2018-07-23 | 2019-01-01 | 广州多益网络股份有限公司 | 序列化和反序列化方法及装置 |
CN110096264A (zh) * | 2019-04-29 | 2019-08-06 | 珠海豹好玩科技有限公司 | 一种代码运行方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115296999A (zh) * | 2022-09-28 | 2022-11-04 | 深圳依时货拉拉科技有限公司 | 移动端热修复方法、装置、热修复系统及可读存储介质 |
CN115296999B (zh) * | 2022-09-28 | 2023-01-10 | 深圳依时货拉拉科技有限公司 | 移动端热修复方法、装置、热修复系统及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106933609B (zh) | Android应用程序安装包的生成方法及装置 | |
CN103019928B (zh) | 一种自动化测试方法和系统 | |
US9122540B2 (en) | Transformation of computer programs and eliminating errors | |
US9086899B2 (en) | Loading and debugging method and debugging system thereof | |
US8051408B1 (en) | Method of providing interactive usage descriptions based on source code analysis | |
CN108132808B (zh) | 一种渠道包生成方法及装置 | |
CN110471663B (zh) | 一种代码编译方法、装置及电子设备 | |
CN110543427A (zh) | 测试用例存储方法、装置、电子设备及存储介质 | |
CN111061486B (zh) | 一种安卓应用程序增量方法 | |
JP7409197B2 (ja) | ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 | |
CN112667287A (zh) | 规则文件的创建方法、装置、设备及计算机可读存储介质 | |
CN111026401A (zh) | 一种移动端热修复方法 | |
CN111596970B (zh) | 动态库延迟加载方法、装置、设备和存储介质 | |
CN107729043B (zh) | 增量升级包的校验方法、装置和计算机可读存储介质 | |
CN110750310B (zh) | 基于ios系统组件化开发的二进制和源码切换方法 | |
CN111913704A (zh) | 一种基于VSCode快速开发GSP7脚本的方法及插件工具 | |
CN115407997A (zh) | 基于低代码的敏捷开发应用方法及系统 | |
CN111796832B (zh) | 热补丁文件生成方法、装置、设备及存储介质 | |
CN112328503A (zh) | 一种软件开发工作平台任务验收方法 | |
CN113641361B (zh) | 一种基于Clang的代码隐藏方法及装置 | |
CN112052012B (zh) | 基于xslt和xsd的代码自动生成方法和设备 | |
CN113467860B (zh) | 一种程序源代码的业务逻辑执行方法及装置 | |
WO2012079531A1 (zh) | 提升移动微件widget应用性能的方法及装置 | |
CN112579094B (zh) | 一种基于模板代码匹配的轻量级热修复方法 | |
CN114610616A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200417 |