CN114610516A - 应用程序的修复方法、装置、计算机设备以及存储介质 - Google Patents

应用程序的修复方法、装置、计算机设备以及存储介质 Download PDF

Info

Publication number
CN114610516A
CN114610516A CN202210240370.7A CN202210240370A CN114610516A CN 114610516 A CN114610516 A CN 114610516A CN 202210240370 A CN202210240370 A CN 202210240370A CN 114610516 A CN114610516 A CN 114610516A
Authority
CN
China
Prior art keywords
target
function
file
bytecode
byte code
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
CN202210240370.7A
Other languages
English (en)
Other versions
CN114610516B (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.)
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 CN202210240370.7A priority Critical patent/CN114610516B/zh
Publication of CN114610516A publication Critical patent/CN114610516A/zh
Priority to PCT/CN2023/076115 priority patent/WO2023169164A1/zh
Application granted granted Critical
Publication of CN114610516B publication Critical patent/CN114610516B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了一种应用程序的修复方法、装置、计算机设备以及存储介质,其中,该方法包括:检测针对所述Flutter应用中的目标功能的功能调用请求;基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。在本公开实施例中,在基于功能调用请求在Flutter应用的本地文件中查找到目标功能的目标字节码文件的情况下,就可以运行该字节码文件,以实现执行修复对应功能缺陷之后的目标功能,从而缩短了修复Flutter应用的功能缺陷的流程,提高了修复效率,进而提高了用户的使用体验。

Description

应用程序的修复方法、装置、计算机设备以及存储介质
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种应用程序的修复方法、装置、计算机设备以及存储介质。
背景技术
随着Flutter跨端技术的普及,基于该Flutter跨端技术开发的Flutter应用也越来越多,因此,针对Flutter应用的问题修复需求也越来越普遍。然而,在现有的针对Flutter应用的修复方案中,在针对该Flutter应用中的待修复功能进行代码修改得到补丁包后,再将该补丁包上传至应用商店,以使用户从应用商店下载该补丁包,从而完成该Flutter应用中的待修复功能的修复。因此,现有的修复方案整个流程较为冗长,修复效率较低。
发明内容
本公开实施例至少提供一种应用程序的修复方法、装置、计算机设备以及存储介质。
第一方面,本公开实施例提供了一种应用程序的修复方法,应用于Flutter应用,包括:
检测针对所述Flutter应用中的目标功能的功能调用请求;基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;其中,所述目标字节码文件中包含用于修复所述目标功能的对应功能缺陷的字节码;在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
一种可选的实施方式中,所述基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件,包括:
在所述功能调用请求中获取所述目标功能的功能标识;获取目标映射文件;其中,所述目标映射文件中包含所述Flutter应用的指定功能的功能标识和字节码标识之间的映射关系,所述字节码标识用于指示对应指定功能是否存在相应的字节码文件;在所述目标映射文件中查找与所述目标功能的功能标识相对应的目标映射数据,并在基于所述目标映射数据确定所述本地文件中存在所述目标功能的目标字节码文件的情况下,在所述本地文件的指定位置中查找所述目标功能的目标字节码文件。
一种可选的实施方式中,所述方法还包括:
在未查找到所述目标功能的目标字节码文件的情况下,获取预设时段内所述Flutter应用的历史下载记录;所述历史下载记录用于指示所述Flutter应用在预设时段内从服务器获取到的对应功能的字节码文件;在确定所述历史下载记录中包含所述目标功能的目标字节码文件的历史下载记录的情况下,向所述服务器发送获取请求;获取所述服务器基于所述获取请求返回的所述目标字节码文件,并运行所述目标字节码文件。
一种可选的实施方式中,所述方法还包括:
在未查找到所述目标功能的目标字节码文件的情况下,在所述本地文件查找所述目标功能的AOT编译文件,并运行所述AOT编译文件。
一种可选的实施方式中,所述基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件,包括:
在所述本地文件中查找到所述目标功能的多个版本的字节码文件的情况下,基于所述功能调用请求确定当前时刻所需要调用的目标功能的版本标识;在所述多个版本的字节码文件中确定与所述版本标识相匹配的字节码文件作为所述目标功能的目标字节码文件。
一种可选的实施方式中,所述方法还包括:
在检测对所述Flutter应用中的目标功能的功能调用请求之后,获取服务器发送的所述目标功能的目标字节码文件;将所述目标功能的目标字节码文件保存在所述本地文件的指定存储位置。
一种可选的实施方式中,所述将所述目标功能的目标字节码文件保存在所述本地文件的指定存储位置,包括:
在所述本地文件中查找所述目标功能的历史字节码文件;在查找到所述历史字节码文件的情况下,删除所述历史字节码文件,并将所述目标字节码文件保存在所述本地文件的指定存储位置。
一种可选的实施方式中,所述运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,包括:
调用所述Flutter应用中的Dart虚拟机;将所述目标字节码文件加载至所述Dart虚拟机,以通过所述Dart虚拟机中的字节码解释器运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
第二方面,本公开实施例还提供一种应用程序的修复方法,应用于服务器,包括:
确定Flutter应用中待修复功能的目标修复代码;对所述目标修复代码进行编译,并基于所述编译过程中的目标中间编译产物生成所述待修复功能的目标字节码文件;向所述Flutter应用发送所述目标字节码文件,以使所述Flutter应用基于上述第一方面所述的方法运行所述目标字节码文件。
一种可选的实施方式中,所述方法还包括:
接收所述Flutter应用发送的获取请求,并确定所述获取请求所对应的待修复功能;获取所述待修复功能所对应的目标字节码文件,并将所述目标字节码文件传输至所述Flutter应用。
一种可选的实施方式中,所述获取所述待修复功能所对应的目标字节码文件,包括:
获取所述待修复功能所对应的各个版本的字节码文件;在所述各个版本的字节码文件中确定与所述获取请求相匹配的字节码文件作为所述目标字节码文件;其中,所述获取请求中携带所请求调用的待修复功能的版本标识。
第三方面,本公开实施例还提供一种应用程序的修复装置,应用于Flutter应用,包括:
检测单元,用于检测针对所述Flutter应用中的目标功能的功能调用请求;查找单元,用于基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;其中,所述目标字节码文件中包含用于修复所述目标功能的对应功能缺陷的字节码;运行单元,用于在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
第四方面,本公开实施例还提供一种应用程序的修复装置,应用于服务器,包括:
确定单元,用于确定Flutter应用中待修复功能的目标修复代码;编译单元,用于对所述目标修复代码进行编译,并基于所述编译过程中的目标中间编译产物生成所述待修复功能的目标字节码文件;发送单元,用于向所述Flutter应用发送所述目标字节码文件,以使所述Flutter应用基于上述权利要求第一方面所述的方法运行所述目标字节码文件。
第五方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面至第二方面中任一种可能的实施方式中的步骤。
第六方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面至第二方面中任一种可能的实施方式中的步骤。
本公开实施例提供的应用程序的修复方法、装置、计算机设备以及存储介质,在本公开实施例中,首先检测针对Flutter应用中的目标功能的功能调用请求,并基于该功能调用请求在Flutter应用的本地文件中查找该目标功能的目标字节码文件,在查找到该目标字节码文件的情况下,就可以运行该目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,从而缩短了修复Flutter应用的功能缺陷的流程,提高了修复效率,进而提高了用户的使用体验。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种应用程序的修复方法的流程图;
图2示出了本公开实施例所提供的基于检测到的功能调用请求在Flutter应用的本地文件中查找目标功能的目标字节码文件的流程图;
图3示出了本公开实施例所提供的另一种应用程序的修复方法的流程图;
图4示出了本公开实施例所提供的又一种应用程序的修复方法的流程图;
图5示出了本公开实施例所提供的Flutter应用和服务器之间的交互过程的示意图;
图6示出了本公开实施例所提供的一种应用程序的修复装置的示意图;
图7示出了本公开实施例所提供的另一种应用程序的修复装置的示意图;
图8示出了本公开实施例所提供的一种计算机设备的示意图;
图9示出了本公开实施例所提供的另一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,在现有的针对Flutter应用的修复方案中,在针对该Flutter应用中的待修复功能进行代码修改得到补丁包后,再将该补丁包上传至应用商店,以使用户从应用商店下载该补丁包,从而完成该Flutter应用中的待修复功能的修复。因此,现有的修复方案整个流程较为冗长,修复效率较低。
基于上述研究,本公开提供了一种应用程序的修复方法、装置、计算机设备以及存储介质,在本公开实施例中,首先检测针对Flutter应用中的目标功能的功能调用请求,并基于该功能调用请求在Flutter应用的本地文件中查找该目标功能的目标字节码文件,在查找到该目标字节码文件的情况下,就可以运行该目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,从而缩短了修复Flutter应用的功能缺陷的流程,提高了修复效率,进而提高了用户的使用体验。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用程序的修复方法进行详细介绍,本公开实施例所提供的应用程序的修复方法的执行主体一般为具有一定计算能力的计算机设备。在一些可能的实现方式中,该应用程序的修复方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的一种应用程序的修复方法的流程图,应用于Flutter应用,所述方法包括步骤S101~S105,其中:
S101:检测针对所述Flutter应用中的目标功能的功能调用请求。
在本公开实施例中,上述Flutter应用为基于可跨平台开发的Flutter框架开发的应用程序,该Flutter应用中包含实现不同指定功能的方法。例如,该Flutter应用可以为资讯浏览类应用程序,其中,该Flutter应用包含以下指定功能:资讯浏览,短视频浏览,影视放映,小程序等。
这里,用户在使用该Flutter应用时,可以通过功能调用请求对Flutter应用中的目标功能进行调用,从而实现该Flutter应用的目标功能。例如,在上述目标功能为该Flutter应用中的小程序的情况下,在检测到针对该小程序的调用操作后,就可以将该小程序确定为目标功能,并确定检测到针对该目标功能的功能调用请求。
S103:基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;其中,所述目标字节码文件中包含用于修复所述目标功能的对应功能缺陷的字节码。
在本公开实施例中,首先需要查询Flutter应用的本地文件,并确定该本地文件中是否包含上述目标功能所对应的目标字节码文件。需要说明的是,在该目标功能产生功能缺陷的情况下,技术人员可以编写用于修复该目标功能所对应功能缺陷的修复代码,并将基于该修复代码生成对应的目标字节码文件,然后将该目标字节码文件下发至Flutter应用。因此,在运行该Flutter应用的目标功能之前,需要首先在Flutter应用的本地文件中查找该目标功能的目标字节码文件。
具体实施时,可以通过以下几种方式查找上述目标功能的目标字节码文件:
方式一:
在本公开实施例中,上述Flutter应用的本地文件中包含不同的子文件,其中,每个子文件可以对应该Flutter应用中的至少一个指定功能。因此,在查找上述目标功能的目标字节码文件时,首先可以确定该目标功能在Flutter应用的本地文件中所对应的目标子文件,并对该目标子文件进行遍历,从而确定该目标子文件中是否包含该目标功能的目标字节码文件。
方式二:
在本公开实施例中,上述Flutter应用的本地文件中包含字节码文件,该字节码文件用于存储服务器发送的字节码文件。因此,在在查找上述目标功能的目标字节码文件时,首先可以基于上述功能调用请求确定目标功能的功能标识,并根据该功能标识在上述Flutter应用的字节码文件中进行查找,从而确定出字节码文件中是否包含和该功能标识相对应的目标字节码文件。
S105:在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
在本公开实施例中,在查找到上述目标功能的目标字节码文件的情况下,就可以通过运行该目标字节码文件的方式实现该目标功能。具体实施时,可以将该目标字节码加载到虚拟机中,并通过该虚拟机实现字节码解释器的功能,对该目标字节码进行运行,从而实现上述目标功能。
通过上述描述可知,在本公开实施例中,首先检测针对Flutter应用中的目标功能的功能调用请求,并基于该功能调用请求在Flutter应用的本地文件中查找该目标功能的目标字节码文件,在查找到该目标字节码文件的情况下,就可以运行该目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,从而缩短了修复Flutter应用的功能缺陷的流程,提高了修复效率,进而提高了用户的使用体验。
在一个可选的实施方式中,所述方法还包括如下过程:
(1)、在检测对所述Flutter应用中的目标功能的功能调用请求之后,获取服务器发送的所述目标功能的目标字节码文件;
(2)、将所述目标功能的目标字节码文件保存在所述本地文件的指定存储位置。
在本公开实施例中,在获取到服务器发送的目标功能的目标字节码文件后,就可以确定该目标字节码文件在本地文件中的指定存储位置。具体实施时,对应上述查找目标功能的目标字节码文件的几种方式,包括以下几种情况:
情况一:
在本公开实施例中,对应上述方式一中提到的:上述Flutter应用的本地文件中包含不同的子文件,其中,每个子文件可以对应该Flutter应用中的至少一个指定功能。因此,在确定上述目标功能的目标字节码文件的指定存储位置时,首先可以确定该目标功能所在本地文件中所对应的目标子文件的存储目录,并在该存储目录下生成上述目标字节码文件的指定存储位置,从而将该目标字节码文件存储在该目标子文件中。
情况二:
在本公开实施例中,对应上述方式二中提到的:上述Flutter应用的本地文件中包含字节码文件,该字节码文件用于存储服务器发送的字节码文件。因此,在确定上述目标功能的目标字节码文件的指定存储位置时,首先可以获取该字节码文件在本地文件中所对应的存储目录,并在该存储目录下生成上述目标字节码文件的指定存储位置,从而将该目标字节码文件存储在该字节码文件中。
通过上述描述可知,在获取到服务器发送的目标功能的目标字节码文件之后,就可以将该目标字节码文件保存到本地文件的指定存储位置,从而便于根据功能调用请求,从指定存储位置调用该目标字节码文件。
在一个可选的实施方式中,上述将所述目标功能的目标字节码文件保存在上述本地文件的指定存储位置,具体包括如下过程:
(1)、在所述本地文件中查找所述目标功能的历史字节码文件;
(2)、在查找到所述历史字节码文件的情况下,删除所述历史字节码文件,并将所述目标字节码文件保存在所述本地文件的指定存储位置。
在本公开实施例中,在对上述目标字节码文件进行保存之前,首先可以确定上述目标功能在本地文件中是否存在历史版本的历史字节码文件。
具体实施时,首先可以确定上述目标字节码文件在本地文件中的指定存储位置,在该指定存储位置存在其他字节码文件的情况下,则确定目标功能在本地文件中存在历史版本的历史字节码文件,然后,就可以删除该历史字节码文件,并将上述目标字节码文件保存在该指定存储位置。
另外的,在上述指定存储位置不存在其他字节码文件的情况下,还可以对该指定位置所属的存储目录进行查询,从而确定该存储目录下是否存在目标功能的历史字节码文件。在该存储目录下存在目标功能的历史字节码文件的情况下,就可以删除该历史字节码文件,并将上述目标字节码文件保存在上述指定存储位置。
通过上述描述可知,在将对上述目标字节码文件进行保存之前,首先可以确定上述目标功能在本地文件中是否存在历史版本的历史字节码文件,并在本地文件中存在历史版本的历史字节码文件的情况下,删除该历史字节码文件,从而节省本地文件的存储空间,并减少了可能出现的,由于存在多个版本的字节码文件造成的调用字节码文件错误的情况。
在一个可选的实施方式中,参见图2所示,上述S103,基于检测到的功能调用请求在Flutter应用的本地文件中查找目标功能的目标字节码文件,具体包括如下过程:
S1031:在所述功能调用请求中获取所述目标功能的功能标识。
在本公开实施例中,首先基于上述功能调用请求,获取目标功能的功能标识,其中,该功能标识可以为该目标功能的功能id。
S1032:获取目标映射文件;其中,所述目标映射文件中包含所述Flutter应用的指定功能的功能标识和字节码标识之间的映射关系,所述字节码标识用于指示对应指定功能是否存在相应的字节码文件。
在本公开实施例中,可以为上述Flutter应用建立目标映射文件。这里,该目标映射文件中可以包含映射表,其中,该映射表用于指示Flutter应用中的指定功能的功能标识和字节码标识之间的映射关系。
这里,上述映射表中的映射关系是实时更新的,具体实施时,在接收到服务器发送的字节码文件后,就可以获取该字节码文件的字节码标识,并根据该字节码标识确定该字节码所对应的指定功能,然后,就可以基于该字节码标识,在上述映射表中更新该指定功能的映射关系。另外的,该映射表中还可以包含本地文件中存储字节码文件的指定位置,从而便于直接查找该字节码文件。
在本公开实施例中,在获取到上述目标功能的功能标识后,就可以获取上述映射表,并根据该目标功能的功能标识在映射表中查找该目标功能是否有对应的映射关系。
S1033:在所述目标映射文件中查找与所述目标功能的功能标识相对应的目标映射数据,并在基于所述目标映射数据确定所述本地文件中存在所述目标功能的目标字节码文件的情况下,在所述本地文件的指定位置中查找所述目标功能的目标字节码文件。
在本公开实施例中,首先可以确定与目标功能的功能标识相对应的目标映射数据,并基于该目标映射数据确定该目标功能所对应的映射关系。
具体实施时,可以基于上述目标映射数据确定目标功能是否有对应的映射关系,这里,可以基于映射关系标识来确定该目标功能是否有对应的映射关系。在该目标功能所对应的映射关系标识为1时,则确定该目标功能有对应的映射关系,在该目标功能所对应的映射关系标识为0时,则确定该目标功能没有对应的映射关系。
在确定出上述目标功能没有对应的映射关系后,就可以确定该目标功能没有对应的目标字节码文件。另外的,在确定出上述目标功能有对应的映射关系后,就可以确定该目标功能有对应的目标字节码文件,然后,就可以基于上述目标映射数据,确定本地文件中存储该目标字节码文件的指定位置,并基于该指定位置查找上述目标字节码文件。
通过上述描述可知,在检测到针对目标功能的功能调用请求后,就可以基于目标映射文件查找与该目标功能相对应的目标映射数据,并根据该目标映射数据查找目标功能所对应的目标字节码文件,从而提高了查找目标字节码文件的效率,进而提高了设备的响应速度。
在一个可选的实施方式中,上述S103,基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件,还包括如下过程:
(1)、在所述本地文件中查找到所述目标功能的多个版本的字节码文件的情况下,基于所述功能调用请求确定当前时刻所需要调用的目标功能的版本标识;
(2)、在所述多个版本的字节码文件中确定与所述版本标识相匹配的字节码文件作为所述目标功能的目标字节码文件。
在本公开实施例中,在上述目标功能经历过多次Flutter应用的版本更新和/或功能修复的情况下,每次版本更新或者功能修复后Flutter应用都会收到对应的字节码文件,因此,上述目标功能在本地文件中可以包含多个版本的字节码文件。
在本地文件中查找到目标功能的多个版本的字节码文件的情况下,首先需要确定功能调用请求所指示调用的目标功能的版本标识,其中,该版本标识可以用于指示对应的目标功能的版本更新时间。
在一种可选的实施方式中,上述功能调用请求所指示调用的目标功能的版本标识默认为最近一次版本更新所对应的版本标识,例如,目标功能所对应的多个版本的版本标识所指示的版本更新时间分别为2021.12.3、2021.12.31以及2022.2.1,那么,上述功能调用请求所指示调用的目标功能的版本标识所指示的版本更新时间就可以为2022.2.1。
在另一种可选的实施方式中,上述功能调用请求所指示调用的目标功能的版本标识还可以为指向性的,可以指示目标功能所对应的全部版本中的任一版本的版本标识。
具体实施时,用户在针对目标功能进行调用之前,可以在目标功能所对应的多个版本中选择想要调用的目标版本,并针对该目标版本发起功能调用请求。因此,在确定出该功能调用请求所指示调用的目标功能的版本标识后,就可以在多个版本的字节码文件中确定与该版本标识相匹配的字节码文件作为目标字节码文件。
另外的,在上述目标功能所对应的多个版本的字节码文件中包含失效字节码文件的情况下,还可以优先判断功能调用请求所指示调用的目标字节码文件是否有效,从而避免运行失效字节码文件造成的和Flutter应用之间的版本冲突。这里,失效字节码文件可以由开发人员进行确定,在确定出失效字节码文件之后,就可以通过服务器向Flutter应用发送禁用指令,以使该Flutter应用基于禁用指令,将该禁用指令所指示的字节码文件确定为失效字节码文件。
通过上述描述可知,在目标功能对应多个版本的字节码文件的情况下,可以通过功能调用请求确定出需要调用的目标字节码文件,从而使得用户可以自行选择想要运行的版本,提高了用户的操作体验。
在一个可选的实施方式中,上述方法还包括如下过程:
(1)、在未查找到所述目标功能的目标字节码文件的情况下,获取预设时段内所述Flutter应用的历史下载记录;所述历史下载记录用于指示所述Flutter应用在预设时段内从服务器获取到的对应功能的字节码文件;
(2)、在确定所述历史下载记录中包含所述目标功能的目标字节码文件的历史下载记录的情况下,向所述服务器发送获取请求;
(3)、获取所述服务器基于所述获取请求返回的所述目标字节码文件,并运行所述目标字节码文件。
在一种可选的实施方式中,在获取到服务器发送的目标字节码文件后,可能会由于存储失败等问题无法对该目标字节码进行保存,或者在对该目标字节码进行保存后,由于清理存储空间等原因出现将该目标字节码文件误删等情况,此时,就会出现未查找到该目标功能的目标字节码文件,但是存在目标字节码文件的历史下载记录的情况。
这里,在确定出上述历史下载记录中包含目标功能的目标字节码文件的历史下载记录的情况下,就可以确定所述目标功能的功能标识,并基于该功能标识生成目标字节码文件的获取请求,并获取服务器基于该获取请求返回的目标字节码文件。
在另一种可选的实施方式中,在未查找到目标功能的目标字节码文件的情况下,还可以直接基于目标功能的功能标识生成目标字节码文件的获取请求,服务器在接收到该获取请求后,就可以确定该目标功能是否存在对应的目标字节码文件,若存在,就可以将该目标字节码文件发送至Flutter应用,从而提高了功能调用请求调用到目标字节码文件的可靠性。
通过上述描述可知,在未查找到目标功能的目标字节码文件的情况下,可以通过历史下载记录确定目标功能是否对应目标字节码文件,从而避免在该目标字节码文件被从本地文件中误删时,功能调用请求无法调用到该目标字节码文件的问题。
在一个可选的实施方式中,所述方法还包括如下过程:
在未查找到所述目标功能的目标字节码文件的情况下,在所述本地文件查找所述目标功能的AOT编译文件,并运行所述AOT编译文件。
需要说明的是,在构建上述Flutter应用时得到的编译产物为AOT编译文件,该AOT编译文件为和处理器类型相关的二进制代码,具体的,可以通过Dart编译器对该Flutter应用进行编译。另外的,在对上述Flutter应用的指定功能进行编译从而修复该指定功能的功能缺陷的过程中,还可以产出中间编译产物:字节码文件,该字节码文件可以发送到Flutter应用中,以使该Flutter应用对该字节码文件进行运行,从而达到修复该指定功能的功能缺陷的效果。
因此,在本公开实施例中,在未查找到目标功能的目标字节码文件的情况下,就可以获取该目标功能在本地文件中的AOT编译文件,并通过运行该AOT编译文件来实现该目标功能。
通过上述描述可知,在未查找到目标功能的目标字节码文件的情况下,还可以运行该目标功能的AOT编译文件,从而使得该目标功能能够顺利的运行。
在一个可选的实施方式中,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,具体包括如下过程:
(1)、调用所述Flutter应用中的Dart虚拟机;
(2)、将所述目标字节码文件加载至所述Dart虚拟机,以通过所述Dart虚拟机中的字节码解释器运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
在本公开实施例中,在获取到上述目标功能的目标字节码后,就可以调用上述虚拟机,这里,由于该Flutter应用是基于Dart语言进行构建的,那么,该虚拟机就可以为Dart虚拟机,其中,Dart虚拟机为为Dart语言提供执行环境的虚拟机。
具体实施时,可以将上述目标字节码加载到Dart虚拟机中,以通过该Dart虚拟机实现字节码解释器的功能,从而对该目标字节码进行运行,实现上述目标功能。
通过上述描述可知,通过将目标功能的目标字节码文件加载至Dart虚拟机的方式,就可以运行该目标功能的目标字节码文件,从而实现执行修复对应功能缺陷之后的目标功能。
在一个可选的实施方式中,参见图3所示,为本公开实施例提供的另一种应用程序的修复方法的流程图,应用于服务器,所述方法包括步骤S301~S305,其中:
S301:确定Flutter应用中待修复功能的目标修复代码。
在本公开实施例中,在确定出Flutter应用中的待修复功能后,技术人员就可以针对该待修复功能编写目标修复代码,该目标修复代码可以用于修复该待修复功能所对应的功能缺陷。这里,上述待修复功能即为上述目标功能。
S303:对所述目标修复代码进行编译,并基于所述编译过程中的目标中间编译产物生成所述待修复功能的目标字节码文件。
在本公开实施例中,在确定出Flutter应用中待修复功能的目标修复代码后,就可以将该目标修复代码加载至Dart编译器中,以使该Dart编译器对该目标修复代码进行编译。应理解的是,这里需要获取该编译过程中的中间编译产物,并基于该中间编译产物生成待修复功能的目标字节码文件。
S305:向所述Flutter应用发送所述目标字节码文件,以使所述Flutter应用基于上述图1所对应的方法运行所述目标字节码文件。
在本公开实施例中,在确定出上述目标字节码文件后,就可以将该目标字节码文件发送至Flutter应用,以使该Flutter应用运行该目标字节码文件。
具体实施时,在向Flutter应用发送上述目标字节码文件时可以设置多种发送方式。例如,可以采用实时发送的方式,在确定出上述目标字节码文件后就可以将该目标字节码发送至Flutter应用;或者可以采用定时发送的方式,这里,具体的发送时间可以基于Flutter应用的版本更新时间进行确定。
通过上述描述可知,在本公开实施例中,首先检测针对Flutter应用中的目标功能的功能调用请求,并基于该功能调用请求在Flutter应用的本地文件中查找该目标功能的目标字节码文件,在查找到该目标字节码文件的情况下,就可以运行该目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,从而缩短了修复Flutter应用的功能缺陷的流程,提高了修复效率,进而提高了用户的使用体验。
在一个可选的实施方式中,所述方法还包括如下过程:
(1)、接收所述Flutter应用发送的获取请求,并确定所述获取请求所对应的待修复功能;
(2)、接获取所述待修复功能所对应的目标字节码文件,并将所述目标字节码文件传输至所述Flutter应用。
在本公开实施例中,上述Flutter应用可以基于针对目标功能的功能调用请求确定需要调用的目标字节码,并基于该目标功能的功能标识,生成该目标字节码的获取请求,并向服务器发送该获取请求。
服务器在获取到该获取请求后,就可以基于该获取请求所携带的功能标识确定对应的待修复功能,并获取该待修复功能所对应的目标字节码文件。
另外的,在上述待修复功能对应多个版本的字节码文件的情况下,还可以在这多个版本的字节码文件中确定出目标字节码文件,具体的,获取所述待修复功能所对应的目标字节码文件,包括如下过程:
(1)、获取所述待修复功能所对应的各个版本的字节码文件;
(2)、在所述各个版本的字节码文件中确定与所述获取请求相匹配的字节码文件作为所述目标字节码文件;其中,所述获取请求中携带所请求调用的待修复功能的版本标识。
在本公开实施例中,上述待修复功能在服务器的本地文件中对应着更新文件,其中,该更新文件用于存储该待修复功能的多个版本的字节码文件。
在通过上述Flutter应用向服务器发送待修复功能所对应的获取请求之前,用户可以选择想要获取的目标字节码文件所属版本的版本标识,然后,就可以基于该版本标识生成获取请求,并将该获取请求发送至服务器。
服务器在接收到该获取请求后,首先可以获取该获取请求所携带的功能标识确定待修复功能,并获取该待修复功能所对应的更新文件中的各个版本的字节码文件。
在获取到上述各个版本的字节码文件后,就可以确定上述获取请求中所携带的待修复功能的版本标识,并根据该版本标识在更新文件中所包含的各个版本的字节码文件之中进行匹配操作,并将与该版本标识相匹配的字节码文件确定为目标字节码文件。
通过上述描述可知,在待修复功能对应多个版本的字节码文件的情况下,可以基于获取请求所携带的版本标识确定出目标字节码文件,从而使得用户能通过获取请求灵活的选择想要获取的目标字节码文件的版本,提高了用户的使用体验。
参见图4所示,为本公开实施例提供的又一种应用程序的修复方法的流程图,所述方法包括步骤S401~S105,其中:
S401:检测针对所述Flutter应用中的目标功能的功能调用请求。
在本公开实施例中,用户在使用该Flutter应用时,可以通过功能调用请求对Flutter应用中的目标功能进行调用,从而实现该Flutter应用的目标功能。例如,在上述目标功能为该Flutter应用中的小程序的情况下,在检测到针对该小程序的调用操作后,就可以将该小程序确定为目标功能,并确定检测到针对该目标功能的功能调用请求。
S402:判断上述目标功能在本地文件中是否存在目标字节码文件,若是,则执行S403;若否,则执行S404。
在本公开实施例中,在本公开实施例中,首先需要查询Flutter应用的本地文件,并确定该本地文件中是否包含上述目标功能所对应的目标字节码文件。需要说明的是,在该目标功能产生功能缺陷的情况下,技术人员可以编写用于修复该目标功能所对应功能缺陷的修复代码,并将基于该修复代码生成对应的目标字节码文件,然后将该目标字节码文件下发至Flutter应用。因此,在运行该Flutter应用的目标功能之前,需要首先在Flutter应用的本地文件中查找该目标功能的目标字节码文件。
具体实施时,可以通过上述图1所对应的实施例中的几种方式查找上述目标功能的目标字节码文件,此处不再赘述。
S403:运行上述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
在本公开实施例中,在查找到上述目标功能的目标字节码文件的情况下,就可以通过运行该目标字节码文件的方式实现该目标功能。具体实施时,可以将该目标字节码加载到虚拟机中,并通过该虚拟机实现字节码解释器的功能,对该目标字节码进行运行,从而实现上述目标功能。
S404:在本地文件查找上述目标功能的AOT编译文件,并运行该AOT编译文件,以实现执行该目标功能。
在本公开实施例中,上述Flutter应用和服务器之间的交互过程如图5所示,其中,该Flutter应用中包含n个指定功能,每个指定功能在本地文件中均对应AOT编译文件。在上述目标功能在本地文件中不包含目标字节码文件时,就可以运行该目标功能在本地文件中的AOT编译文件,以实现执行该目标功能。
另外的,在上述Flutter应用中的指定功能3需要修复的情况下,就可以获取服务器发送的该指定功能3所对应的目标字节码文件,并将该目标字节码文件存储到指定位置中。
在一个可选的实施方式中,在构建上述Flutter应用的过程中,还包括如下过程:
(1)、获取上述Flutter应用中所包含的多个指定功能,并获取每个指定功能所对应的Dart代码文件;
确定字节码文件判断程序;该字节码判断程序用于在检测到针对对应的指定功能的功能调用请求之后,判断该指定功能在本地文件中是否存在对应的字节码文件;
(2)、基于上述字节码文件判断程序,为每个上述Dart代码文件进行插桩操作;其中,该插桩操作为在每个Dart代码文件的指定位置***该字节码文件判断程序。
在本公开实施例中,在构建上述Flutter应用的过程中,首先可以将该Flutter应用划分为多个指定功能,并分别开发该Flutter应用的每个指定功能,从而得到每个指定功能所对应的Dart代码文件。
这里,可以在编写每个指定功能所对应的Dart代码文件的过程中,将上述字节码文件判断程序编写在该Dart代码文件的指定位置中。另外的,还可以在得到每个指定功能所对应的Dart代码文件之后,通过插桩操作为每个Dart代码文件的指定位置***该字节码文件判断程序,本公开对***字节码文件判断程序的具体时机不做限定。
通过上述描述可知,通过为每个指定功能所对应的Dart代码文件***字节码文件判断程序的方式,使得Flutter应用在检测到针对目标功能的功能调用请求后,通过该目标功能中的字节码文件判断程序查找该Flutter应用的本地文件中是否存在目标字节码文件。
综上,在本公开实施例中,首先检测针对Flutter应用中的目标功能的功能调用请求,并基于该功能调用请求在Flutter应用的本地文件中查找该目标功能的目标字节码文件,在查找到该目标字节码文件的情况下,就可以运行该目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,从而缩短了修复Flutter应用的功能缺陷的流程,提高了修复效率,进而提高了用户的使用体验。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用程序的修复方法对应的应用程序的修复装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用程序的修复方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图6所示,为本公开实施例提供的一种应用程序的修复装置的示意图,所述装置包括:检测单元61、查找单元62、运行单元63;其中,
检测单元61,用于检测针对所述Flutter应用中的目标功能的功能调用请求;
查找单元62,用于基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;其中,所述目标字节码文件中包含用于修复所述目标功能的对应功能缺陷的字节码;
运行单元63,用于在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
在本公开实施例中,首先检测针对Flutter应用中的目标功能的功能调用请求,并基于该功能调用请求在Flutter应用的本地文件中查找该目标功能的目标字节码文件,在查找到该目标字节码文件的情况下,就可以运行该目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,从而缩短了修复Flutter应用的功能缺陷的流程,提高了修复效率,进而提高了用户的使用体验。
一种可能的实施方式中,查找单元62,还用于:
在所述功能调用请求中获取所述目标功能的功能标识;
获取目标映射文件;其中,所述目标映射文件中包含所述Flutter应用的指定功能的功能标识和字节码标识之间的映射关系,所述字节码标识用于指示对应指定功能是否存在相应的字节码文件;
在所述目标映射文件中查找与所述目标功能的功能标识相对应的目标映射数据,并在基于所述目标映射数据确定所述本地文件中存在所述目标功能的目标字节码文件的情况下,在所述本地文件的指定位置中查找所述目标功能的目标字节码文件。
一种可能的实施方式中,该装置还用于:
在未查找到所述目标功能的目标字节码文件的情况下,获取预设时段内所述Flutter应用的历史下载记录;所述历史下载记录用于指示所述Flutter应用在预设时段内从服务器获取到的对应功能的字节码文件;
在确定所述历史下载记录中包含所述目标功能的目标字节码文件的历史下载记录的情况下,向所述服务器发送获取请求;
获取所述服务器基于所述获取请求返回的所述目标字节码文件,并运行所述目标字节码文件。
一种可能的实施方式中,该装置还用于:
在未查找到所述目标功能的目标字节码文件的情况下,在所述本地文件查找所述目标功能的AOT编译文件,并运行所述AOT编译文件。
一种可能的实施方式中,查找单元62,还用于:
在所述本地文件中查找到所述目标功能的多个版本的字节码文件的情况下,基于所述功能调用请求确定当前时刻所需要调用的目标功能的版本标识;
在所述多个版本的字节码文件中确定与所述版本标识相匹配的字节码文件作为所述目标功能的目标字节码文件。
一种可能的实施方式中,该装置还用于:
在检测对所述Flutter应用中的目标功能的功能调用请求之后,获取服务器发送的所述目标功能的目标字节码文件;
将所述目标功能的目标字节码文件保存在所述本地文件的指定存储位置。
一种可能的实施方式中,该装置还用于:
在所述本地文件中查找所述目标功能的历史字节码文件;
在查找到所述历史字节码文件的情况下,删除所述历史字节码文件,并将所述目标字节码文件保存在所述本地文件的指定存储位置。
一种可能的实施方式中,运行单元63,还用于:
调用所述Flutter应用中的Dart虚拟机;
将所述目标字节码文件加载至所述Dart虚拟机,以通过所述Dart虚拟机中的字节码解释器运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
参照图7所示,为本公开实施例提供的另一种应用程序的修复装置的示意图,所述装置包括:确定单元71、编译单元72、发送单元73;其中,
确定单元71,用于确定Flutter应用中待修复功能的目标修复代码;
编译单元72,用于对所述目标修复代码进行编译,并基于所述编译过程中的目标中间编译产物生成所述待修复功能的目标字节码文件;
发送单元73,用于向所述Flutter应用发送所述目标字节码文件,以使所述Flutter应用基于上述图1所对应的方法运行所述目标字节码文件。
一种可能的实施方式中,该装置还用于:
接收所述Flutter应用发送的获取请求,并确定所述获取请求所对应的待修复功能;
获取所述待修复功能所对应的目标字节码文件,并将所述目标字节码文件传输至所述Flutter应用。
一种可能的实施方式中,该装置还用于:
获取所述待修复功能所对应的各个版本的字节码文件;
在所述各个版本的字节码文件中确定与所述获取请求相匹配的字节码文件作为所述目标字节码文件;其中,所述获取请求中携带所请求调用的待修复功能的版本标识。
关于装置中的各单元的处理流程、以及各单元之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
对应于图1中的应用程序的修复方法,本公开实施例还提供了一种计算机设备800,如图8所示,为本公开实施例提供的计算机设备800结构示意图,包括:
处理器81、存储器82、和总线83;存储器82用于存储执行指令,包括内存821和外部存储器822;这里的内存821也称内存储器,用于暂时存放处理器81中的运算数据,以及与硬盘等外部存储器822交换的数据,处理器81通过内存821与外部存储器822进行数据交换,当所述计算机设备800运行时,所述处理器81与所述存储器82之间通过总线83通信,使得所述处理器81执行以下指令:
检测针对所述Flutter应用中的目标功能的功能调用请求;
基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;其中,所述目标字节码文件中包含用于修复所述目标功能的对应功能缺陷的字节码;
在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
对应于图3中的应用程序的修复方法,本公开实施例还提供了另一种计算机设备900,如图9所示,为本公开实施例提供的计算机设备900结构示意图,包括:
处理器91、存储器92、和总线93;存储器92用于存储执行指令,包括内存921和外部存储器922;这里的内存921也称内存储器,用于暂时存放处理器91中的运算数据,以及与硬盘等外部存储器922交换的数据,处理器91通过内存921与外部存储器922进行数据交换,当所述计算机设备900运行时,所述处理器91与所述存储器92之间通过总线93通信,使得所述处理器91执行以下指令:
确定Flutter应用中待修复功能的目标修复代码;
对所述目标修复代码进行编译,并基于所述编译过程中的目标中间编译产物生成所述待修复功能的目标字节码文件;
向所述Flutter应用发送所述目标字节码文件,以使所述Flutter应用基于上述图1所对应的方法运行所述目标字节码文件。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用程序的修复方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用程序的修复方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

Claims (15)

1.一种应用程序的修复方法,其特征在于,应用于Flutter应用,包括:
检测针对所述Flutter应用中的目标功能的功能调用请求;
基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;其中,所述目标字节码文件中包含用于修复所述目标功能的对应功能缺陷的字节码;
在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
2.根据权利要求1所述的方法,其特征在于,所述基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件,包括:
在所述功能调用请求中获取所述目标功能的功能标识;
获取目标映射文件;其中,所述目标映射文件中包含所述Flutter应用的指定功能的功能标识和字节码标识之间的映射关系,所述字节码标识用于指示对应指定功能是否存在相应的字节码文件;
在所述目标映射文件中查找与所述目标功能的功能标识相对应的目标映射数据,并在基于所述目标映射数据确定所述本地文件中存在所述目标功能的目标字节码文件的情况下,在所述本地文件的指定位置中查找所述目标功能的目标字节码文件。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在未查找到所述目标功能的目标字节码文件的情况下,获取预设时段内所述Flutter应用的历史下载记录;所述历史下载记录用于指示所述Flutter应用在预设时段内从服务器获取到的对应功能的字节码文件;
在确定所述历史下载记录中包含所述目标功能的目标字节码文件的历史下载记录的情况下,向所述服务器发送获取请求;
获取所述服务器基于所述获取请求返回的所述目标字节码文件,并运行所述目标字节码文件。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在未查找到所述目标功能的目标字节码文件的情况下,在所述本地文件查找所述目标功能的AOT编译文件,并运行所述AOT编译文件。
5.根据权利要求1所述的方法,其特征在于,所述基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件,包括:
在所述本地文件中查找到所述目标功能的多个版本的字节码文件的情况下,基于所述功能调用请求确定当前时刻所需要调用的目标功能的版本标识;
在所述多个版本的字节码文件中确定与所述版本标识相匹配的字节码文件作为所述目标功能的目标字节码文件。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在检测对所述Flutter应用中的目标功能的功能调用请求之后,获取服务器发送的所述目标功能的目标字节码文件;
将所述目标功能的目标字节码文件保存在所述本地文件的指定存储位置。
7.根据权利要求6所述的方法,其特征在于,所述将所述目标功能的目标字节码文件保存在所述本地文件的指定存储位置,包括:
在所述本地文件中查找所述目标功能的历史字节码文件;
在查找到所述历史字节码文件的情况下,删除所述历史字节码文件,并将所述目标字节码文件保存在所述本地文件的指定存储位置。
8.根据权利要求1所述的方法,其特征在于,所述运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能,包括:
调用所述Flutter应用中的Dart虚拟机;
将所述目标字节码文件加载至所述Dart虚拟机,以通过所述Dart虚拟机中的字节码解释器运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
9.一种应用程序的修复方法,其特征在于,应用于服务器,包括:
确定Flutter应用中待修复功能的目标修复代码;
对所述目标修复代码进行编译,并基于所述编译过程中的目标中间编译产物生成所述待修复功能的目标字节码文件;
向所述Flutter应用发送所述目标字节码文件,以使所述Flutter应用基于上述权利要求1至8中任一项所述的方法运行所述目标字节码文件。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
接收所述Flutter应用发送的获取请求,并确定所述获取请求所对应的待修复功能;
获取所述待修复功能所对应的目标字节码文件,并将所述目标字节码文件传输至所述Flutter应用。
11.根据权利要求10所述的方法,其特征在于,所述获取所述待修复功能所对应的目标字节码文件,包括:
获取所述待修复功能所对应的各个版本的字节码文件;
在所述各个版本的字节码文件中确定与所述获取请求相匹配的字节码文件作为所述目标字节码文件;其中,所述获取请求中携带所请求调用的待修复功能的版本标识。
12.一种应用程序的修复装置,其特征在于,应用于Flutter应用,包括:
检测单元,用于检测针对所述Flutter应用中的目标功能的功能调用请求;
查找单元,用于基于检测到的所述功能调用请求在所述Flutter应用的本地文件中查找所述目标功能的目标字节码文件;其中,所述目标字节码文件中包含用于修复所述目标功能的对应功能缺陷的字节码;
运行单元,用于在查找到所述目标功能的目标字节码文件的情况下,运行所述目标功能的目标字节码文件,以实现执行修复对应功能缺陷之后的目标功能。
13.一种应用程序的修复装置,其特征在于,应用于服务器,包括:
确定单元,用于确定Flutter应用中待修复功能的目标修复代码;
编译单元,用于对所述目标修复代码进行编译,并基于所述编译过程中的目标中间编译产物生成所述待修复功能的目标字节码文件;
发送单元,用于向所述Flutter应用发送所述目标字节码文件,以使所述Flutter应用基于上述权利要求1至8中任一项所述的方法运行所述目标字节码文件。
14.一种计算机设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至11任意一项所述的应用程序的修复方法的步骤。
15.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至11任意一项所述的应用程序的修复方法的步骤。
CN202210240370.7A 2022-03-10 2022-03-10 应用程序的修复方法、装置、计算机设备以及存储介质 Active CN114610516B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210240370.7A CN114610516B (zh) 2022-03-10 2022-03-10 应用程序的修复方法、装置、计算机设备以及存储介质
PCT/CN2023/076115 WO2023169164A1 (zh) 2022-03-10 2023-02-15 应用程序的修复方法、装置、计算机设备以及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210240370.7A CN114610516B (zh) 2022-03-10 2022-03-10 应用程序的修复方法、装置、计算机设备以及存储介质

Publications (2)

Publication Number Publication Date
CN114610516A true CN114610516A (zh) 2022-06-10
CN114610516B CN114610516B (zh) 2023-07-04

Family

ID=81862110

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210240370.7A Active CN114610516B (zh) 2022-03-10 2022-03-10 应用程序的修复方法、装置、计算机设备以及存储介质

Country Status (2)

Country Link
CN (1) CN114610516B (zh)
WO (1) WO2023169164A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023169164A1 (zh) * 2022-03-10 2023-09-14 北京字节跳动网络技术有限公司 应用程序的修复方法、装置、计算机设备以及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106843947A (zh) * 2017-01-04 2017-06-13 腾讯科技(深圳)有限公司 代码缺陷的处理方法和装置
CN109445807A (zh) * 2017-08-28 2019-03-08 腾讯科技(深圳)有限公司 实现应用程序更新的方法、装置和计算机可读存储介质
CN110471693A (zh) * 2019-08-21 2019-11-19 网易(杭州)网络有限公司 应用程序发布、运行方法及设备
CN111142922A (zh) * 2018-11-02 2020-05-12 阿里巴巴集团控股有限公司 应用程序更新方法、装置、终端及服务器
CN113918195A (zh) * 2021-11-19 2022-01-11 中电金信软件有限公司 应用界面更新方法、装置、电子设备及可读存储介质
CN114116509A (zh) * 2021-12-02 2022-03-01 建信金融科技有限责任公司 程序分析方法、装置、电子设备和存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11347498B2 (en) * 2013-02-26 2022-05-31 Red Hat, Inc. Bytecode modification
CN108089870B (zh) * 2016-11-21 2022-01-21 百度在线网络技术(北京)有限公司 用于修复应用的方法和装置
CN114610516B (zh) * 2022-03-10 2023-07-04 抖音视界有限公司 应用程序的修复方法、装置、计算机设备以及存储介质
CN114706586A (zh) * 2022-03-11 2022-07-05 北京字节跳动网络技术有限公司 代码编译、代码运行方法、装置、计算机设备及存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106843947A (zh) * 2017-01-04 2017-06-13 腾讯科技(深圳)有限公司 代码缺陷的处理方法和装置
CN109445807A (zh) * 2017-08-28 2019-03-08 腾讯科技(深圳)有限公司 实现应用程序更新的方法、装置和计算机可读存储介质
CN111142922A (zh) * 2018-11-02 2020-05-12 阿里巴巴集团控股有限公司 应用程序更新方法、装置、终端及服务器
CN110471693A (zh) * 2019-08-21 2019-11-19 网易(杭州)网络有限公司 应用程序发布、运行方法及设备
CN113918195A (zh) * 2021-11-19 2022-01-11 中电金信软件有限公司 应用界面更新方法、装置、电子设备及可读存储介质
CN114116509A (zh) * 2021-12-02 2022-03-01 建信金融科技有限责任公司 程序分析方法、装置、电子设备和存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023169164A1 (zh) * 2022-03-10 2023-09-14 北京字节跳动网络技术有限公司 应用程序的修复方法、装置、计算机设备以及存储介质

Also Published As

Publication number Publication date
CN114610516B (zh) 2023-07-04
WO2023169164A1 (zh) 2023-09-14

Similar Documents

Publication Publication Date Title
CN105677415B (zh) 热更新方法及装置
US10019256B2 (en) Systems and methods for incremental software development
CN107193607B (zh) 用于更新代码文件的方法和装置、存储介质、处理器以及终端
EP0718764A2 (en) Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
CN112015491B (zh) 实现函数跳转的方法、装置及计算机存储介质
CN110442371B (zh) 一种发布代码的方法、装置、介质及计算机设备
CN105183760A (zh) 一种网页组件加载方法和装置
US11842188B2 (en) Continuous integration and deployment pipeline selection based on dynamic mapping
CN112099880B (zh) 场景驱动的应用程序约减方法和***
US8799716B2 (en) Heap dump occurrence detection
CN111679852B (zh) 一种冲突依赖库的检测方法及装置
CN107463485B (zh) 基于方法栈的日志获取方法、装置和终端
CN114610516B (zh) 应用程序的修复方法、装置、计算机设备以及存储介质
CN115268879A (zh) 代码处理方法、装置、电子设备及存储介质
US9841982B2 (en) Locating import class files at alternate locations than specified in classpath information
CN109426546B (zh) 应用启动方法及装置、计算机存储介质及设备
CN113791809B (zh) 应用异常处理方法、装置以及计算机可读存储介质
CN114706586A (zh) 代码编译、代码运行方法、装置、计算机设备及存储介质
CN110737438A (zh) 一种数据处理方法和装置
CN112579156A (zh) 一种业务事件的处理***以及处理方法、装置和设备
CN113900729A (zh) 一种SteamVR***的追踪设备参数配置方法及装置
CN113326046A (zh) 获取编译时长的方法和装置
CN112947991A (zh) 版本差异代码文件的获取方法、装置、计算机设备和介质
CN113031956A (zh) 程序编译方法和装置以及程序运行方法和装置
CN110659032A (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
CB02 Change of applicant information

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Tiktok vision (Beijing) Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd.

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Douyin Vision Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: Tiktok vision (Beijing) Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant