CN107203402A - 一种对运行代码进行热修复的方法 - Google Patents
一种对运行代码进行热修复的方法 Download PDFInfo
- Publication number
- CN107203402A CN107203402A CN201710221561.8A CN201710221561A CN107203402A CN 107203402 A CN107203402 A CN 107203402A CN 201710221561 A CN201710221561 A CN 201710221561A CN 107203402 A CN107203402 A CN 107203402A
- Authority
- CN
- China
- Prior art keywords
- code
- hot repair
- application program
- code segment
- injection
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明的技术方案包括一种对运行代码进行热修复的方法,用于实现:对代码段进行分析并多个代码块注入对应的多个埋点代码,同时生成对应的应用程序发布器,其中发布器用于将应用程序发送至用户;当运行时应用程序的代码段需要修改时,使用解释性编译语言对应用程序代码段进行定位及热修复。本发明的有益效果为:非侵入式,对现有应用程序项目无需架构调整,随用随整合;运行时热重载,在不重启应用程序的前提下,立刻实现修改;应用面广,任意的计算机语言都可以实现。
Description
技术领域
本发明涉及一种对运行代码进行热修复的方法,属于计算机领域。
背景技术
很多游戏软件的运营过程中,经常性需要增删运营活动,修复各种BUG,对产品的敏捷性要求较高,因此总会在其开发架构中,考虑如何做热更新——可以灵活的在运营阶段进行功能、BUG的修改。
游戏开发中常见的做法的,使用程序脚本作为主要的逻辑开发语言,使大部分的代码,都是由解释型语言程序脚本编写的。由于解释型语言的无需编译的特性,因此在实际开发中,脚本语言可以方便的进行变更,没有编译型语言需要重新编译、部署、启动等烦恼。编译型语言+解释型语言结合开发架构,也是当前游戏开发中较常见的架构。
常见的编译型语言+解释型语言所实现的热更新功能,不但需要再项目设计初期,就要在整体框架上考虑清楚,而且能实现热更新功能也十分有限,比如,编译型语言无法热更新、部分解释语言的热更新还需要配合应用程序的重启。
进入移动互联网时代后,由于手机操作系统的各种限制,解释型语言性能低下的缺点变得突出,且编译型语言的热更新变得非常困难。 采用编译型语言+解释型语言结合的方式,如果编译型语言过多,运营方面的困难就更多;如果解释型语言过多,性能方面困难就更多。因此不少手机游戏都采用了较大量的静态编译代码;而要对这些静态编译代码热更新,此前一直没有较好的方法。
而本技术则可以在使编译型语言进行热修复,兼具灵活性和便捷性。目前技术已经十分的成熟,应用于其它的项目也够容易。在与其它游戏项目交流后,也纷纷对该技术表现出浓厚的兴趣,可以肯定的,该技术方法有很强的商业的价值。
发明内容
针对现有技术的不足,本发明的技术方案提供了一种对运行代码进行热修复的方法,用于在项目的任何阶段嵌入,类似一个插件的形式引入,对原项目没有大影响。而且,可以轻松实现应用程序的运行时立刻修改生效。
本发明的技术方案包括一种对运行代码进行热修复的方法,其特征在于,该方法包括:A.对代码段进行分析并多个代码块注入对应的多个埋点代码,同时生成对应的应用程序发布器,其中发布器用于将应用程序发送至用户;B.当运行时应用程序的代码段需要修改时,使用解释性编译语言对应用程序代码段进行定位及热修复。
根据所述的对运行代码进行热修复的方法,所述的步骤B还包括:S21,使用代码解释器进行词法分析及语法分析,进而获取代码段对应的埋点代码标识,进一步,获取对应代码段信息;S22,对代码段信息进行分析,并执行埋点代码注入;S23,使用应用程序编译器对所述S22的代码注入步骤进行对应编译,生成发布器,使用发布器将已进行代码注入的应用程序发送至多个客户端。
根据所述的对运行代码进行热修复的方法,所述的步骤S22的代码注入包括:S31,使用扫描器对对应的代码段执行词法分析;S32,使用语法分析器对代码段进一步进行语法分析;S33,执行对代码段中代码的函数及分析,对代码进行对应的注入。
根据所述的对运行代码进行热修复的方法,所述的步骤C还包括:S41,获取需要修改的埋点代码标识,进一步获取代码段的需要进行修复的函数信息;S42,使用解释性编译语言建立与修复部位的代码段名称一致的脚本文件,每个脚本文件有对应的唯一标识;S43,当应用程序检测到脚本文件的唯一标识时,执行脚本文件的代码,并且不执行原代码段文件;S44,忽略执行原代码段,运行时将脚本文件替换为新的代码段,并对修复结果进行测试,并将修复完成的应用程序进行发布。
根据所述的对运行代码进行热修复的方法,所述的步骤C还包括:在执行修复过程时,应用程序处于运行状态中。
根据所述的对运行代码进行热修复的方法,其中步骤S42还包括:使用脚本引擎对脚本文件进行自定义编辑,其中的脚本引擎包括但不限于Lua、Python、Ruby。
根据任意对运行代码进行热修复的方法,其特征在于:对应用程序的修复可以是在任意系统中。
本发明的有益效果为:非侵入式,对现有应用程序项目无需架构调整,随用随整合;运行时热重载,在不重启应用程序的前提下,立刻实现修改;应用面广,任意的计算机语言都可以实现。
附图说明
图1所示为根据本发明实施方式的总体流程图;
图2所示为根据本发明实施方式的代码注入流程图;
图3所示为根据本发明实施方式的热修复流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的对运行代码进行热修复的方法适用于计算机应用程序的开发及维护。
图1所示为根据本发明实施方式的总体流程图。对代码段进行分析并多个代码块注入对应的多个埋点代码,同时生成对应的应用程序发布器,其中发布器用于将应用程序发送至用户;当运行时应用程序的代码段需要修改时,使用解释性编译语言对应用程序代码段进行定位及热修复。
图2所示为根据本发明实施方式的代码注入流程图。用于对包含埋点代码标识对应的代码段进行代码注入,其包括对代码段的词法、语法、函数及参数进行分析,然后注入埋点代码并编译发布应用程序。
图3所示为根据本发明实施方式的热修复流程图。其包括定位修复的函数,使用脚本编辑器编写热更新脚本,对应用程序进行热更新,进而对修复进行测试和发布。热修复当运行时的代码段出现问题后,需要进行热修复。热修复技术可以对运行时的程序不关闭、不重启的情况下作出热修复。方法是建立一段与代码段中函数名称一样的解释性脚本文件,并在里面写好实际执行的代码。应用程序当发现这个解释性脚本后,将会执行解释性脚本,而不执行应用程序代码段脚本,实现线上热修复。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。
Claims (7)
1.一种对运行代码进行热修复的方法,其特征在于,该方法包括:
A.对代码段进行分析并多个代码块注入对应的多个埋点代码,同时生成对应的应用程序发布器,其中发布器用于将应用程序发送至用户;
B.当运行时应用程序的代码段需要修改时,使用解释性编译语言对应用程序代码段进行定位及热修复。
2.根据权利要求1所述的对运行代码进行热修复的方法,其特征在于,所述的步骤A还包括:
S21,使用代码解释器进行词法分析及语法分析,进而获取代码段对应的埋点代码标识,进一步,获取对应代码段信息;
S22,对代码段信息进行分析,并执行埋点代码注入;
S23,使用应用程序编译器对所述S22的代码注入步骤进行对应编译,生成发布器,使用发布器将已进行代码注入的应用程序发送至多个客户端。
3.根据权利要求2所述的对运行代码进行热修复的方法,其特征在于,所述的步骤S22的代码注入包括:
S31,使用扫描器对对应的代码段执行词法分析;
S32,使用语法分析器对代码段进一步进行语法分析;
S33,执行对代码段中代码的函数及分析,对代码进行对应的注入。
4.根据权利要求1所述的对运行代码进行热修复的方法,其特征在于,所述的步骤B还包括:
S41,获取需要修改的埋点代码标识,进一步获取代码段的需要进行修复的函数信息;
S42,使用解释性编译语言建立与修复部位的代码段名称一致的脚本文件,每个脚本文件有对应的唯一标识;
S43,当应用程序检测到脚本文件的唯一标识时,执行脚本文件的代码,并且不执行原代码段文件;
S44,忽略执行原代码段,运行时将脚本文件替换为新的代码段,并对修复结果进行测试,并将修复完成的应用程序进行发布。
5.根据权利要求4所述的对运行代码进行热修复的方法,其特征在于,所述的步骤B还包括:
在执行修复过程时,应用程序处于运行状态中。
6.根据权利要求4所述的对运行代码进行热修复的方法,其特征在于,其中步骤S42还包括:
使用脚本引擎对脚本文件进行自定义编辑,其中的脚本引擎包括但不限于Lua、Python、Ruby。
7.根据权利要求1-6任意对运行代码进行热修复的方法,其特征在于:
对应用程序的修复可以是在任意系统中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710221561.8A CN107203402A (zh) | 2017-04-06 | 2017-04-06 | 一种对运行代码进行热修复的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710221561.8A CN107203402A (zh) | 2017-04-06 | 2017-04-06 | 一种对运行代码进行热修复的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107203402A true CN107203402A (zh) | 2017-09-26 |
Family
ID=59904964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710221561.8A Pending CN107203402A (zh) | 2017-04-06 | 2017-04-06 | 一种对运行代码进行热修复的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107203402A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108182120A (zh) * | 2017-12-08 | 2018-06-19 | 广州视源电子科技股份有限公司 | 接口调用方法和系统、存储介质和计算机设备 |
CN108762787A (zh) * | 2018-05-31 | 2018-11-06 | 康键信息技术(深圳)有限公司 | 软件修复方法、装置、计算机设备和存储介质 |
CN108762809A (zh) * | 2018-05-24 | 2018-11-06 | 中国平安人寿保险股份有限公司 | 软件功能扩展方法、装置、计算机设备及存储介质 |
CN109656611A (zh) * | 2018-12-24 | 2019-04-19 | 成都四方伟业软件股份有限公司 | 三维可视化应用热更新方法、装置和终端 |
CN111078225A (zh) * | 2019-11-21 | 2020-04-28 | 贝壳技术有限公司 | 一种热重载方法、装置、电子设备和存储介质 |
CN111913730A (zh) * | 2020-07-15 | 2020-11-10 | 上海莉莉丝科技股份有限公司 | 用户无感的应用程序内更新方法及用户端、程序服务器 |
CN112306493A (zh) * | 2020-10-23 | 2021-02-02 | 广州博冠信息科技有限公司 | 热修复补丁生成方法、装置、存储介质及计算机设备 |
CN114115964A (zh) * | 2022-01-24 | 2022-03-01 | 在线途游(北京)科技有限公司 | 一种用于Unity的热更新方法、装置、计算设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105763626A (zh) * | 2016-04-11 | 2016-07-13 | 苏州云清伟业网络科技有限公司 | 适用于应用客户端支付的sdk初始化方法 |
CN106059844A (zh) * | 2016-08-17 | 2016-10-26 | 洑云龙 | 一种客户端热更新方法 |
CN106055368A (zh) * | 2016-06-02 | 2016-10-26 | 腾讯科技(深圳)有限公司 | 应用更新方法和装置 |
CN106227554A (zh) * | 2016-07-08 | 2016-12-14 | 百度在线网络技术(北京)有限公司 | 一种在ios系统中进行应用热更新的方法和装置 |
-
2017
- 2017-04-06 CN CN201710221561.8A patent/CN107203402A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105763626A (zh) * | 2016-04-11 | 2016-07-13 | 苏州云清伟业网络科技有限公司 | 适用于应用客户端支付的sdk初始化方法 |
CN106055368A (zh) * | 2016-06-02 | 2016-10-26 | 腾讯科技(深圳)有限公司 | 应用更新方法和装置 |
CN106227554A (zh) * | 2016-07-08 | 2016-12-14 | 百度在线网络技术(北京)有限公司 | 一种在ios系统中进行应用热更新的方法和装置 |
CN106059844A (zh) * | 2016-08-17 | 2016-10-26 | 洑云龙 | 一种客户端热更新方法 |
Non-Patent Citations (1)
Title |
---|
蔡娟等: "《软件测试技术》", 30 September 2016, 中国商业出版社 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108182120A (zh) * | 2017-12-08 | 2018-06-19 | 广州视源电子科技股份有限公司 | 接口调用方法和系统、存储介质和计算机设备 |
CN108182120B (zh) * | 2017-12-08 | 2020-11-24 | 广州视源电子科技股份有限公司 | 接口调用方法和系统、存储介质和计算机设备 |
CN108762809A (zh) * | 2018-05-24 | 2018-11-06 | 中国平安人寿保险股份有限公司 | 软件功能扩展方法、装置、计算机设备及存储介质 |
CN108762787A (zh) * | 2018-05-31 | 2018-11-06 | 康键信息技术(深圳)有限公司 | 软件修复方法、装置、计算机设备和存储介质 |
CN108762787B (zh) * | 2018-05-31 | 2024-04-05 | 康键信息技术(深圳)有限公司 | 软件修复方法、装置、计算机设备和存储介质 |
CN109656611A (zh) * | 2018-12-24 | 2019-04-19 | 成都四方伟业软件股份有限公司 | 三维可视化应用热更新方法、装置和终端 |
CN111078225A (zh) * | 2019-11-21 | 2020-04-28 | 贝壳技术有限公司 | 一种热重载方法、装置、电子设备和存储介质 |
CN111913730A (zh) * | 2020-07-15 | 2020-11-10 | 上海莉莉丝科技股份有限公司 | 用户无感的应用程序内更新方法及用户端、程序服务器 |
CN112306493A (zh) * | 2020-10-23 | 2021-02-02 | 广州博冠信息科技有限公司 | 热修复补丁生成方法、装置、存储介质及计算机设备 |
CN114115964A (zh) * | 2022-01-24 | 2022-03-01 | 在线途游(北京)科技有限公司 | 一种用于Unity的热更新方法、装置、计算设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107203402A (zh) | 一种对运行代码进行热修复的方法 | |
McIlroy | Macro instruction extensions of compiler languages | |
CN103838584B (zh) | 一种移动终端应用的开发方法及装置 | |
CN103077111B (zh) | 一种持续集成失败用例的定位方法及系统 | |
CN105512304A (zh) | 在线生成互联网应用方法和系统集成方法及支撑平台 | |
Lucassen et al. | Behavior-driven requirements traceability via automated acceptance tests | |
CN105912473A (zh) | 基于bdd的移动app自动测试平台和测试方法 | |
CN103268289B (zh) | 在移动终端上录制应用测试脚本的方法和系统 | |
CN108647147B (zh) | 一种利用图谱分析执行自动化测试机器人及其使用方法 | |
CN112817584B (zh) | 一种基于脚本的非编程、可视化兵棋规则设计编辑系统 | |
Guana et al. | Chaintracker, a model-transformation trace analysis tool for code-generation environments | |
Riviere et al. | EB4EB: a framework for reflexive Event-B | |
CN107526679A (zh) | 自动化测试框架、基于其上的自动化测试方法、存储介质和计算机设备 | |
CN104102581A (zh) | 一种实现单元测试的方法及装置 | |
CN101201750B (zh) | 利用语法词法分析工具为编解码提供数据的方法 | |
Rieger et al. | Challenges and Opportunities of Modularizing Textual Domain-Specific Languages. | |
CN102629213A (zh) | 一种c语言仿真模型的剖析及监控方法 | |
CN101149700A (zh) | 通过配置文件实现命令显示的方法 | |
Spinellis | Rational metaprogramming | |
CN113867714B (zh) | 一种适配多语言的自动代码生成方法 | |
CN114115959A (zh) | App热修复方法及其装置、可读存储介质和计算机设备 | |
Alshanqiti et al. | Visual contract extractor: a tool for reverse engineering visual contracts using dynamic analysis | |
Avritzer et al. | Process investigations for the global studio project version 3.0 | |
CN113448874A (zh) | 一种单元测试脚本的生成方法及装置 | |
Gómez-Abajo et al. | Towards a model-driven engineering solution for language independent mutation testing |
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 |
Application publication date: 20170926 |
|
RJ01 | Rejection of invention patent application after publication |