CN108694049A - 一种更新软件的方法和设备 - Google Patents

一种更新软件的方法和设备 Download PDF

Info

Publication number
CN108694049A
CN108694049A CN201710099298.XA CN201710099298A CN108694049A CN 108694049 A CN108694049 A CN 108694049A CN 201710099298 A CN201710099298 A CN 201710099298A CN 108694049 A CN108694049 A CN 108694049A
Authority
CN
China
Prior art keywords
data
sub
tree
client
tree structure
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.)
Granted
Application number
CN201710099298.XA
Other languages
English (en)
Other versions
CN108694049B (zh
Inventor
禹果
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Singapore Holdings Pte Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201710099298.XA priority Critical patent/CN108694049B/zh
Publication of CN108694049A publication Critical patent/CN108694049A/zh
Application granted granted Critical
Publication of CN108694049B publication Critical patent/CN108694049B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例涉及计算机技术领域,特别涉及一种更新软件的方法和设备,用以解决现有技术中存在的目前更新软件的效率低的问题。本申请实施例客户端对AST文件进行返序列化得到树状结构的数据,根据树状结构的数据中第一方法的目标节点,确定用于执行对应的第二方法的功能的子树结构的数据,并根据所述子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。由于客户端可以在需要执行第二方法的功能时根据调用信息读取子树结构的数据,从而在有错误出现后只需要更新对应的方法,而不需要下载整个客户端,减少了下载的数据量,提高了更新的效率。

Description

一种更新软件的方法和设备
技术领域
本申请涉及计算机技术领域,特别涉及一种更新软件的方法和设备。
背景技术
软件升级,指软件从低版本向高版本的更新。由于高版本常常修复低版本的部分BUG(错误),所以经历了软件升级,一般都会比原版本的性能更好,得到优化的效果,用户也能有更好的体验。
除了修复低版本的BUG,如果有新的功能也可以通过软件升级方式进行扩展。
对于MacOS系统,提供了功能丰富的各种应用程序供用户下载使用。这些基于MacOS系统的应用程序如果有BUG或者新的功能也需要通过软件升级方式解决。
如果基于MacOS系统的应用程序出现BUG,比如设计编码导致的程序故障,只能重新下载程序,或者通过安装补丁解决。
这种方式会造成下载的数据量比较大,更新的效率比较低。
发明内容
本申请提供一种更新软件的方法和设备,用以解决现有技术中存在的目前更新软件的效率低的问题。
本申请实施例提供的一种更新软件的方法,该方法包括:
客户端对抽象语法树抽象语法树文件进行反序列化得到树状结构的数据,其中所述抽象语法树文件中包括至少一个第一方法,不同的所述第一方法与所述客户端中的不同的第二方法对应;
针对任意一个第一方法,所述客户端根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据;
所述客户端根据确定的子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。
本申请实施例提供的一种更新软件的设备,该设备包括:
序列化模块,用于对抽象语法树文件进行返序列化得到树状结构的数据,其中所述抽象语法树文件中包括至少一个第一方法,不同的所述第一方法与所述设备中的不同的第二方法对应;
子树确定模块,用于针对任意一个第一方法,根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据;
处理模块,用于根据确定的子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。
本申请实施例客户端对AST(Abstract Syntax Tree,抽象语法树)文件进行返序列化得到树状结构的数据,根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据,并根据所述子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。由于客户端可以在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据,从而在有错误出现后只需要更新对应的方法,而不需要下载整个客户端,减少了下载的数据量,提高了更新的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例更新软件的方法流程示意图;
图2为本申请实施例树状结构的数据示意图;
图3为本申请实施例一种子树结构的数据示意图;
图4为本申请实施例另一种子树结构的数据示意图;
图5为本申请实施例更新软件的完整方法流程示意图;
图6为本申请实施例执行功能的方法流程示意图;
图7为本申请实施例更新软件的设备结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部份实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
如图1所示,本申请实施例更新软件的方法包括:
步骤100、客户端对AST文件进行返序列化得到树状结构的数据,其中所述AST文件中包括至少一个第一方法,不同的所述第一方法与所述客户端中的不同的第二方法对应;
步骤101、针对任意一个第一方法,所述客户端根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据;
步骤102、所述客户端并根据所述子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。
本申请实施例客户端对AST文件进行返序列化得到树状结构的数据,根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据,并根据所述子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。由于客户端可以在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据,从而在有错误出现后只需要更新对应的方法,而不需要下载整个客户端,减少了下载的数据量,提高了更新的效率。
本申请实施例可以应用于采用AST文件和IMP(Implementation,实现)指针的系统,比如MacOS系统、iOS系统等。
可选的,本申请实施例的客户端在启动后会查看是否需要更新。具体方式有很多,比如如果插入外置存储器(例如U盘、移动硬盘等),客户端在启动后可以判断外置存储器中是否有AST文件,如果有,可以进一步判断AST文件对应的版本号是否与客户端对应的版本号匹配,如果匹配,则获取AST文件,并进行更新。
还比如客户端在启动后可以登录服务器判断客户端对应的版本号是否有需要更新的AST文件,如果有,则从服务器下载AST文件,并进行更新。
本申请实施例的AST文件中包括至少一个第一方法,这里的每个第一方法与所述客户端中的一个第二方法对应,且不同的第一方法对应的第二方法也不同。
第二方法是客户端中出现错误的方法,对应的第一方法是需要替换的方法,在完成方法更新后,如果需要用到第二方法的功能,就会执行第一方法。
本申请实施例的AST文件可以使用Objective-C语言编写,并通过开源编译器(例如Clang)进行编译后生成。
下面列举一个生成AST文件的例子。
维护人员可以使用Objective-C语言编写未更新的代码(即源代码),以及针对源代码进行更新的代码(即目标代码)。文件后缀名为.h和.m。
如果需要对客户端源代码已经存在的一个类的某个地热方法做替换,可以拷贝源代码中该类.h文件中所有内容到目标代码的头文件中。
之后使用Clang,通过makefile对上述目标代码进行编译,编译后就得到对应的AST文件。
需要说明的是,上述得到AST文件的内容只是举例说明,任何能够生成包含第一方法的AST文件的方式都适用本申请实施例。
下面详细介绍下更新的过程。
客户端启动并获取到需要更新的AST文件后,对AST文件进行反序列化得到树状结构的数据。
AST文件在通过Clang编译生成时,是结构化的字符文件,每个节点为一行字符串,父节点与子节点之间通过缩进判断,若相邻两个节点中后一个节点比前一节点缩进多一个单位,则表示后一节点是前一节点的子节点,如果相邻两个节点中后一个节点与前一节点的缩进相同,则表示两个节点一定拥有同一个父节点。
客户端将获取到需要更新的AST文件存储到内存后,读取AST文件之前建立一个空的根节点,并且建立一个由索引值促成的数组,初始值为[0],该索引值i表示是某个节点的第i个子节点。
以行为单位遍历AST文件,具体步骤如下:
1.判断该行存在多少个缩进单位,记为n,如n=0,则执行3,否则执行2。
2.判断n与上述索引值数组元素的关系:
i)若n>数组长度–1,则索引值数组增加一个元素0;
ii)若n<数组长度–1,则首先保留将索引值数组前n个元素,并将保留后的数组的最后一个元素自增1;
iii)若不满足i)和ii)则将数组的最后一个元素自增1。
3.生成一个空的节点,将该行字符串与节点绑定。
4.将上述节点作为子节点通过上述索引值插入对应的节点。
可选的,针对任意一个第一方法,所述客户端根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据时,所述客户端确定所述树状结构的数据中以所述第一方法的所述目标节点为根节点的子树结构的数据;
所述客户端将确定的子树结构的数据作为用于执行对应的所述第二方法的功能的子树结构的数据。
这里以附图进行说明。
如图2所示,一种可能的树状结构的数据示意图。
如果AST文件中有一个第一方法,则树状结构的数据中有一个目标节点;
如果AST文件中有多个第一方法,则树状结构的数据中有多个目标节点。
也就是说,一个第一方法对应一个目标节点。
图2中是以AST文件中包括两个第一方法举例说明。
图2中节点3和节点4是目标节点。针对每个第一方法都会得到一个子树结构的数据。
客户端会将树状结构的数据中的每个目标节点作为一个根节点,确定所述树状结构的数据中以所述第一方法的所述目标节点为根节点的子树结构的数据。
比如以节点3作为根节点得到的子树结构的数据入图3所示。
以节点4作为根节点得到的子树结构的数据入图4所示。
客户端可以从树状结构的数据中拷贝确定的每个子树结构的数据,得到独立的子树结构的数据。
在实施中,客户端可以将树状结构的数据中类型为ObjCMethodDecl(其他类型也适用,具体可以预先设置)的节点作为一个目标节点。
可选的,所述客户端根据确定的子树结构的数据确定调用信息时,根据确定的子树结构的数据确定用于读取子树结构的数据的实现指针;将所述实现指针置于调用信息中,以便在需要执行所述第二方法的功能时根据所述调用信息中的实现指针读取所述子树结构的数据。
也就是说,在得到子树结构的数据后,针对每个子树结构的数据会得到一个IMP指针,将得到的IMP指针置于调用信息中就完成将第一方法替换第二方法的过程。
具体的,针对任意一个第一方法,所述客户端根据所述AST文件中所述第一方法的方法名和方法类,生成所述第一方法对应的block;
所述客户端根据所述第一方法对应的block,生成对应的IMP指针;
所述客户端将所述IMP指针置于调用信息中。
第一方法的方法名和方法类可以在对应的子树结构的数据的根节点,即目标节点处获得。
可选的,所述客户端根据所述AST文件中所述第一方法的方法名和方法类,生成所述第一方法对应的block时,将方法名和方法类置于block中。即在block中会使用子树结构的数据的根节点(也就是说,block与子树结构的数据的根节点具有绑定关系)。
所述客户端根据所述第一方法对应的block,生成对应的IMP指针的方式根据应用的不同具体方式也不同。
以MacOS系统为例,调用原生系统API imp_implementationWithBlock方法,传入第一方法对应的block,即将block作为参数传递,就可以得到IMP指针:
IMP newIMP=imp_implementationWithBlock(block)。
可选的,所述客户端将所述IMP指针置于调用信息中。
以MacOS系统为例,调用信息可以是method_setImplementation(即原生系统API(Application Programming Interface,应用程序编程接口)),通过调用method_setImplementation,可以将新得到的IMP指针覆盖第一方法的方法类原来的IMP指针,从而实现第一方法替换第二方法。
其中,将所述IMP指针置于method_setImplementation时,还需要第二参数Method指针,Method指针通过将类名与方法置于class_getInstanceMethod方法得到。
即将所述IMP指针置于method_setImplementation时,可以通过调用class_getInstanceMethod(类,方法名)实现访问method_setImplementation(method,IMP指针)。
在将用于读取子树结构的数据的IMP指针置于调用信息中之后,如果用户在使用客户端时需要用到第二方法的功能,客户端会执行对应的第一方法。也就是说,替换的第一方法并不会马上执行,需要等到客户端调用第二方法时,才会执行对应的第一方法。
下面详细介绍下。
可选的,所述客户端在需要执行所述第二方法对应的功能时,确定所述调用信息中所述第二方法对应的IMP指针;
所述客户端根据IMP指针确定对应的block;
所述客户端确定的block读取与所述第二方法对应的第一方法的所述子树结构的数据,执行所述第二方法对应的功能。
在实施中,本申请实施例应用的系统会将该类的某个方法对应的IMP指针与方法名的映射关系保存到一个表里,当该类调用某个方法时,通过上述的这个表,查表可以得到IMP指针。
其中,客户端确定所述调用信息中所述第二方法对应的IMP指针时,可以通过系统确定;也可以由客户端通过查表确定。
在确定IMP指针后,客户端根据IMP指针确定对应的block。由于在生成IMP指针时是根据所述第一方法对应的block,实际上block和IMP指针已经有了绑定关系,所以根据IMP指针就可以确定对应的blcok。
由于第一方法对应的block与对应的子树结构的数据具有绑定关系,所以可以在block中获取到对应的子树结构的数据。
在找到子树结构的数据后,就可以读取子树结构的数据实现对应的功能。
其中,在找到子树结构的数据后,会对这个子树进行深度优先遍历。对遍历的每个树节点,根据节点的类型,进行不同的操作。
如进行不同的操作可以是生成一个变量并保存、计算一个表达式的值、进行一个方法调用等。
如图5所示,本申请实施例更新软件的完整方法包括:
步骤500、客户端启动。
步骤501、客户端登录服务器判断客户端对应的版本号是否有需要更新的AST文件,如果有,则执行步骤502;否则,跳出本流程。
步骤502、客户端从服务器下载AST文件。
步骤503、客户端对AST文件进行返序列化得到树状结构的数据。
步骤504、客户端从树状结构的数据中选择一个之前未选择的目标节点。
步骤505、客户端确定所述树状结构的数据中以选择的所述目标节点为根节点的子树结构的数据。
步骤506、所述客户端将确定的子树结构的数据作为用于执行对应的所述第二方法的功能的子树结构的数据。
步骤507、所述客户端判断是否还有未选择的目标节点,如果是,则返回步骤504;否则,执行步骤508。
步骤508、所述客户端从所述AST文件中选择一个之前未选择的所述第一方法的方法名和方法类。
步骤509、所述客户端根据选择的所述第一方法的方法名和方法类,生成所述第一方法对应的block。
步骤510、所述客户端根据所述第一方法对应的block,生成对应的IMP指针。
步骤511、所述客户端将所述IMP指针置于调用信息中。
步骤512、所述客户端判断所述AST文件中是否没有未选择的所述第一方法的方法名和方法类,如果是,则结束本流程,否则,返回步骤508。
如图6所示,本申请实施例执行功能的方法包括:
步骤600、客户端确定需要执行所述第二方法对应的功能。
步骤601、客户端从所述调用信息中查找第二方法对应的IMP指针。
步骤602、客户端根据查找到的IMP指针确定对应的block。
步骤603、客户端从所有子树结构的数据中查找包含确定的block中的方法名和方法类的子树结构的数据。
步骤604、客户端根据查找到的所述子树结构的数据,执行所述第二方法对应的功能。
基于同一发明构思,本申请实施例中还提供了一种更新软件的设备,由于该设备解决问题的原理与本申请实施例更新软件的方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,本申请实施例更新软件的设备包括:
序列化模块700,用于对AST文件进行返序列化得到树状结构的数据,其中所述AST文件中包括至少一个第一方法,不同的所述第一方法与所述设备中的不同的第二方法对应;
子树确定模块701,用于针对任意一个第一方法,根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据;
处理模块702,用于根据所述子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。
本申请实施例可以应用于采用AST文件和IMP指针的系统,比如MacOS系统、iOS系统等。
本申请实施例的AST文件中包括至少一个第一方法,这里的每个第一方法与所述客户端中的一个第二方法对应,且不同的第一方法对应的第二方法也不同。
第二方法是设备中出现错误的方法,对应的第一方法是需要替换的方法,在完成方法更新后,如果需要用到第二方法的功能,就会执行第一方法。
本申请实施例的AST文件可以使用Objective-C语言编写,并通过开源编译器(例如Clang)进行编译后生成。
下面详细介绍下更新的过程。
可选的,所述序列化模块700还用于:
在启动时根据版本号在确定需要更新后获取所述AST文件。
可选的,所述子树确定模块701具体用于:
针对任意一个第一方法,确定所述树状结构的数据中以所述第一方法的所述目标节点为根节点的子树结构的数据;
将确定的子树结构的数据作为用于执行对应的所述第二方法的功能的子树结构的数据。
这里以附图进行说明。
如图2所示,一种可能的树状结构的数据示意图。
如果AST文件中有一个第一方法,则树状结构的数据中有一个目标节点;
如果AST文件中有多个第一方法,则树状结构的数据中有多个目标节点。
也就是说,一个第一方法对应一个目标节点。
图2中是以AST文件中包括两个第一方法举例说明。
图2中节点3和节点4是目标节点。针对每个第一方法都会得到一个子树结构的数据。
子树确定模块701会将树状结构的数据中的每个目标节点作为一个根节点,确定所述树状结构的数据中以所述第一方法的所述目标节点为根节点的子树结构的数据。
比如以节点3作为根节点得到的子树结构的数据入图3所示。
以节点4作为根节点得到的子树结构的数据入图4所示。
子树确定模块701可以从树状结构的数据中拷贝确定的每个子树结构的数据,得到独立的子树结构的数据。
在实施中,子树确定模块701可以将树状结构的数据中类型为ObjCMethodDecl(其他类型也适用,具体可以预先设置)的节点作为一个目标节点。
可选的,所述处理模块702具体用于:
根据确定的子树结构的数据确定用于读取子树结构的数据的实现指针;
将所述实现指针置于调用信息中,以便在需要执行所述第二方法的功能时根据所述调用信息中的实现指针读取所述子树结构的数据。
具体的,针对任意一个第一方法,所述处理模块702根据所述AST文件中所述第一方法的设备名和设备类,生成所述第一方法对应的block;
根据所述第一方法对应的block,生成对应的IMP指针;
将所述IMP指针置于调用信息中。
第一方法的方法名和方法类可以在对应的子树结构的数据的根节点,即目标节点处获得。
可选的,所述处理模块702根据所述AST文件中所述第一方法的方法名和方法类,生成所述第一方法对应的block时,将方法名和方法类置于block中。即在block中会使用子树结构的数据的根节点(也就是说,block与子树结构的数据的根节点具有绑定关系)。
所述客户端根据所述第一方法对应的block,生成对应的IMP指针的方式根据应用的不同具体方式也不同。
以MacOS系统为例,处理模块702调用原生系统APIimp_implementationWithBlock方法,传入第一方法对应的block,即将block作为参数传递,就可以得到IMP指针:
IMP newIMP=imp_implementationWithBlock(block)。
可选的,所述处理模块702将所述IMP指针置于调用信息中。
以MacOS系统为例,调用信息可以是method_setImplementation(即原生系统API),通过调用method_setImplementation,可以将新得到的IMP指针覆盖第一方法的方法类原来的IMP指针,从而实现第一方法替换第二方法。
其中,将所述IMP指针置于method_setImplementation时,可以通过调用class_getInASTnceMethod实现访问method_setImplementation。
即将所述IMP指针置于method_setImplementation时,可以通过调用class_getInstanceMethod(类,方法名)实现访问method_setImplementation(method,IMP指针)。
可选的,所述处理模块702还用于:
在需要执行所述第二方法对应的功能时,确定所述调用信息中所述第二方法对应的IMP指针;
根据IMP指针确定对应的block;
确定的block读取与所述第二方法对应的第一方法的所述子树结构的数据,执行所述第二方法对应的功能。
在实施中,本申请实施例应用的系统会将该类的某个方法对应的IMP指针与方法名的映射关系保存到一个表里,当该类调用某个方法时,通过上述的这个表,查表可以得到IMP指针。
其中,所述处理模块702确定所述调用信息中所述第二方法对应的IMP指针时,,可以通过系统确定;也可以由客户端通过查表确定。
在确定IMP指针后,所述处理模块702根据IMP指针确定对应的block。由于在生成IMP指针时是根据所述第一方法对应的block,实际上block和IMP指针已经有了绑定关系,所以根据IMP指针就可以确定对应的blcok。
由于第一方法对应的block与对应的子树结构的数据具有绑定关系,所以可以在block中获取到对应的子树结构的数据。
在找到子树结构的数据后,就可以读取子树结构的数据实现对应的功能。
其中,在找到子树结构的数据后,会对这个子树进行深度优先遍历。对遍历的每个树节点,根据节点的类型,进行不同的操作。
如进行不同的操作可以是生成一个变量并保存、计算一个表达式的值、进行一个方法调用等。
以上参照示出根据本申请实施例的方法、装置(系统)和/或计算机程序产品的框图和/或流程图描述本申请。应理解,可以通过计算机程序指令来实现框图和/或流程图示图的一个块以及框图和/或流程图示图的块的组合。可以将这些计算机程序指令提供给通用计算机、专用计算机的处理器和/或其它可编程数据处理装置,以产生机器,使得经由计算机处理器和/或其它可编程数据处理装置执行的指令创建用于实现框图和/或流程图块中所指定的功能/动作的方法。
相应地,还可以用硬件和/或软件(包括固件、驻留软件、微码等)来实施本申请。更进一步地,本申请可以采取计算机可使用或计算机可读存储介质上的计算机程序产品的形式,其具有在介质中实现的计算机可使用或计算机可读程序代码,以由指令执行系统来使用或结合指令执行系统而使用。在本申请上下文中,计算机可使用或计算机可读介质可以是任意介质,其可以包含、存储、通信、传输、或传送程序,以由指令执行系统、装置或设备使用,或结合指令执行系统、装置或设备使用。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (12)

1.一种更新软件的方法,其特征在于,该方法包括:
客户端对抽象语法树抽象语法树文件进行反序列化得到树状结构的数据,其中所述抽象语法树文件中包括至少一个第一方法,不同的所述第一方法与所述客户端中的不同的第二方法对应;
针对任意一个第一方法,所述客户端根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据;
所述客户端根据确定的子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。
2.如权利要求1所述的方法,其特征在于,针对任意一个第一方法,所述客户端根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据,包括:
针对任意一个第一方法,所述客户端确定所述树状结构的数据中以所述第一方法的所述目标节点为根节点的子树结构的数据;
所述客户端将确定的子树结构的数据作为用于执行对应的所述第二方法的功能的子树结构的数据。
3.如权利要求1所述的方法,其特征在于,所述客户端根据确定的子树结构的数据确定调用信息,包括:
所述客户端根据确定的子树结构的数据确定用于读取子树结构的数据的实现指针;
所述客户端将所述实现指针置于调用信息中,以便在需要执行所述第二方法的功能时根据所述调用信息中的实现指针读取所述子树结构的数据。
4.如权利要求3所述的方法,其特征在于,所述客户端将所述实现指针置于调用信息中,包括:
针对任意一个第一方法,所述客户端根据所述抽象语法树文件中所述第一方法的方法名和方法类,生成所述第一方法对应的闭包;
所述客户端根据所述第一方法对应的闭包,生成对应的实现指针;
所述客户端将所述实现指针置于调用信息中。
5.如权利要求4所述的方法,其特征在于,所述客户端根据确定的子树结构的数据确定调用信息之后,还包括:
所述客户端在需要执行所述第二方法对应的功能时,确定所述调用信息中所述第二方法对应的实现指针;
所述客户端根据实现指针确定对应的闭包;
所述客户端确定的闭包读取与所述第二方法对应的第一方法的所述子树结构的数据,执行所述第二方法对应的功能。
6.如权利要求1~5任一所述的方法,其特征在于,所述客户端对抽象语法树文件进行返序列化得到树状结构的数据之前,还包括:
所述客户端启动时根据版本号在确定需要更新后获取所述抽象语法树文件。
7.一种更新软件的设备,其特征在于,该设备包括:
序列化模块,用于对抽象语法树文件进行反序列化得到树状结构的数据,其中所述抽象语法树文件中包括至少一个第一方法,不同的所述第一方法与所述设备中的不同的第二方法对应;
子树确定模块,用于针对任意一个第一方法,根据树状结构的数据中所述第一方法的目标节点,确定用于执行对应的所述第二方法的功能的子树结构的数据;
处理模块,用于根据确定的子树结构的数据确定调用信息,以便在需要执行所述第二方法的功能时根据所述调用信息读取所述子树结构的数据。
8.如权利要求7所述的设备,其特征在于,所述子树确定模块具体用于:
针对任意一个第一方法,确定所述树状结构的数据中以所述第一方法的所述目标节点为根节点的子树结构的数据;
将确定的子树结构的数据作为用于执行对应的所述第二方法的功能的子树结构的数据。
9.如权利要求7所述的设备,其特征在于,所述处理模块具体用于:
根据确定的子树结构的数据确定用于读取子树结构的数据的实现指针;
将所述实现指针置于调用信息中,以便在需要执行所述第二方法的功能时根据所述调用信息中的实现指针读取所述子树结构的数据。
10.如权利要求9所述的设备,其特征在于,所述处理模块具体用于:
针对任意一个第一方法,根据所述抽象语法树文件中所述第一方法的设备名和设备类,生成所述第一方法对应的闭包;
根据所述第一方法对应的闭包,生成对应的实现指针;
将所述实现指针置于调用信息中。
11.如权利要求10所述的设备,其特征在于,所述处理模块还用于:
在需要执行所述第二方法对应的功能时,确定所述调用信息中所述第二方法对应的实现指针;
根据实现指针确定对应的闭包;
确定的闭包读取与所述第二方法对应的第一方法的所述子树结构的数据,执行所述第二方法对应的功能。
12.如权利要求7~11任一所述的设备,其特征在于,所述序列化模块还用于:
在启动时根据版本号在确定需要更新后获取所述抽象语法树文件。
CN201710099298.XA 2017-02-23 2017-02-23 一种更新软件的方法和设备 Active CN108694049B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710099298.XA CN108694049B (zh) 2017-02-23 2017-02-23 一种更新软件的方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710099298.XA CN108694049B (zh) 2017-02-23 2017-02-23 一种更新软件的方法和设备

Publications (2)

Publication Number Publication Date
CN108694049A true CN108694049A (zh) 2018-10-23
CN108694049B CN108694049B (zh) 2021-08-17

Family

ID=63841869

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710099298.XA Active CN108694049B (zh) 2017-02-23 2017-02-23 一种更新软件的方法和设备

Country Status (1)

Country Link
CN (1) CN108694049B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111897555A (zh) * 2019-05-06 2020-11-06 阿里巴巴集团控股有限公司 客户端的动态更新方法、装置、系统及终端设备
CN113448605A (zh) * 2021-06-29 2021-09-28 北京高途云集教育科技有限公司 一种软件更新方法、装置、电子设备及存储介质
CN115291852A (zh) * 2022-09-29 2022-11-04 北京尽微致广信息技术有限公司 一种Sketch插件的开发方法、装置、设备及介质
CN115577363A (zh) * 2022-09-15 2023-01-06 华北电力科学研究院有限责任公司 恶意代码反序列化利用链的检测方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009199394A (ja) * 2008-02-22 2009-09-03 Nec Corp ソフトウェア更新管理システム、装置、マネージャプログラム及びエージェントプログラム
CN101788915A (zh) * 2010-02-05 2010-07-28 北京工业大学 基于可信进程树的白名单更新方法
CN103778061A (zh) * 2014-01-17 2014-05-07 南京航空航天大学 数组越界错误的自动检测和校正方法
CN105159715A (zh) * 2015-09-01 2015-12-16 南京大学 一种基于抽象语法树节点变更抽取的Python代码变更提示方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009199394A (ja) * 2008-02-22 2009-09-03 Nec Corp ソフトウェア更新管理システム、装置、マネージャプログラム及びエージェントプログラム
CN101788915A (zh) * 2010-02-05 2010-07-28 北京工业大学 基于可信进程树的白名单更新方法
CN103778061A (zh) * 2014-01-17 2014-05-07 南京航空航天大学 数组越界错误的自动检测和校正方法
CN105159715A (zh) * 2015-09-01 2015-12-16 南京大学 一种基于抽象语法树节点变更抽取的Python代码变更提示方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
朱波等: "基于AST的程序代码相似性度量研究", 《吉林大学学报》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111897555A (zh) * 2019-05-06 2020-11-06 阿里巴巴集团控股有限公司 客户端的动态更新方法、装置、系统及终端设备
CN113448605A (zh) * 2021-06-29 2021-09-28 北京高途云集教育科技有限公司 一种软件更新方法、装置、电子设备及存储介质
CN113448605B (zh) * 2021-06-29 2024-02-09 北京高途云集教育科技有限公司 一种软件更新方法、装置、电子设备及存储介质
CN115577363A (zh) * 2022-09-15 2023-01-06 华北电力科学研究院有限责任公司 恶意代码反序列化利用链的检测方法及装置
CN115291852A (zh) * 2022-09-29 2022-11-04 北京尽微致广信息技术有限公司 一种Sketch插件的开发方法、装置、设备及介质
CN115291852B (zh) * 2022-09-29 2022-12-23 北京尽微致广信息技术有限公司 一种Sketch插件的开发方法、装置、设备及介质

Also Published As

Publication number Publication date
CN108694049B (zh) 2021-08-17

Similar Documents

Publication Publication Date Title
US10019256B2 (en) Systems and methods for incremental software development
CN108459964B (zh) 测试用例选择方法、装置、设备以及计算机可读存储介质
CN101706725B (zh) 一种可重定位程序的加载及调试方法及系统
CN108694049A (zh) 一种更新软件的方法和设备
CN110944048B (zh) 业务逻辑配置方法及装置
CN110399159A (zh) 操作系统的部署方法、装置、计算机设备和存储介质
CN107239392A (zh) 一种测试方法、装置及终端
CN109669692B (zh) 源码共享方法、服务器、计算机可读存储介质及系统
CN108776587B (zh) 数据获取方法、装置、计算机设备以及存储介质
CN108376073A (zh) 一种测试软件包生成方法及终端
US11314491B1 (en) Generating asynchronous runtime compatibility in JavaScript applications
CN109933350A (zh) 在应用中嵌入代码的方法、装置及电子设备
CN114610640A (zh) 一种面向物联网可信执行环境的模糊测试方法和系统
Khatchadourian et al. [Engineering Paper] A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
CN107341141A (zh) 表单管理方法、装置、介质和计算设备
CN101136780A (zh) 获取用户命令信息的方法、系统及用户命令注册的装置
JP2021131897A (ja) スケジューリング方法、装置、設備、記憶設備、及びプログラム
CN109240696A (zh) 一种软件更新方法及装置
CN110750310A (zh) 基于ios系统组件化开发的二进制和源码切换方法
WO2014112973A1 (en) Server-platform simulation service
CN109933355A (zh) 应用程序升级方法及装置
CN114816475A (zh) 一种嵌入式操作系统的更新方法、装置、设备和介质
CN104978214B (zh) 一种组件加载方法、装置及终端
CN114201382A (zh) 测试用例生成方法、装置、存储介质和电子设备
CN111078548A (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1261946

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20240307

Address after: # 04-08, Lai Zanda Building 1, 51 Belarusian Road, Singapore

Patentee after: Alibaba Singapore Holdings Ltd.

Country or region after: Singapore

Address before: Cayman Islands Grand Cayman capital building, a four storey No. 847 mailbox

Patentee before: ALIBABA GROUP HOLDING Ltd.

Country or region before: Cayman Islands