CN116932019A - 功能更新方法、装置及存储介质 - Google Patents

功能更新方法、装置及存储介质 Download PDF

Info

Publication number
CN116932019A
CN116932019A CN202210344373.5A CN202210344373A CN116932019A CN 116932019 A CN116932019 A CN 116932019A CN 202210344373 A CN202210344373 A CN 202210344373A CN 116932019 A CN116932019 A CN 116932019A
Authority
CN
China
Prior art keywords
function
updated
application program
code
code position
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
Application number
CN202210344373.5A
Other languages
English (en)
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.)
Beijing ByteDance Network Technology Co Ltd
Original Assignee
Beijing ByteDance Network Technology Co 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 Beijing ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202210344373.5A priority Critical patent/CN116932019A/zh
Publication of CN116932019A publication Critical patent/CN116932019A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation

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)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种功能更新方法、装置及存储介质,该方法在待更新功能对应的App运行之前,根据待更新功能的功能标识,确定在App中是否获取到待更新功能所在的代码位置,如果获取到,说明App中有待更新功能(例如成功获取到后端服务器下发的功能),进而在App运行之后,进一步判断对应功能的代码是否被覆盖到,从而,确定是否更新待更新功能,即本申请实施例在将功能更新到线上设备之前先进行功能检测,减少功能更新上线引起的线上问题,加快线上设备App应用的能力开发和建设。

Description

功能更新方法、装置及存储介质
技术领域
本申请涉及计算机软件技术,尤其涉及一种功能更新方法、装置及存储介质。
背景技术
随着网络的迅速发展,人们生活水平的日益提高,越来越多的终端设备应用程序(Application,App)应用被开发出来以满足人们日益增长的需求。App应用中很多能力开发和建设需要控制覆盖的人群,逐步将业务铺开,一个原因是为了试探用户对新产品新能力的接受程度,另一个原因就是能够在出现问题的时候快速控制影响面,避免酿成大祸。
因此,App运行时,后端服务器需要将某些功能(比如一些功能开关,一些功能需要的参数)下发到对应的一批或者所有线上设备的App上,进行App功能更新。
然而,现有功能更新存在一些潜在风险,例如后端服务器将某些功能下发到指定线上设备的App后,线上设备的App有可能没有成功接收到下发的功能,或者线上设备App运行时,对应功能的代码可能没有被覆盖到,从而导致功能更新失败,使得线上设备App应用的能力开发和建设出现问题。
发明内容
为解决现有技术中存在的问题,本申请提供一种功能更新方法、装置及存储介质。
第一方面,本申请实施例提供一种功能更新方法,包括:
获取待更新功能的功能标识;
在所述待更新功能对应的App运行之前,根据所述待更新功能的功能标识,确定在所述App中是否获取到所述待更新功能所在的代码位置;
若在所述App中获取到所述待更新功能所在的代码位置,则在所述App运行之后,获得所述App中运行的功能的标识和所在的代码位置;
根据所述待更新功能的功能标识、所述待更新功能所在的代码位置,以及所述App中运行的功能的标识和所在的代码位置,进行功能匹配,并根据功能匹配结果,确定是否更新所述待更新功能。
在一种可能的实现方式中,所述根据所述待更新功能的功能标识,确定是否在所述App中获取到所述待更新功能所在的代码位置,包括:
获取所述App对应的安装包,根据所述安装包,确定所述安装包中字符串与字符串所在代码位置的映射关系,其中,所述字符串包括所述安装包中各个功能的功能标识对应的字符串;
基于所述映射关系,以及与所述待更新功能的功能标识,确定是否在所述App中获取到所述待更新功能所在的代码位置。
在一种可能的实现方式中,所述根据所述安装包,确定所述安装包中字符串与字符串所在代码位置的映射关系,包括:
对所述安装包中的加载指令进行解析,获得所述安装包中所有段和所有节的虚拟地址;
根据所述安装包中所有段和所有节的虚拟地址,以及预设字符串大小,确定所述安装包中字符串与字符串所在代码位置的映射关系。
在一种可能的实现方式中,所述基于所述映射关系,以及与所述待更新功能的功能标识,确定是否在所述App中获取到所述待更新功能所在的代码位置,包括:
根据所述安装包,获得所述安装包的代码段指令中目标地址在所述映射关系中的字符串;
在所述目标地址在所述映射关系中的字符串中,查找所述待更新功能的功能标识对应的字符串;
若在所述目标地址在所述映射关系中的字符串中,查找到所述待更新功能的功能标识对应的字符串,则确定在所述App中获取到所述待更新功能所在的代码位置。
在一种可能的实现方式中,所述在所述App运行之后,获得所述App中运行的功能的标识和所在的代码位置,包括:
在所述App中设置功能检测逻辑,所述功能检测逻辑用于在对应的功能被触发时,获取所述对应的功能的标识和所在的代码位置;
在所述App运行之后,基于所述功能检测逻辑,获得所述App中运行的功能的标识和所在的代码位置。
在一种可能的实现方式中,所述功能检测逻辑还用于在所述对应的功能被触发时,获取所述对应的功能的功能值;
在所述获得所述App中运行的功能的标识和所在的代码位置之后,还包括:
基于所述功能检测逻辑,获得所述App中运行的功能的功能值;
根据所述App中运行的功能的功能值,确定所述App中运行的功能的状态;
根据所述待更新功能的功能标识,以及所述App中运行的功能的标识和状态,确定所述待更新功能的运行状态。
在一种可能的实现方式中,所述根据所述待更新功能的功能标识、所述待更新功能所在的代码位置,以及所述App中运行的功能的标识和所在的代码位置,进行功能匹配,包括:
在所述App中运行的功能的标识中,确定与所述待更新功能的功能标识相同的目标标识;
根据所述目标标识,在所述App中运行的功能的所在的代码位置中,获得目标功能所在的代码位置;
基于所述待更新功能所在的代码位置与所述目标功能所在的代码位置,进行功能匹配。
在一种可能的实现方式中,所述根据功能匹配结果,确定是否更新所述待更新功能,包括:
若所述功能匹配结果满足预设功能条件,则确定更新所述待更新功能,其中,所述预设功能条件包括所述待更新功能所在的代码位置与所述目标功能所在的代码位置的匹配偏移值小于预设阈值。
第二方面,本申请实施例提供一种功能更新装置,包括:
功能获取模块,用于获取待更新功能的功能标识;
静态分析模块,用于在所述待更新功能对应的App运行之前,根据所述待更新功能的功能标识,确定在所述App中是否获取到所述待更新功能所在的代码位置;
运行分析模块,用于若在所述App中获取到所述待更新功能所在的代码位置,则在所述App运行之后,获得所述App中运行的功能的标识和所在的代码位置;
功能更新模块,用于根据所述待更新功能的功能标识、所述待更新功能所在的代码位置,以及所述App中运行的功能的标识和所在的代码位置,进行功能匹配,并根据功能匹配结果,确定是否更新所述待更新功能。
在一种可能的实现方式中,所述静态分析模块,具体用于:
获取所述App对应的安装包,根据所述安装包,确定所述安装包中字符串与字符串所在代码位置的映射关系,其中,所述字符串包括所述安装包中各个功能的功能标识对应的字符串;
基于所述映射关系,以及与所述待更新功能的功能标识,确定是否在所述App中获取到所述待更新功能所在的代码位置。
在一种可能的实现方式中,所述静态分析模块,具体用于:
对所述安装包中的加载指令进行解析,获得所述安装包中所有段和所有节的虚拟地址;
根据所述安装包中所有段和所有节的虚拟地址,以及预设字符串大小,确定所述安装包中字符串与字符串所在代码位置的映射关系。
在一种可能的实现方式中,所述静态分析模块,具体用于:
根据所述安装包,获得所述安装包的代码段指令中目标地址在所述映射关系中的字符串;
在所述目标地址在所述映射关系中的字符串中,查找所述待更新功能的功能标识对应的字符串;
若在所述目标地址在所述映射关系中的字符串中,查找到所述待更新功能的功能标识对应的字符串,则确定在所述App中获取到所述待更新功能所在的代码位置。
在一种可能的实现方式中,所述运行分析模块,具体用于:
在所述App中设置功能检测逻辑,所述功能检测逻辑用于在对应的功能被触发时,获取所述对应的功能的标识和所在的代码位置;
在所述App运行之后,基于所述功能检测逻辑,获得所述App中运行的功能的标识和所在的代码位置。
在一种可能的实现方式中,所述功能检测逻辑还用于在所述对应的功能被触发时,获取所述对应的功能的功能值;
所述运行分析模块,还用于:
基于所述功能检测逻辑,获得所述App中运行的功能的功能值;
根据所述App中运行的功能的功能值,确定所述App中运行的功能的状态;
根据所述待更新功能的功能标识,以及所述App中运行的功能的标识和状态,确定所述待更新功能的运行状态。
在一种可能的实现方式中,所述功能更新模块,具体用于:
在所述App中运行的功能的标识中,确定与所述待更新功能的功能标识相同的目标标识;
根据所述目标标识,在所述App中运行的功能的所在的代码位置中,获得目标功能所在的代码位置;
基于所述待更新功能所在的代码位置与所述目标功能所在的代码位置,进行功能匹配。
在一种可能的实现方式中,所述功能更新模块,具体用于:
若所述功能匹配结果满足预设功能条件,则确定更新所述待更新功能,其中,所述预设功能条件包括所述待更新功能所在的代码位置与所述目标功能所在的代码位置的匹配偏移值小于预设阈值。
第三方面,本申请实施例提供一种终端设备,包括:
处理器;
存储器;以及
计算机程序;
其中,所述计算机程序被存储在所述存储器中,并且被功能为由所述处理器执行,所述计算机程序包括用于执行如第一方面所述的方法的指令。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序使得服务器执行第一方面所述的方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行第一方面所述的方法。
本申请实施例提供的功能更新方法、装置及存储介质,该方法在待更新功能对应的App运行之前,根据待更新功能的功能标识,确定在上述App中是否获取到待更新功能所在的代码位置,如果获取到,说明App中有上述待更新功能(例如成功获取到后端服务器下发的功能),进而在上述App运行之后,进一步获得上述App中运行的功能的标识和所在的代码位置,并根据待更新功能的功能标识和所在的代码位置,以及上述App中运行的功能的标识和所在的代码位置,进行功能匹配,即在App运行后判断对应功能的代码是否被覆盖到,从而,确定是否更新待更新功能,即本申请实施例在将功能更新到线上设备之前先进行功能检测,减少功能更新上线引起的线上问题,加快线上设备App应用的能力开发和建设。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的功能更新系统架构示意图;
图2为本申请实施例提供的一种功能更新方法的流程示意图;
图3为本申请实施例提供的一种App运行后相关数据的获取示意图;
图4为本申请实施例提供的另一种功能更新方法的流程示意图;
图5为本申请实施例提供的一种App运行前的静态分析示意图;
图6为本申请实施例提供的一种功能更新装置的结构示意图;
图7为本申请实施例提供的一种终端设备的基本硬件架构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”及“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
近年来,由于互联网的业务发展突飞猛进,App应用中很多能力开发和建设需要控制覆盖的人群,逐步将业务铺开。因此各种功能更新能力平台就被建设起来,用于处理日益增长的功能更新能力需求。
功能更新要处理的场景主要是后端服务器需要将某些功能(比如一些功能开关,一些功能需要的参数)下发到对应的一批或者所有线上设备的App上,由指定代码逻辑进行处理。例如,业务A在App代码中提前预置了部分活动功能的入口和代码逻辑,随着App版本的新版本更新和迭代,这些代码逻辑也逐步覆盖到线上人群,但是由于默认是关闭的,后端服务器需要在活动时间下发功能开关来开启App中该活动功能。
但是,上述功能更新存在一些潜在风险,例如后端服务器将某些功能下发到指定线上设备的App后,线上设备的App有可能没有成功接收到下发的功能,或者线上设备App运行时,对应功能的代码可能没有被覆盖到,从而导致功能更新失败,使得线上设备App应用的能力开发和建设出现问题。
因此,本申请实施例提出一种功能更新方法,在将功能更新到线上设备之前先进行功能检测,例如在某一或某些设备中验证对应的App是否接收到新的功能,并且在App运行后判断对应功能的代码是否被覆盖到,从而,确定是否更新上述功能,减少功能更新上线引起的线上问题,加快线上设备App应用的能力开发和建设。
可选地,本申请实施例提供的功能更新方法可以应用于如图1所示的功能更新系统中。在图1中,该功能更新系统架构可以包括服务器101和终端设备102。其中,终端设备为线下终端设备。这里,终端设备中可以安装多个APP为用户提供不同服务,终端设备和服务器之间可以通过网络通信。其中,该网络可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
在具体实现过程中,如果线上设备上某一App代码中提前预置了部分活动功能的入口和代码逻辑,服务器101需要下发功能开关来开启App中该活动功能。这里,服务器101在将上述功能开关发送到线上设备之前,可以先对上述功能开关开启的功能进行检测,例如服务器101将上述功能开关开启的功能下发到终端设备102。终端设备102在上述功能下发到对应的App,该App运行之前,验证对应的App是否接收到上述功能。如果接收到,终端设备102可以进一步在App运行后,判断上述功能的代码是否被覆盖到,进而,确定是否更新上述功能(如在进一步在App运行后,判断上述功能的代码被覆盖到,确定更新上述功能)。
服务器101根据检测结果,如终端设备102确定的上述功能的更新结果,判断是否将上述功能开关发送到线上设备,如在终端设备102确定更新上述功能时,服务器101将上述功能开关发送到线上设备,线上设备根据服务器101下发的上述功能开关成功开启对应App中的功能,从而,减少了功能更新上线引起的线上问题,加快线上设备App应用的能力开发和建设。
需要进行说明的是,本申请实施例描述的系统架构以及业务场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着系统架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
下面以几个实施例为例对本申请的技术方案进行描述,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本申请实施例提供的一种功能更新方法的流程示意图,本实施例的执行主体可以为图1中的终端设备,具体执行主体可以根据实际应用场景确定,本申请实施例对此不做特别限制。如图2所示,本申请实施例提供的功能更新方法可以包括如下步骤:
S201:获取待更新功能的功能标识。
其中,上述待更新功能可以根据实际情况确定,例如图1所述实施例中的功能开关开启的功能。上述功能标识可以包括上述待更新功能的功能名、编号等标识上述待更新功能身份的信息。
这里,后端服务器可以将需要更新的功能的标识发送至上述终端设备,从而,上述终端设备基于上述服务器需要更新的功能的标识,确定上述待更新功能的功能标识。
另外,上述待更新功能可以为上述终端设备对应的App中的内置功能、静态功能或动态功能,具体可以根据实际情况确定。例如以图1中线上设备上某一App代码中提前预置了部分活动功能的入口和代码逻辑,服务器需要下发功能开关来开启App中该活动功能为例,上述待更新功能为上述功能开关开启的活动功能,上述待更新功能为上述终端设备对应的App中的动态功能。
S202:在上述待更新功能对应的App运行之前,根据上述待更新功能的功能标识,确定在上述App中是否获取到上述待更新功能所在的代码位置。
这里,上述终端设备进行静态分析,即在上述待更新功能对应的App运行之前,获取上述App对应的安装包,对该安装包进行分析,找出上述待更新功能所在的代码位置。
其中,上述终端设备在静态分析阶段,通过上述App对应的安装包,可以得到特定字符串所在的代码位置,然后将上述待更新功能的功能标识作为特定字符串输入到静态分析中,确定是否可以得到上述待更新功能所在代码位置。
S203:若在上述App中获取到上述待更新功能所在的代码位置,则在上述App运行之后,获得上述App中运行的功能的标识和所在的代码位置。
在本申请实施例中,如果静态分析后,在上述App中获取到上述待更新功能所在的代码位置,说明App中有上述待更新功能。例如以图1中服务器将上述功能开关开启的功能下发到上述终端设备为例,如果静态分析后,在上述终端设备对应的App中获取到上述功能开关开启的功能所在的代码位置,说明上述终端设备成功获取到服务器下发的上述功能。上述终端设备可以进一步在对应App运行后,判断上述功能开关开启的功能的代码是否被覆盖到。
示例性的,上述终端设备可以在对应的App中设置功能检测逻辑,该功能检测逻辑用于在对应的功能被触发时,获取对应的功能的标识和所在的代码位置。这样,在上述App运行之后,上述终端设备可以基于上述功能检测逻辑,获得上述App中运行的功能的标识和所在的代码位置。
以上述App对应的安装包为iOS(一种移动操作系统)安装包为例,上述终端设备可以利用iOS中的hook(钩子)能力,在对应的App中设置功能检测逻辑,即在获取功能项的方法中埋下钩子。示例性的,如图3所示,在上述App启动并正常运行之后,上述终端设备基于上述功能检测逻辑,获得上述App中运行的功能的标识和所在的代码位置,即在上述App启动并正常运行之后,上述终端设备在上述App中hook获取功能项的方法,触发功能项获取的方法,进而,获取上述App中运行的功能的标识和所在的代码位置。其中,上述终端设备将通过多次触发功能项获取的方法,获取上述App中所有运行的功能的标识和所在的代码位置。
另外,上述功能检测逻辑还可以用于在对应的功能被触发时,获取对应的功能的功能值。
上述终端设备可以基于上述功能检测逻辑,获得对应的App中运行的功能的功能值,进而,根据该功能值,确定上述App中运行的功能的状态,并根据上述待更新功能的功能标识,以及上述App中运行的功能的标识和状态,确定上述待更新功能的运行状态。
其中,上述终端设备可以预设多个功能的功能值与运行状态的对应关系,例如以图1中所述的功能开关为例,上述终端设备可以设置上述功能开关开启的功能的功能值为1或0,1表示开启,0表示关闭。这样,上述终端设备在获得对应的App中运行的功能的功能值后,可以根据该功能值和上述对应关系,确定上述App中运行的功能的状态,从而,根据上述待更新功能的功能标识,以及上述App中运行的功能的标识和状态,确定上述待更新功能的运行状态,这样,相关人员可以基于该运行状态判断上述待更新功能是否符合预期。例如图1所述服务器下发功能开关来开启App中该活动功能,如果上述终端设备确定上述功能的状态为开启,则相关人员可以基于该开启状态判断上述功能符合预期。
S204:根据上述待更新功能的功能标识、上述待更新功能所在的代码位置,以及上述App中运行的功能的标识和所在的代码位置,进行功能匹配,并根据功能匹配结果,确定是否更新上述待更新功能。
示例性的,上述终端设备可以在对应的App中运行的功能的标识中,确定与上述待更新功能的功能标识相同的目标标识,进而,根据该目标标识,在上述App中运行的功能的所在的代码位置中,获得目标功能所在的代码位置,并基于上述待更新功能所在的代码位置与上述目标功能所在的代码位置,进行功能匹配,例如将上述待更新功能所在的代码位置与上述目标功能所在的代码位置进行比较,确定位置偏移值。
这里,上述终端设备在进行上述功能匹配后,可以根据功能匹配结果,确定是否更新上述待更新功能。具体的,上述终端设备可以采用模糊匹配的逻辑,例如判断上述功能匹配结果是否满足预设功能条件,其中,该预设功能条件包括上述待更新功能所在的代码位置与上述目标功能所在的代码位置的匹配偏移值小于预设阈值。如果上述功能匹配结果满足上述预设功能条件,则上述终端设备确定更新所述待更新功能。其中,上述匹配偏移值可以理解为上述位置偏移值。
在本申请实施例中,由于上述终端设备在静态分析中得到的是待更新功能的代码位置,而对应App运行时通过设置功能检测逻辑获取运行的功能所在的代码位置,两者代码位置并不完全一致。为了进行后续功能匹配,根据功能匹配结果,确定是否更新上述待更新功能,上述终端设备考虑两者匹配偏移值,在该匹配偏移值小于预设阈值时,确定两者匹配,即模糊匹配命中,确定在App运行后判断对应功能的代码被覆盖到,从而,确定更新上述待更新功能。
本申请实施例,在待更新功能对应的App运行之前,根据待更新功能的功能标识,确定在上述App中是否获取到待更新功能所在的代码位置,如果获取到,说明App中有上述待更新功能(例如成功获取到后端服务器下发的功能),进而在上述App运行之后,进一步获得上述App中运行的功能的标识和所在的代码位置,并根据待更新功能的功能标识和所在的代码位置,以及上述App中运行的功能的标识和所在的代码位置,进行功能匹配,即在App运行后判断对应功能的代码是否被覆盖到,从而,确定是否更新待更新功能,即本申请实施例在将功能更新到线上设备之前先进行功能检测,减少功能更新上线引起的线上问题,加快线上设备App应用的能力开发和建设。
另外,上述终端设备在静态分析阶段,即在App运行之前,根据上述待更新功能的功能标识,确定在对应App中是否获取到上述待更新功能所在的代码位置时,考虑获取上述App对应的安装包,进而,根据该安装包,确定该安装包中字符串与字符串所在代码位置的映射关系,其中,上述字符串包括上述安装包中各个功能的功能标识对应的字符串,然后基于上述映射关系,以及与上述待更新功能的功能标识,确定是否在上述App中获取到上述待更新功能所在的代码位置,如果获取到,进一步在App运行后判断对应功能的代码是否被覆盖到,从而,确定是否更新待更新功能,解决现有功能更新存在功能更新失败的问题。图4为本申请实施例提出的另一种功能更新方法的流程示意图。如图4所示,该方法包括:
S401:获取待更新功能的功能标识。
其中,步骤S401与上述步骤S201的实现方式相同,此处不再赘述。
S402:在上述待更新功能对应的App运行之前,获取该App对应的安装包,根据该安装包,确定该安装包中字符串与字符串所在代码位置的映射关系,其中,上述字符串包括上述安装包中各个功能的功能标识对应的字符串。
其中,上述终端设备进行静态分析,对上述安装包中的加载指令进行解析,获得上述安装包中所有段和所有节的虚拟地址,进而,根据该虚拟地址,以及预设字符串大小,确定上述安装包中字符串与字符串所在代码位置的映射关系。
示例性的,如图5所示,以上述安装包为iOS安装包为例,上述终端设备进行静态分析,加载machO文件,对machO文件的加载指令进行解析,得到所有段和所有节的虚拟地址,然后根据该虚拟地址,以及预设字符串大小,确定安装包中字符串与字符串所在代码位置的映射关系。这里,上述终端设备在确定该映射关系时,还考虑machO文件中data段的字符串,根据data段的字符串、上述虚拟地址,以及预设字符串大小,确定上述映射关系。
S403:基于上述映射关系,以及与上述待更新功能的功能标识,确定是否在上述App中获取到上述待更新功能所在的代码位置。
在本申请实施例中,上述终端设备在确定上述映射关系后,可以根据上述安装包,获得上述安装包的代码段指令中目标地址在上述映射关系中的字符串,然后,在目标地址在上述映射关系中的字符串中,查找上述待更新功能的功能标识对应的字符串。如果在目标地址在上述映射关系中的字符串中,查找到上述待更新功能的功能标识对应的字符串,则上述终端设备可以确定在上述App中获取到上述待更新功能所在的代码位置,即可以在上述映射关系中找到与上述待更新功能的功能标识对应的字符串所在代码位置。
这里,还以上述安装包为iOS安装包为例,如图5所示,在确定安装包中字符串与字符串所在代码位置的映射关系之后,上述终端设备可以按序扫描text代码段指令,获得该代码段指令中目标地址在上述映射关系中的字符串。示例性的,上述终端设备可以首先判断上述代码段指令是否为adrp指令,如果是adrp指令,则从上述代码段指令获取首地址,判断该首地址是否在上述映射关系中的字符串中。如果不是adrp指令,则上述终端设备可以重新执行上述按序扫描text代码段指令的步骤。如果上述首地址在上述映射关系中,上述终端设备可以进一步判断下一指令是否为Add指令。另外,如果上述首地址不在上述映射关系中的字符串中,上述终端设备可以重新执行上述按序扫描text代码段指令的步骤。
如果下一指令为Add指令,上述终端设备可以从该下一指令中获得目标地址,判断该目标地址是否在上述映射关系中。这里,如果下一指令不为Add指令,上述终端设备可以重新执行上述按序扫描text代码段指令的步骤。如果上述目标地址在上述映射关系中的字符串中,上述终端设备可以记录命中,继续扫描text代码段指令直至text段结尾,获得text代码段指令中目标地址在上述映射关系中的所有字符串。
进一步地,上述终端设备可以在上述目标地址在上述映射关系中的所有字符串中,查找上述待更新功能的功能标识对应的字符串,如果查找到,基于上述映射关系,获取到上述待更新功能所在的代码位置,说明App中有上述待更新功能。如图1中线上设备上某一App代码中提前预置了部分活动功能的入口和代码逻辑,服务器需要下发功能开关来开启App中该活动功能,静态分析后上述终端设备在对应的App中获取到上述功能开关开启功能所在的代码位置,说明上述终端设备在对应的App成功接收到服务器下发的功能开关开启的功能。
S404:若在上述App中获取到上述待更新功能所在的代码位置,则在上述App运行之后,获得上述App中运行的功能的标识和所在的代码位置。
S405:根据上述待更新功能的功能标识、上述待更新功能所在的代码位置,以及上述App中运行的功能的标识和所在的代码位置,进行功能匹配,并根据功能匹配结果,确定是否更新上述待更新功能。
其中,步骤S404-S405与上述步骤S203-S204的实现方式相同,此处不再赘述。
本申请实施例中在静态分析阶段,考虑获取上述App对应的安装包,进而,根据该安装包,确定该安装包中字符串与字符串所在代码位置的映射关系,其中,上述字符串包括上述安装包中各个功能的功能标识对应的字符串,然后基于上述映射关系,以及与上述待更新功能的功能标识,确定是否在上述App中获取到上述待更新功能所在的代码位置,如果获取到,说明App中有上述待更新功能(例如成功获取到后端服务器下发的功能),进而在上述App运行之后,进一步在App运行后判断对应功能的代码是否被覆盖到,从而,确定是否更新待更新功能,即在将功能更新到线上设备之前先进行功能检测,解决现有功能更新存在功能更新失败的问题,加快线上设备App应用的能力开发和建设。
对应于上文实施例的功能更新方法,图6为本申请实施例提供的功能更新装置的结构示意图。为了便于说明,仅示出了与本申请实施例相关的部分。图6为本申请实施例提供的一种功能更新装置的结构示意图,该功能更新装置60包括:功能获取模块601、静态分析模块602、运行分析模块603以及功能更新模块604。这里的功能更新装置可以是上述终端设备本身,或者是实现终端设备的功能的芯片或者集成电路。这里需要说明的是,功能获取模块、静态分析模块、运行分析模块以及功能更新模块的划分只是一种逻辑功能的划分,物理上两者可以是集成的,也可以是独立的。
其中,功能获取模块601,用于获取待更新功能的功能标识。
静态分析模块602,用于在所述待更新功能对应的App运行之前,根据所述待更新功能的功能标识,确定在所述App中是否获取到所述待更新功能所在的代码位置。
运行分析模块603,用于若在所述App中获取到所述待更新功能所在的代码位置,则在所述App运行之后,获得所述App中运行的功能的标识和所在的代码位置。
功能更新模块604,用于根据所述待更新功能的功能标识、所述待更新功能所在的代码位置,以及所述App中运行的功能的标识和所在的代码位置,进行功能匹配,并根据功能匹配结果,确定是否更新所述待更新功能。
在一种可能的实现方式中,所述静态分析模块602,具体用于:
获取所述App对应的安装包,根据所述安装包,确定所述安装包中字符串与字符串所在代码位置的映射关系,其中,所述字符串包括所述安装包中各个功能的功能标识对应的字符串;
基于所述映射关系,以及与所述待更新功能的功能标识,确定是否在所述App中获取到所述待更新功能所在的代码位置。
在一种可能的实现方式中,所述静态分析模块602,具体用于:
对所述安装包中的加载指令进行解析,获得所述安装包中所有段和所有节的虚拟地址;
根据所述安装包中所有段和所有节的虚拟地址,以及预设字符串大小,确定所述安装包中字符串与字符串所在代码位置的映射关系。
在一种可能的实现方式中,所述静态分析模块602,具体用于:
根据所述安装包,获得所述安装包的代码段指令中目标地址在所述映射关系中的字符串;
在所述目标地址在所述映射关系中的字符串中,查找所述待更新功能的功能标识对应的字符串;
若在所述目标地址在所述映射关系中的字符串中,查找到所述待更新功能的功能标识对应的字符串,则确定在所述App中获取到所述待更新功能所在的代码位置。
在一种可能的实现方式中,所述运行分析模块603,具体用于:
在所述App中设置功能检测逻辑,所述功能检测逻辑用于在对应的功能被触发时,获取所述对应的功能的标识和所在的代码位置;
在所述App运行之后,基于所述功能检测逻辑,获得所述App中运行的功能的标识和所在的代码位置。
在一种可能的实现方式中,所述功能检测逻辑还用于在所述对应的功能被触发时,获取所述对应的功能的功能值。
所述运行分析模块603,还用于:
基于所述功能检测逻辑,获得所述App中运行的功能的功能值;
根据所述App中运行的功能的功能值,确定所述App中运行的功能的状态;
根据所述待更新功能的功能标识,以及所述App中运行的功能的标识和状态,确定所述待更新功能的运行状态。
在一种可能的实现方式中,所述功能更新模块604,具体用于:
在所述App中运行的功能的标识中,确定与所述待更新功能的功能标识相同的目标标识;
根据所述目标标识,在所述App中运行的功能的所在的代码位置中,获得目标功能所在的代码位置;
基于所述待更新功能所在的代码位置与所述目标功能所在的代码位置,进行功能匹配。
在一种可能的实现方式中,所述功能更新模块604,具体用于:
若所述功能匹配结果满足预设功能条件,则确定更新所述待更新功能,其中,所述预设功能条件包括所述待更新功能所在的代码位置与所述目标功能所在的代码位置的匹配偏移值小于预设阈值。
本申请实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本申请实施例此处不再赘述。
可选地,图7示意性地提供本申请所述终端设备的一种可能的基本硬件架构示意图。
参见图7,终端设备700包括至少一个处理器701以及通信接口703。进一步可选的,还可以包括存储器702和总线704。
其中,终端设备700中,处理器701的数量可以是一个或多个,图7仅示意了其中一个处理器701。可选地,处理器701,可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或者数字信号处理器(digital signalprocessor,DSP)。如果终端设备700具有多个处理器701,多个处理器701的类型可以不同,或者可以相同。可选地,终端设备700的多个处理器701还可以集成为多核处理器。
存储器702存储计算机指令和数据;存储器702可以存储实现本申请提供的上述功能更新方法所需的计算机指令和数据,例如,存储器702存储用于实现上述功能更新方法的步骤的指令。存储器702可以是以下存储介质的任一种或任一种组合:非易失性存储器(例如只读存储器(ROM)、固态硬盘(SSD)、硬盘(HDD)、光盘),易失性存储器。
通信接口703可以为所述至少一个处理器提供信息输入/输出。也可以包括以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
可选的,通信接口703还可以用于终端设备700与其它计算设备或者终端设备进行数据通信。
进一步可选的,图7用一条粗线表示总线704。总线704可以将处理器701与存储器702和通信接口703连接。这样,通过总线704,处理器701可以访问存储器702,还可以利用通信接口703与其它计算设备或者终端设备进行数据交互。
在本申请中,终端设备700执行存储器702中的计算机指令,使得终端设备700实现本申请提供的上述功能更新方法,或者使得终端设备700部署上述的功能更新装置。
从逻辑功能划分来看,示例性的,如图7所示,存储器702中可以包括功能获取模块601、静态分析模块602、运行分析模块603以及功能更新模块604。这里的包括仅仅涉及存储器中所存储的指令被执行时可以分别实现功能获取模块、静态分析模块、运行分析模块以及功能更新模块的功能,而不限定是物理上的结构。
另外,上述的终端设备除了可以像上述图7通过软件实现外,也可以作为硬件模块,或者作为电路单元,通过硬件实现。
本申请提供一种计算机可读存储介质,所述计算机程序产品包括计算机指令,所述计算机指令指示计算设备执行本申请提供的上述功能更新方法。
本申请提供一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行第一方面所述的方法。
本申请提供一种芯片,包括至少一个处理器和通信接口,所述通信接口为所述至少一个处理器提供信息输入和/或输出。进一步,所述芯片还可以包含至少一个存储器,所述存储器用于存储计算机指令。所述至少一个处理器用于调用并运行该计算机指令,以执行本申请提供的上述功能更新方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

Claims (19)

1.一种功能更新方法,其特征在于,包括:
获取待更新功能的功能标识;
在所述待更新功能对应的应用程序运行之前,根据所述待更新功能的功能标识,确定在所述应用程序中是否获取到所述待更新功能所在的代码位置;
若在所述应用程序中获取到所述待更新功能所在的代码位置,则在所述应用程序运行之后,获得所述应用程序中运行的功能的标识和所在的代码位置;
根据所述待更新功能的功能标识、所述待更新功能所在的代码位置,以及所述应用程序中运行的功能的标识和所在的代码位置,进行功能匹配,并根据功能匹配结果,确定是否更新所述待更新功能。
2.根据权利要求1所述的方法,其特征在于,所述根据所述待更新功能的功能标识,确定在所述应用程序中是否获取到所述待更新功能所在的代码位置,包括:
获取所述应用程序对应的安装包,根据所述安装包,确定所述安装包中字符串与字符串所在代码位置的映射关系,其中,所述字符串包括所述安装包中各个功能的功能标识对应的字符串;
基于所述映射关系,以及与所述待更新功能的功能标识,确定是否在所述应用程序中获取到所述待更新功能所在的代码位置。
3.根据权利要求2所述的方法,其特征在于,所述根据所述安装包,确定所述安装包中字符串与字符串所在代码位置的映射关系,包括:
对所述安装包中的加载指令进行解析,获得所述安装包中所有段和所有节的虚拟地址;
根据所述安装包中所有段和所有节的虚拟地址,以及预设字符串大小,确定所述安装包中字符串与字符串所在代码位置的映射关系。
4.根据权利要求2所述的方法,其特征在于,所述基于所述映射关系,以及与所述待更新功能的功能标识,确定是否在所述应用程序中获取到所述待更新功能所在的代码位置,包括:
根据所述安装包,获得所述安装包的代码段指令中目标地址在所述映射关系中的字符串;
在所述目标地址在所述映射关系中的字符串中,查找所述待更新功能的功能标识对应的字符串;
若在所述目标地址在所述映射关系中的字符串中,查找到所述待更新功能的功能标识对应的字符串,则确定在所述应用程序中获取到所述待更新功能所在的代码位置。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述在所述应用程序运行之后,获得所述应用程序中运行的功能的标识和所在的代码位置,包括:
在所述应用程序中设置功能检测逻辑,所述功能检测逻辑用于在对应的功能被触发时,获取所述对应的功能的标识和所在的代码位置;
在所述应用程序运行之后,基于所述功能检测逻辑,获得所述应用程序中运行的功能的标识和所在的代码位置。
6.根据权利要求5所述的方法,其特征在于,所述功能检测逻辑还用于在所述对应的功能被触发时,获取所述对应的功能的功能值;
在所述获得所述应用程序中运行的功能的标识和所在的代码位置之后,还包括:
基于所述功能检测逻辑,获得所述应用程序中运行的功能的功能值;
根据所述应用程序中运行的功能的功能值,确定所述应用程序中运行的功能的状态;
根据所述待更新功能的功能标识,以及所述应用程序中运行的功能的标识和状态,确定所述待更新功能的运行状态。
7.根据权利要求1至4中任一项所述的方法,其特征在于,所述根据所述待更新功能的功能标识、所述待更新功能所在的代码位置,以及所述应用程序中运行的功能的标识和所在的代码位置,进行功能匹配,包括:
在所述应用程序中运行的功能的标识中,确定与所述待更新功能的功能标识相同的目标标识;
根据所述目标标识,在所述应用程序中运行的功能的所在的代码位置中,获得目标功能所在的代码位置;
基于所述待更新功能所在的代码位置与所述目标功能所在的代码位置,进行功能匹配。
8.根据权利要求7所述的方法,其特征在于,所述根据功能匹配结果,确定是否更新所述待更新功能,包括:
若所述功能匹配结果满足预设功能条件,则确定更新所述待更新功能,其中,所述预设功能条件包括所述待更新功能所在的代码位置与所述目标功能所在的代码位置的匹配偏移值小于预设阈值。
9.一种功能更新装置,其特征在于,包括:
功能获取模块,用于获取待更新功能的功能标识;
静态分析模块,用于在所述待更新功能对应的应用程序运行之前,根据所述待更新功能的功能标识,确定在所述应用程序中是否获取到所述待更新功能所在的代码位置;
运行分析模块,用于若在所述应用程序中获取到所述待更新功能所在的代码位置,则在所述应用程序运行之后,获得所述应用程序中运行的功能的标识和所在的代码位置;
功能更新模块,用于根据所述待更新功能的功能标识、所述待更新功能所在的代码位置,以及所述应用程序中运行的功能的标识和所在的代码位置,进行功能匹配,并根据功能匹配结果,确定是否更新所述待更新功能。
10.根据权利要求9所述的装置,其特征在于,所述静态分析模块,具体用于:
获取所述应用程序对应的安装包,根据所述安装包,确定所述安装包中字符串与字符串所在代码位置的映射关系,其中,所述字符串包括所述安装包中各个功能的功能标识对应的字符串;
基于所述映射关系,以及与所述待更新功能的功能标识,确定是否在所述应用程序中获取到所述待更新功能所在的代码位置。
11.根据权利要求10所述的装置,其特征在于,所述静态分析模块,具体用于:
对所述安装包中的加载指令进行解析,获得所述安装包中所有段和所有节的虚拟地址;
根据所述安装包中所有段和所有节的虚拟地址,以及预设字符串大小,确定所述安装包中字符串与字符串所在代码位置的映射关系。
12.根据权利要求10所述的装置,其特征在于,所述静态分析模块,具体用于:
根据所述安装包,获得所述安装包的代码段指令中目标地址在所述映射关系中的字符串;
在所述目标地址在所述映射关系中的字符串中,查找所述待更新功能的功能标识对应的字符串;
若在所述目标地址在所述映射关系中的字符串中,查找到所述待更新功能的功能标识对应的字符串,则确定在所述应用程序中获取到所述待更新功能所在的代码位置。
13.根据权利要求9至12中任一项所述的装置,其特征在于,所述运行分析模块,具体用于:
在所述应用程序中设置功能检测逻辑,所述功能检测逻辑用于在对应的功能被触发时,获取所述对应的功能的标识和所在的代码位置;
在所述应用程序运行之后,基于所述功能检测逻辑,获得所述应用程序中运行的功能的标识和所在的代码位置。
14.根据权利要求13所述的装置,其特征在于,所述功能检测逻辑还用于在所述对应的功能被触发时,获取所述对应的功能的功能值;
所述运行分析模块,还用于:
基于所述功能检测逻辑,获得所述应用程序中运行的功能的功能值;
根据所述应用程序中运行的功能的功能值,确定所述应用程序中运行的功能的状态;
根据所述待更新功能的功能标识,以及所述应用程序中运行的功能的标识和状态,确定所述待更新功能的运行状态。
15.根据权利要求9至12中任一项所述的装置,其特征在于,所述功能更新模块,具体用于:
在所述应用程序中运行的功能的标识中,确定与所述待更新功能的功能标识相同的目标标识;
根据所述目标标识,在所述应用程序中运行的功能的所在的代码位置中,获得目标功能所在的代码位置;
基于所述待更新功能所在的代码位置与所述目标功能所在的代码位置,进行功能匹配。
16.根据权利要求15所述的装置,其特征在于,所述功能更新模块,具体用于:
若所述功能匹配结果满足预设功能条件,则确定更新所述待更新功能,其中,所述预设功能条件包括所述待更新功能所在的代码位置与所述目标功能所在的代码位置的匹配偏移值小于预设阈值。
17.一种终端设备,其特征在于,包括:
处理器;
存储器;以及
计算机程序;
其中,所述计算机程序被存储在所述存储器中,并且被功能为由所述处理器执行,所述计算机程序包括用于执行如权利要求1-8任一项所述的方法的指令。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序使得服务器执行权利要求1-8任一项所述的方法。
19.一种计算机程序产品,其特征在于,包括计算机指令,所述计算机指令被处理器执行权利要求1-8任一项所述的方法。
CN202210344373.5A 2022-03-31 2022-03-31 功能更新方法、装置及存储介质 Pending CN116932019A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210344373.5A CN116932019A (zh) 2022-03-31 2022-03-31 功能更新方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210344373.5A CN116932019A (zh) 2022-03-31 2022-03-31 功能更新方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN116932019A true CN116932019A (zh) 2023-10-24

Family

ID=88391087

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210344373.5A Pending CN116932019A (zh) 2022-03-31 2022-03-31 功能更新方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN116932019A (zh)

Similar Documents

Publication Publication Date Title
CN107302604B (zh) 基于Kubernetes的PaaS平台域名配置方法及装置和电子设备
CN1174307C (zh) 用于自动设备驱动程序配置的方法和系统
CN106815031B (zh) 内核模块加载方法和装置
CN108459964B (zh) 测试用例选择方法、装置、设备以及计算机可读存储介质
CN111290779B (zh) 灰度发布方法、装置、存储介质和电子设备
CN109492181B (zh) 页面跳转方法、装置、计算机设备和存储介质
CN110730090B (zh) 云环境中代理端批量更新方法、装置、介质及电子设备
CN106843947B (zh) 代码缺陷的处理方法和装置
CN112328301B (zh) 维护运行环境一致性的方法、装置、存储介质及电子设备
CN106354832B (zh) 一种数据发布方法、设备及系统
CN112214413A (zh) 一种应用程序的测试方法、装置、设备及存储介质
CN116932019A (zh) 功能更新方法、装置及存储介质
CN114610446B (zh) 一种自动注入探针的方法、装置及系统
CN113656291B (zh) 软件脚本引擎动态调用方法
CN107688479B (zh) Android系统网络集群及其搭建的方法、Android系统网络集群数据处理的方法和系统
CN113396391A (zh) 应用程序启动的方法、装置、电子设备及存储介质
CN111797016B (zh) 应用程序的测试方法、设备、存储介质及装置
CN114428691A (zh) 应用调用方法、装置、电子设备和计算机可读存储介质
CN114637969A (zh) 目标对象的鉴权方法及装置
CN114489698A (zh) 应用程序安装方法和装置
CN113485855A (zh) 一种内存共享方法、装置、电子设备及可读存储介质
CN111240589A (zh) 基于分区隔离的系统管理方法、装置、设备及存储介质
CN116149802B (zh) 数据推送方法、设备、存储介质及装置
CN117883789B (zh) 数据获取方法、装置、设备、可读存储介质及程序产品
CN112559920B (zh) 基于跳转指令的hook方法、装置、设备及存储介质

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