CN112667521B - 一种热修复方法及装置 - Google Patents
一种热修复方法及装置 Download PDFInfo
- Publication number
- CN112667521B CN112667521B CN202110071098.XA CN202110071098A CN112667521B CN 112667521 B CN112667521 B CN 112667521B CN 202110071098 A CN202110071098 A CN 202110071098A CN 112667521 B CN112667521 B CN 112667521B
- Authority
- CN
- China
- Prior art keywords
- repaired
- sdk
- patch
- project
- sdks
- 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/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- 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)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种热修复方法及装置,涉及软件维护技术领域。该方法包括:对每一个SDK进行编译获取各SDK的编译文件;待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括各待修复方法的插桩代码;若目标待修复方法存在于多个SDK中,则将目标待修复方法的插桩代码保留在其中一个中,删除其它中目标待修复方法的插桩代码;生成热修复补丁,热修复补丁包括每一个待修复方法的插桩代码对应的补丁;在接入端接入待修复项目的至少一个SDK的编译文件时,向接入端发送热修复补丁。本发明实施例用于在对多个可选择接入且具有依赖关系的SDK进行热修复时,避免各SDK的热修复补丁之间冲突。
Description
技术领域
本发明涉及软件维护技术领域,尤其涉及一种热修复方法及装置。
背景技术
热修复(hotfix)技术,又称为补丁(patch)技术,是一种能够快速、低成本修复软件产品线上异常的技术手段。
在一些应用场景中,软件产品需要对外提供多个可选择接入的组件,且多个可选择接入的组件相互之间具有依赖关系,这些可选择接入的组件对应的软件开发工具包(Software Development Kit,SDK)可能会被接入同一安卓应用安装包(AndroidApplication package,APK)中。在此类应用场景中,进行热修复时不能将各SDK视为完全独立的SDK,需要对这些SDK均进行热修复。现有技术中的SDK热修复方案普遍是针对单个SDK进行热修复的方案,由于APK可选择接入多个SDK中的一个或多个,因此若复用针对单个SDK进行热修复的方案逐一对每一个SDK进行热修复,则在多个SDK被同时接入同一个APK中时,非常可能会造成SDK的热修复补丁之间冲突,进而导致热修复失败。
发明内容
有鉴于此,本发明提供了一种热修复方法及装置,用于在对多个可选择接入且具有依赖关系的SDK进行热修复时,避免各SDK的热修复补丁之间冲突。
为了实现上述目的,本发明实施例提供技术方案如下:
第一方面,本发明的实施例提供了一种热修复方法,包括:
分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件;所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码;
若目标待修复方法存在于所述待修复项目的两个或两个以上SDK中,则将所述目标待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码;
生成热修复补丁;所述热修复补丁包括每一个待修复方法的插桩代码对应的补丁;
在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
作为本发明实施例一种可选的实施方式,所述方法还包括:
在分别对待修复项目的每一个SDK进行编译的过程中,生成各SDK对应的映射表;各SDK对应的映射表记录有对应SDK中每一个待修复方法与方法标识的对应关系;
所述判断各待修复方法是否存在于所述待修复项目的两个或两个以上SDK中,包括:
判断映射关系表集合中是否包含重复的方法标识;所述映射关系表集合为所述待修复项目的每一个SDK对应的映射关系表组成的集合;
若目标方法标识为重复的方法标识,则确定所述目标方法标识对应的待修复方法为存在于所述待修复项目的两个或两个以上SDK中。
作为本发明实施例一种可选的实施方式,所述在分别对待修复项目的每一个SDK进行编译的过程中,生成各SDK对应的映射表,包括:
在分别对所述待修复项目的每一个SDK进行编译的过程中,获取各SDK中每一个待修复方法的方法签名;
基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值;
建立各SDK中各待修复方法与对应的加密值的对应关系,生成各SDK对应的映射表。
作为本发明实施例一种可选的实施方式,所述基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值,包括:
基于MD5对各SDK中每一个待修复方法的方法签名进行加密,获取各方法签名的MD5值。
作为本发明实施例一种可选的实施方式,所述方法还包括:
在对各待修复方法进行插桩的过程中,将各待修复方法的方法标识添加到各待修复方法对应的插桩代码中;
在生成热修复补丁的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码对应的补丁中;
判断各插桩代码中的方法标识与调用的补丁中的方法标识是否相同;
若一个或多个插桩代码中的方法标识与调用的补丁中的方法标识不同,则确认所述热修复补丁错误;
若各插桩代码中的方法标识与调用的补丁中的方法标识均相同,则确认所述热修复补丁正确。
作为本发明实施例一种可选的实施方式,所述生成热修复补丁,包括:
创建目标工程,所述目标工程依赖所述待修复项目的每一个SDK的编译文件;
生成所述目标工程的补丁,并将所述目标工程的补丁作为所述热修复补丁。
作为本发明实施例一种可选的实施方式,所述生成所述目标工程的补丁,包括:
获取代码集合,所述代码集合包括所述待修复项目的每一个SDK对应编译文件的代码;
在所述代码集合中读取待修复代码,所述待修复代码为各SDK的待修复方法对应的代码;
根据所述待修复代码生成所述目标工程的补丁。
第二方面,本发明实施例提供一种热修复装置,包括:
编译单元,用于分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件;所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码;
处理单元,用于判断各待修复方法是否存在于所述待修复项目的两个或两个以上SDK中;
修订单元,用于在目标待修复方法存在于所述待修复项目的两个或两个以上SDK中的情况下,将所述目标待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码;
生成单元,用于生成热修复补丁;所述热修复补丁包括每一个待修复方法的插桩代码对应的补丁;
下发单元,用于在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
作为本发明实施例一种可选的实施方式,
所述编译单元,还用于在分别对待修复项目的每一个SDK进行编译的过程中,生成各SDK对应的映射表;各SDK对应的映射表记录有对应SDK中每一个待修复方法与方法标识的对应关系;
所述处理单元,具体用于判断映射关系表集合中是否包含重复的方法标识;若目标方法标识为重复的方法标识,则确定所述目标方法标识对应的待修复方法为存在于所述待修复项目的两个或两个以上SDK中;
其中,所述映射关系表集合为所述待修复项目的每一个SDK对应的映射关系表组成的集合。
作为本发明实施例一种可选的实施方式,所述编译单元,具体用于在分别对所述待修复项目的每一个SDK进行编译的过程中,获取各SDK中每一个待修复方法的方法签名;基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值;建立各SDK中各待修复方法与对应的加密值的对应关系,生成各SDK对应的映射表。
作为本发明实施例一种可选的实施方式,所述编译单元,具体用于基于MD5对各SDK中每一个待修复方法的方法签名进行加密,获取各方法签名的MD5值。
作为本发明实施例一种可选的实施方式,所述装置还包括:校验单元;
所述编译单元,还用于在对各待修复方法进行插桩的过程中,将各待修复方法的方法标识添加到各待修复方法对应的插桩代码中;
所述生成单元,还用于在生成热修复补丁的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码对应的补丁中;
所述校验单元,用于判断各插桩代码中的方法标识与调用的补丁中的方法标识是否相同;若一个或多个插桩中的方法标识与调用的补丁中的方法标识不同,则确认所述热修复补丁错误;若各插桩中的方法标识与调用的补丁中的方法标识均相同,则确认所述热修复补丁正确。
作为本发明实施例一种可选的实施方式,所述生成单元,具体用于创建目标工程,所述目标工程依赖所述待修复项目的每一个SDK的编译文件;生成所述目标工程的补丁,并将所述目标工程的补丁作为所述热修复补丁。
作为本发明实施例一种可选的实施方式,所述生成单元,具体用于获取代码集合,在所述代码集合中读取待修复代码,根据所述待修复代码生成所述目标工程的补丁;
其中,所述代码集合包括所述待修复项目的每一个SDK对应编译文件的代码;所述待修复代码为各SDK的待修复方法对应的代码。
第三方面,本发明实施例提供一种电子设备,包括:存储器和处理器,存储器用于存储计算机程序;处理器用于在调用计算机程序时执行第一方面或第一方面任一种可选的实施方式所述的热修复方法。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现第一方面或第一方面任一种可选的实施方式所述的热修复方法。
本发明实施例提供的热修复方法先分别对待修复项目的每一个SDK进行编译获取各SDK的编译文件,并判断每个待修复方法是否存在于两个或两个以上SDK中,若目标待修复方法为存在于两个或两个以上SDK中,则将所述目标待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码,然后再生成包括每一个待修复方法的插桩代码对应的补丁的热修复补丁,最后在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。由于本发明实施例会先判断每一个待修复方法是否存在于两个或两个以上SDK中,并在某一待修复方法存在于两个或两个以上SDK中时,仅保留一个SDK的编译文件中的该修复方法的插桩,从而剔除待修复项目中重复的待修复方法,进而避免热修复补丁修复错误的待修复方法,因此本发明实施例可以在对多个可选择接入且具有依赖关系的SDK进行热修复时,避免各SDK的热修复补丁之间冲突。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的热修复方法的流程图之一;
图2为本发明实施例提供的热修复方法的流程图之二;
图3为本发明实施例提供的热修复方法的流程图之三;
图4为本发明实施例提供的热修复装置的结构示意图之一;
图5为本发明实施例提供的热修复装置的结构示意图之二;
图6为本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面将对本发明的方案进行进一步描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但本发明还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本发明的一部分实施例,而不是全部的实施例。
在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。此外,在本发明实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
本发明实施例提供了一种热修复方法,参照图1所示,本发明实施例提供的热修复方法包括如下步骤:
S101、分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件。
其中,所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码。
即,在对待修复项目中的SDK进行编译过程中,将待修复项目中的每一个SDK都作为一个独立的SDK进行编译,且任一SDK的编译文件包括该SDK中各待修复方法的插桩代。例如:SDK1的编译文件包括SDK1中各待修复方法的插桩代码。
示例性的,可以对待修复项目的每一个SDK引入插桩插件,通过引入的插桩插件对对应SDK中的每一个类(class)中的每一个待修复方法进行插桩,从而完成每一个SDK的编译,获取每一个SDK的编译文件。具体的,各SDK的编译文件可以各SDK的mapping文件。
S102、判断各待修复方法是否存在于所述待修复项目的两个或两个以上SDK中。
具体的,同一个SDK中必然不存在相同的方法,也不存在相同的待修复方法,然而不同SDK之间可能会有相同的方法和相同的待修复方法。在进行热修复时,会针对每一个SDK中的每一个待修复方法生成补丁,且不同SDK中的同一待修复方法的补丁也可能会不同,若目标待修复方法存在于SDK1和SDK2中,则当SDK1中的目标待修复方法调用补丁时很可能会调用到SDK2中目标待修复方法的补丁,进而导致补丁修复了错误的待修复方法,因此本发明实施例在生成热修复补丁之前,先判断各待修复方法是否存在于所述待修复项目的两个或两个以上SDK中,并通过下述步骤避免待修复方法存在于两个或两个以上SDK中所带来的上述问题。
在上述步骤S102中,若各待修复方法均仅存在于所述待修复项目的一个SDK中,则执行如下步骤S104,而若目标待修复方法存在于所述待修复项目的两个或两个以上SDK中,则先执行如下步骤S103,再执行如下步骤S104。其中,目标待修复方法可以为任意待修复方法。
S103、将所述目标待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码。
即,若某一待修复方法存在于所述待修复项目的两个或两个以上SDK中,则保留一个SDK的编译文件中该待修复方法的插桩代码,删除其它SDK的编译文件中该待修复方法的插桩代码。
例如:待修复方法1同时存在于第一SDK、第二SDK和第三SDK中,则可以保留第一SDK的编译文件中待修复方法1的插桩代码,删除第二SDK的编译文件和第三SDK的编译文件中待修复方法1的插桩代码。
需要说明的是,保留一个SDK的编译文件中目标待修复方法的插桩代码,删除其它SDK的编译文件中目标待修复方法的插桩代码方式可以为:随机选取一个SDK的编译文件,保持选取的SDK的编译文件不变,并将其余SKD的编译文件中目标待修复方法的插桩代码删除。
S104、生成热修复补丁。
其中,所述热修复补丁包括每一个待修复方法的插桩代码对应的补丁。
具体的,可以基于待修复项目的每一个SDK中每一个需要进行热修复的方法(具有插桩代码的待修复方法)生成热修复补丁。
S105、在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
本发明实施例提供的热修复方法先分别对待修复项目的每一个SDK进行编译获取各SDK的编译文件,并判断每个待修复方法是否存在于两个或两个以上SDK中,若某一待修复方法为存在于两个或两个以上SDK中,则将所述目标待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码,然后再生成包括每一个待修复方法的插桩代码,然后再生成包括每一个待修复方法的插桩代码对应的补丁的热修复补丁,最后在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。由于本发明实施例会先判断每一个待修复方法是否存在于两个或两个以上SDK中,并在某一待修复方法存在于两个或两个以上SDK中时,仅保留一个SDK的编译文件中的该修复方法的插桩,从而剔除待修复项目中重复的待修复方法,进而避免热修复补丁修复错误的待修复方法,因此本发明实施例可以在对多个可选择接入且具有依赖关系的SDK进行热修复时,避免各SDK的热修复补丁之间冲突。
作为本发明实施例一种可选的实施方式,参照图2所示,本发明另一实施例提供的热修复方法包括:
S201、分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件。
其中,所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码。
S202、在分别对待修复项目的每一个SDK进行编译的过程中,生成各SDK对应的映射表。
其中,各SDK对应的映射表记录有对应SDK中每一个待修复方法与方法标识的对应关系。
即,任一SDK对应的映射表记录有该SDK中每一个待修复方法与方法标识的对应关系。例如:SDK2对应的映射表记录有SDK2中每一个待修复方法与方法标识的对应关系。
可选的,步骤S202的具体实现方式可以包括如下步骤a至步骤c。
步骤a、在分别对所述待修复项目的每一个SDK进行编译的过程中,获取各SDK中每一个待修复方法的方法签名。
具体的,可以在对所述待修复项目中的任一SDK进行编译的过程中,获取该SDK中的所有类(class),然后获取每一个类中的全部方法,再从每一个类的全部方法中确定待修复方法,最后提取每一个待修复方法的方法签名。
步骤b、基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值。
可选的,所述预设加密算法为消息摘要算法(Message-Digest Algorithm,MD5);基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值,包括:基于MD5对各SDK中每一个待修复方法的方法签名进行加密,获取各方法签名的MD5值。
在上述实施例的基础上,本发明实施例中的预设加密算法还可以为其它加密算法。例如:RSA加密算法、DES加密算法等。
步骤c、建立各SDK中各待修复方法与对应的加密值的对应关系,生成各SDK对应的映射表。
即,任一待修复方法对应的加密值为基于所述预设加密算法对该待修复方法的方法签名进行加密得到的加密值。当预设加密算法为MD5,则任一待修复方法对应的加密值为该待修复方法的MD5值。
S203、判断映射关系表集合中是否包含重复的方法标识。
其中,所述映射关系表集合为所述待修复项目的每一个SDK对应的映射关系表组成的集合。
如上所述,同一个SDK中必然不存在相同的方法和相同的待修复方法,但多个SDK中可能会有相同的方法和相同的待修复方法,而相同方法的方法签名和方法标识也相同,因此映射关系表集合中可能包括重复的方法标识。
在上述步骤S203中,若每一个方法标识均只出现在一个对应关系中,则确定映射关系表集合中不包含重复的方法标识,而若目标方法标识出现在两个或两个以上对应关系中,则确定所述目标方法标识为重复的方法标识,并执行如下步骤S204。
S204、确定所述目标标识对应的待修复方法为存在于所述待修复项目的两个或两个以上SDK中。
S205、将所述目标标识对应的待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标标识对应的待修复方法的插桩代码。
S206、生成热修复补丁。
其中,所述热修复补丁包括每一个待修复方法的插桩代码对应的补丁。
S207、在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
上述实施例提供的热修复方法为对图1所示热修复方法的细化,其可以达到的技术效果与图1所示热修复方法可以达到的技术效果类似。在此不再赘述。
作为本发明实施例一种可选的实施方式,参照图3所示,本发明另一实施例提供的热修复方法包括:
S301、分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件。
其中,所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码。
S302、判断各待修复方法是否存在于所述待修复项目的两个或两个以上SDK中。
在上述步骤S302中,若目标待修复方法存在于所述待修复项目的两个或两个以上SDK中,则执行如下步骤S303。
S303、将所述目标待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码。
S304、创建目标工程。
其中,所述目标工程依赖所述待修复项目的每一个SDK的编译文件。
即,将待修复项目中的全部SDK视为一体,创建一个依赖待修复项目中的全部SDK的外部工程。
S305、生成所述目标工程的补丁,并将所述目标工程的补丁作为所述热修复补丁。
可选的,上述步骤S305的实现方式可以包括如下步骤Ⅰ至步骤Ⅲ:
步骤Ⅰ、获取代码集合。
所述代码集合包括所述待修复项目的每一个SDK对应编译文件的代码。
步骤Ⅱ、在所述代码集合中读取待修复代码。
所述待修复代码为各SDK的待修复方法对应的代码。
具体的,可以在通过注解标注各SDK的待修复方法,然后根据注解查找待修复代码。
步骤Ⅲ、根据所述待修复代码生成所述目标工程的补丁。
S306、在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
上述实施例创建一个依赖所述待修复项目的每一个SDK的编译文件的外部工程,然后生成该外部工程的补丁,并将所述目标工程的补丁作为所述热修复补丁,因此上述实施例可以将待修复项目全部待修复方法的补丁作为一个整体进行管理,无需单独对每一个待修复方法的补丁进行管理,因此上述实施例可以进一步简化热修复补丁的管理。
此外,本发明实施例将包括全部插桩代码对应的补丁的热修复补丁发送接入端,即使接入端未接入待修复项目中的某一个SDK的编译文件,也不会影响接入的SDK的编译文件的补丁生效,只是未接入的编译文件的补丁不会生效。
作为本发明实施例一种可选的实施方式,在上述任一实施例提供的热修复方法的基础上,本发明实施例提供的热修复方法还包括:
在对各待修复方法进行插桩的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码中;
在生成热修复补丁的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码对应的补丁中;
判断各插桩代码中的方法标识与调用的补丁中的方法标识是否相同;
若一个或多个插桩代码中的方法标识与调用的补丁中的方法标识不同,则确认所述热修复补丁错误;
若各插桩代码中的方法标识与调用的补丁中的方法标识均相同,则确认所述热修复补丁正确。
上述实施例在对待修复方法进行插桩时将对应的方法标识添加到插桩代码中,在生成待修复方法的补丁时将对应的方法标识添加对应的补丁中,并在补丁生效前先验证插桩代码中的方法标识与补丁中的方法标识是否相同,从而校验生成的热修复补丁是否正确,因此本发明实施例可以保证热修复补丁的正确生效。
此外,由于在对待修复方法进行插桩时将对应的方法标识添加到了插桩代码中,且在补丁生效前先验证插桩代码中的方法标识与补丁中的方法标识是否相同,因此上述实施例提供的方法还可以避免伪造的补丁生效,进而提高软件产品的安全性。
基于同一发明构思,作为对上述方法的实现,本发明实施例还提供了一种热修复装置,该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的热修复装置能够对应实现前述方法实施例中的全部内容。
图4为本发明实施例提供的热修复装置的结构示意图,如图4所示,本实施例提供的热修复装置400包括:
编译单元41,用于分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件;所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码;
处理单元42,用于判断各待修复方法是否存在于所述待修复项目的两个或两个以上SDK中;
修订单元43,用于在目标待修复方法存在于所述待修复项目的两个或两个以上SDK中的情况下,将所述目标待修复方法的插桩代码保留在所述两个或两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码;
生成单元44,用于生成热修复补丁;所述热修复补丁包括每一个待修复方法的插桩代码对应的补丁;
下发单元45,用于在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
作为本发明实施例一种可选的实施方式,
所述编译单元41,还用于在分别对待修复项目的每一个SDK进行编译的过程中,生成各SDK对应的映射表;各SDK对应的映射表记录有对应SDK中每一个待修复方法与方法标识的对应关系;
所述处理单元42,具体用于判断映射关系表集合中是否包含重复的方法标识;若目标方法标识为重复的方法标识,则确定所述目标方法标识对应的待修复方法存在于所述待修复项目的两个或两个以上SDK中;
其中,所述映射关系表集合为所述待修复项目的每一个SDK对应的映射关系表组成的集合。
作为本发明实施例一种可选的实施方式,所述编译单元41,具体用于在分别对所述待修复项目的每一个SDK进行编译的过程中,获取各SDK中每一个待修复方法的方法签名;基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值;建立各SDK中各待修复方法与对应的加密值的对应关系,生成各SDK对应的映射表。
作为本发明实施例一种可选的实施方式,所述编译单元41,具体用于基于MD5对各SDK中每一个待修复方法的方法签名进行加密,获取各方法签名的MD5值。
作为本发明实施例一种可选的实施方式,参照图5所示,所述热修复装置400还包括:校验单元46;
所述编译单元41,还用于在对各待修复方法进行插桩的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码中;
所述生成单元44,还用于在生成热修复补丁的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码对应的补丁中;
所述校验单元46,用于判断各插桩代码中的方法标识与调用的补丁中的方法标识是否相同;若一个或多个插桩代码中的方法标识与调用的补丁中的方法标识不同,则确认所述热修复补丁错误;若各插桩代码中的方法标识与调用的补丁中的方法标识均相同,则确认所述热修复补丁正确。
作为本发明实施例一种可选的实施方式,所述生成单元44,具体用于创建目标工程,所述目标工程依赖所述待修复项目的每一个SDK的编译文件;生成所述目标工程的补丁,并将所述目标工程的补丁作为所述热修复补丁。
作为本发明实施例一种可选的实施方式,所述生成单元44,具体用于获取代码集合,在所述代码集合中读取待修复代码,根据所述待修复代码生成所述目标工程的补丁;
其中,所述代码集合包括所述待修复项目的每一个SDK对应编译文件的代码;所述待修复代码为各SDK的待修复方法对应的代码。
基于同一发明构思,本发明实施例还提供了一种电子设备。图6为本发明实施例提供的电子设备的结构示意图,如图6所示,本实施例提供的电子设备包括:存储器61和处理器62,存储器61用于存储计算机程序;处理器62用于在调用计算机程序时执行上述实施例提供的热修复方法的步骤。
本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述实施例提供的热修复方法的步骤。
本领域技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
处理器可以是中央处理单元(CentralProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、现成可编程门阵列(Field-ProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储,信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。根据本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种热修复方法,其特征在于,包括:
分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件;所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码;
判断各待修复方法是否存在于所述待修复项目的两个以上SDK中;
若目标待修复方法存在于所述两个以上SDK中,则将所述目标待修复方法的插桩代码保留在所述两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码;
生成热修复补丁,所述热修复补丁包括每一个所述待修复方法的插桩代码对应的补丁;
在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在分别对待修复项目的每一个SDK进行编译的过程中,生成各SDK对应的映射表;各SDK对应的映射表记录有对应SDK的每一个待修复方法与方法标识的对应关系;
所述判断各待修复方法是否存在于所述待修复项目的两个以上SDK中,包括:
判断映射关系表集合中是否包含重复的方法标识;所述映射关系表集合为所述待修复项目的每一个SDK对应的映射关系表组成的集合;
若目标方法标识为重复的方法标识,则确定所述目标方法标识对应的待修复方法存在于所述待修复项目的两个以上SDK中。
3.根据权利要求2所述的方法,其特征在于,所述在分别对待修复项目的每一个SDK进行编译的过程中,生成各SDK对应的映射表,包括:
在分别对所述待修复项目的每一个SDK进行编译的过程中,获取各SDK中每一个待修复方法的方法签名;
基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值;
建立各SDK中各待修复方法与对应的加密值的对应关系,生成各SDK对应的映射表。
4.根据权利要求3所述的方法,其特征在于,所述基于预设加密算法对各SDK每一个待修复方法的方法签名进行加密,获取每一个待修复方法对应的加密值,包括:
基于MD5对各SDK中每一个待修复方法的方法签名进行加密,获取各方法签名的MD5值。
5.根据权利要求1的方法,其特征在于,所述方法还包括:
在对各待修复方法进行插桩的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码中;
在生成热修复补丁的过程中,将各待修复方法的方法标识添加到各待修复方法的插桩代码对应的补丁中;
判断各插桩代码中的方法标识与调用的补丁中的方法标识是否相同;
若一个或多个插桩代码中的方法标识与调用的补丁中的方法标识不同,则确认所述热修复补丁错误;
若各插桩代码中的方法标识与调用的补丁中的方法标识均相同,则确认所述热修复补丁正确。
6.根据权利要求1的方法,其特征在于,所述生成热修复补丁,包括:
创建目标工程,所述目标工程依赖所述待修复项目的每一个SDK 的编译文件;
生成所述目标工程的补丁,并将所述目标工程的补丁作为所述热修复补丁。
7.根据权利要求6的方法,其特征在于,所述生成所述目标工程的补丁,包括:
获取代码集合,所述代码集合包括所述待修复项目的每一个SDK对应编译文件的代码;
在所述代码集合中读取待修复代码,所述待修复代码为各SDK的待修复方法对应的代码;
根据所述待修复代码生成所述目标工程的补丁。
8.一种热修复装置,其特征在于,包括:
编译单元,用于分别对待修复项目的每一个SDK进行编译,获取各SDK的编译文件;所述待修复项目包括至少两个具有依赖关系的SDK,各SDK的编译文件包括对应SDK中各待修复方法的插桩代码;
处理单元,用于判断各待修复方法是否存在于所述待修复项目的两个以上SDK中;
修订单元,用于在目标待修复方法存在于所述待修复项目的两个以上SDK中的情况下,将所述目标待修复方法的插桩代码保留在所述两个以上SDK的其中一个的编译文件中,删除其它SDK的编译文件中所述目标待修复方法的插桩代码;
生成单元,用于生成热修复补丁;所述热修复补丁包括每一个待修复方法的插桩代码对应的补丁;
下发单元,用于在接入端接入所述待修复项目的至少一个SDK的编译文件时,向所述接入端发送所述热修复补丁。
9.一种电子设备,其特征在于,包括:存储器和处理器,存储器用于存储计算机程序;处理器用于在调用计算机程序时执行权利要求1-7任一项所述的热修复方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,计算机程序被处理器执行时实现权利要求1-7任一项所述的热修复方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110071098.XA CN112667521B (zh) | 2021-01-19 | 2021-01-19 | 一种热修复方法及装置 |
US18/008,796 US20230229431A1 (en) | 2021-01-19 | 2021-12-01 | Hotfix method and apparatus |
PCT/CN2021/134732 WO2022156379A1 (zh) | 2021-01-19 | 2021-12-01 | 一种热修复方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110071098.XA CN112667521B (zh) | 2021-01-19 | 2021-01-19 | 一种热修复方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112667521A CN112667521A (zh) | 2021-04-16 |
CN112667521B true CN112667521B (zh) | 2022-07-19 |
Family
ID=75415691
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110071098.XA Active CN112667521B (zh) | 2021-01-19 | 2021-01-19 | 一种热修复方法及装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230229431A1 (zh) |
CN (1) | CN112667521B (zh) |
WO (1) | WO2022156379A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667521B (zh) * | 2021-01-19 | 2022-07-19 | 北京字节跳动网络技术有限公司 | 一种热修复方法及装置 |
CN114564228A (zh) * | 2022-03-17 | 2022-05-31 | 北京字跳网络技术有限公司 | 一种应用程序更新方法、装置、计算机设备及存储介质 |
CN115129355B (zh) * | 2022-09-01 | 2023-05-26 | 平安银行股份有限公司 | 页面修复方法及其系统、计算机设备 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8607208B1 (en) * | 2008-10-01 | 2013-12-10 | Oracle International Corporation | System and methods for object code hot updates |
CN103019787B (zh) * | 2012-12-14 | 2016-08-10 | 华为技术有限公司 | 函数调用关系确定方法、热补丁升级方法及装置 |
CN107179925A (zh) * | 2017-04-14 | 2017-09-19 | 北京五八信息技术有限公司 | 热更新方法及装置 |
CN109344619B (zh) * | 2018-08-15 | 2021-08-20 | 北京奇艺世纪科技有限公司 | 应用程序的热修复方法和装置 |
CN111078262B (zh) * | 2018-10-18 | 2023-04-11 | 百度在线网络技术(北京)有限公司 | 应用的热修复方法和装置 |
CN111831316A (zh) * | 2020-07-21 | 2020-10-27 | 北京字节跳动网络技术有限公司 | 一种软件开发包更新方法及装置 |
CN112068903B (zh) * | 2020-09-21 | 2024-05-03 | 深圳市欢太科技有限公司 | 应用程序的加载方法、应用程序的加载装置、介质与设备 |
CN112667521B (zh) * | 2021-01-19 | 2022-07-19 | 北京字节跳动网络技术有限公司 | 一种热修复方法及装置 |
-
2021
- 2021-01-19 CN CN202110071098.XA patent/CN112667521B/zh active Active
- 2021-12-01 US US18/008,796 patent/US20230229431A1/en active Pending
- 2021-12-01 WO PCT/CN2021/134732 patent/WO2022156379A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022156379A1 (zh) | 2022-07-28 |
CN112667521A (zh) | 2021-04-16 |
US20230229431A1 (en) | 2023-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112667521B (zh) | 一种热修复方法及装置 | |
US9633210B2 (en) | Keying infrastructure | |
CN102473223B (zh) | 信息处理装置以及信息处理方法 | |
KR20190061075A (ko) | 소프트웨어 재패키징 방지 방법 및 장치 | |
CN109445705B (zh) | 固件认证方法及固态硬盘 | |
CN108614702B (zh) | 字节码优化方法及装置 | |
CN110363010B (zh) | 一种基于MPSoC芯片的系统安全启动方法 | |
WO2022100063A1 (zh) | 智能合约的日志生成及保存方法、装置、设备和存储介质 | |
CN111309506A (zh) | 一种编译错误的定位方法、设备、服务器及可读存储介质 | |
CN111324591B (zh) | 区块链分叉的检测方法及相关装置 | |
CN111857860A (zh) | 一种安全加载插件的实现方法及系统 | |
KR20210089485A (ko) | 소프트웨어의 인증을 위한 장치 및 방법 | |
CN107092517B (zh) | 一种sdk工具包的生成方法及装置 | |
CN114969803A (zh) | 一种数据存储方法、装置及存储介质 | |
CN111026398A (zh) | 基于缓存的数据集成的构建方法与构建系统 | |
TWI682296B (zh) | 映像檔打包方法及映像檔打包系統 | |
CN111339523B (zh) | 嵌入式设备的授权方法及装置 | |
Detken et al. | Software-design for internal security checks with dynamic integrity measurement (DIM) | |
CN116032793B (zh) | 信息处理方法、装置、电子设备及计算机可读介质 | |
CN116431189B (zh) | 基于pcie链路的板卡升级方法、装置、设备及存储介质 | |
CN112882720B (zh) | 一种编译方法及装置 | |
CN114969765B (zh) | 一种物联网设备无感安全漏洞修复方法、装置及设备 | |
CN114428956A (zh) | 一种基于扩展属性的文件验证方法、装置及系统 | |
CN109347639B (zh) | 一种序列号的生成方法及装置 | |
CN116821889A (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 |