CN109344619B - 应用程序的热修复方法和装置 - Google Patents

应用程序的热修复方法和装置 Download PDF

Info

Publication number
CN109344619B
CN109344619B CN201810930312.0A CN201810930312A CN109344619B CN 109344619 B CN109344619 B CN 109344619B CN 201810930312 A CN201810930312 A CN 201810930312A CN 109344619 B CN109344619 B CN 109344619B
Authority
CN
China
Prior art keywords
resource
target
mapping table
repair
patch package
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
Application number
CN201810930312.0A
Other languages
English (en)
Other versions
CN109344619A (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.)
Shanghai IQIYI New Media Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and 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 QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN201810930312.0A priority Critical patent/CN109344619B/zh
Publication of CN109344619A publication Critical patent/CN109344619A/zh
Application granted granted Critical
Publication of CN109344619B publication Critical patent/CN109344619B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种应用程序的热修复方法和装置。该方法通过将资源补丁包的资源和原始资源的合并资源加载至目标页面,并对合并资源生成多个编码资源和新资源映射表,多个编码资源中的每个编码资源具有资源名称,新资源映射表包括编码资源的资源名称与资源标识的对应关系;再将目标页面调用的原始资源映射表替换为新资源映射表,从而能够根据新资源映射表和多个编码资源,对目标页面进行资源热修复,并解决基于InstantRun的热修复方案无法对应用程序中的资源进行热修复的问题。

Description

应用程序的热修复方法和装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种应用程序的热修复方法和装置。
背景技术
目前,在应用程序(APP,Application)上线后,当用户反馈APP存在漏洞(bug)时,普遍的做法是开发人员在后台修复bug,将修复bug的新版本APP重新打包并发布,供用户下载更新版本的APP。但是这种重新发版的修复漏洞的方案成本较高、效率较低。
对此,相关技术提出了对应用的热修复方案,开发人员只需要将修复bug的修复代码以补丁包的方式发布,再由移动终端从预设接口下载该修复代码并替换APP中的bug代码,无需重新发版,即可完成对应用的漏洞修复。
关于热修复方案,谷歌在Android Studio 2.0添加了InstantRun的功能,InstantRun是一种热补丁方案,可以实现对应用的热修复。但是,由于InstantRun占用空间较大,所以相关技术对InstantRun进行了优化,优化后的热修复框架包括诸如Robust和Aceso等。
基于InstantRun的程序热修复方案(包括Robust和Aceso)的技术原理是对Java文件中的方法进行插桩,即对Java文件中每个方法都加入一个热修复的逻辑片段,具体为在该方法有补丁包的时候则执行补丁包内的方法逻辑,在该方法没有补丁包时则执行该方法的原逻辑。
那么发明人在实现本发明的过程中发现,由于InstantRun的原理的局限性,基于InstantRun的热修复方案在对程序热修复时,只可以对程序的Java类中的方法进行热修复,而无法对应用程序所使用的资源进行热修复。
发明内容
本发明提供了一种应用程序的热修复方法和装置,以解决基于InstantRun的热修复方案无法对应用程序中的资源进行热修复的问题。
为了解决上述问题,根据本发明的一个方面,本发明公开了一种应用程序的热修复方法,包括:
当所述应用程序运行的目标页面调用目标方法时,若预先加载的Java补丁包包括针对所述目标方法的目标修复代码,则执行所述目标修复代码以对所述目标页面进行资源热修复;
所述执行所述目标修复代码以对所述目标页面进行资源热修复,包括:
将本地目标存储路径的目标资源文件加载至所述目标页面,其中,所述目标资源文件包括所述应用程序的原始资源文件和预先下载的资源补丁包中的资源文件;
对加载的所述目标资源文件解析,生成多个编码资源和新资源映射表,其中,所述多个编码资源中的每个编码资源具有资源名称,所述新资源映射表包括编码资源的资源名称与资源标识的对应关系;
将所述目标页面调用的原始资源映射表替换为所述新资源映射表;
根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复。
可选地,所述当所述应用程序运行的目标页面调用目标方法时之前,所述方法还包括:
从服务器下载待修复补丁包,其中,所述待修复补丁包包括:Java补丁包和资源补丁包,其中,所述Java补丁包包括针对所述应用程序的待修复方法的修复代码;
将所述应用程序的原始资源文件与所述资源补丁包中的资源文件合并,得到目标资源文件;
将所述目标资源文件存储至本地目标存储路径;
将所述Java补丁包加载至运行的所述应用程序中。
可选地,所述将所述目标页面调用的原始资源映射表替换为所述新资源映射表,包括:
所述目标页面调用根据所述预设热修复框架开发的目标替换方法,其中,所述目标替换方法用于将被调用页面所使用的原始资源映射表替换为所述新资源映射表。
可选地,所述根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复,包括:
确定所述目标方法中待调用的目标编码资源的目标资源标识;
根据所述新资源映射表中的所述对应关系,确定与所述目标资源标识对应的目标资源名称;
从所述多个编码资源中查找资源名称与所述目标资源名称匹配的目标编码资源;
在所述目标页面显示所述目标编码资源。
根据本发明的另一方面,本发明还公开了一种应用程序的热修复装置装置,包括:
资源修复模块,用于当所述应用程序运行的目标页面调用目标方法时,若预先加载的Java补丁包包括针对所述目标方法的目标修复代码,则执行所述目标修复代码以对所述目标页面进行资源热修复;
所述资源修复模块包括:
加载子模块,用于将本地目标存储路径的目标资源文件加载至所述目标页面,其中,所述目标资源文件包括所述应用程序的原始资源文件和预先下载的资源补丁包中的资源文件;
解析子模块,用于对加载的所述目标资源文件解析,生成多个编码资源和新资源映射表,其中,所述多个编码资源中的每个编码资源具有资源名称,所述新资源映射表包括编码资源的资源名称与资源标识的对应关系;
替换子模块,用于将所述目标页面调用的原始资源映射表替换为所述新资源映射表;
修复子模块,用于根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复。
可选地,所述装置还包括:
下载模块,用于从服务器下载待修复补丁包,其中,所述待修复补丁包包括:Java补丁包和资源补丁包,其中,所述Java补丁包包括针对所述应用程序的待修复方法的修复代码;
合并模块,用于将所述应用程序的原始资源文件与所述资源补丁包中的资源文件合并,得到目标资源文件;
存储模块,用于将所述目标资源文件存储至本地目标存储路径;
加载模块,用于将所述Java补丁包加载至运行的所述应用程序中。
可选地,所述替换子模块包括:
调用单元,用于调用根据所述预设热修复框架开发的目标替换方法,其中,所述目标替换方法用于将被调用页面所使用的原始资源映射表替换为所述新资源映射表。
可选地,所述修复子模块包括:
第一确定单元,用于确定所述目标方法中待调用的目标编码资源的目标资源标识;
第二确定单元,用于根据所述新资源映射表中的所述对应关系,确定与所述目标资源标识对应的目标资源名称;
查找单元,用于从所述多个编码资源中查找资源名称与所述目标资源名称匹配的目标编码资源;
显示单元,用于在所述目标页面显示所述目标编码资源。
与现有技术相比,本发明包括以下优点:
在本发明实施例中,本发明基于预设热修复框架开发Java补丁包和资源补丁包,并在Java补丁包中开发有将原始资源映射表替换为新资源映射表的代码逻辑,从而使得被修复的目标页面在执行到Java补丁包中目标方法的目标修复代码时,无需重启应用程序就能够将目标页面调用资源时所依据的资源映射表替换为新资源映射表,进而实现目标页面的资源热修复。
附图说明
图1是本发明的一种应用程序的热修复方法实施例的步骤流程图;
图2是本发明的另一种应用程序的热修复方法实施例的步骤流程图;
图3是本发明的一种应用程序的热修复装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
参照图1,示出了本发明的一种应用程序的热修复方法实施例的步骤流程图,具体可以包括如下步骤:
可选地,步骤101,从服务器下载待修复补丁包;
其中,本发明实施例的应用程序安装在移动终端上,该移动终端具有安卓操作系统。
当应用程序存在bug时,移动终端侧可以从服务器下载该bug的修复补丁包。其中,如果该bug只需要进行Java类中方法的修复,则下载的修复补丁包只包括Java补丁包;相反,如果该bug的修复包括对应用程序的资源的修复,则该修复补丁包还包括资源补丁包。由于本发明实施例的方法主要介绍对应用程序的资源修复,因此,该修复补丁包包括上述两种补丁包。对于只包括Java补丁包的方法热修复方案为已知技术,这里不再赘述。
其中,Java补丁包和资源补丁包可以同时或分时下载,此外,它们可以在同一个压缩包中,也可以在不同的压缩包中。
需要说明的是,本发明实施例的热修复方法是基于预设热修复框架二次开发的,该预设热修复框架可以是instantrun,也可以是Robust,还可以是Aceso。
本发明实施例首次发布的应用程序也是基于预设热修复框架开发的,因此,该应用程序的所有Java文件中的所有方法都进行了插桩处理,即都插入了一段热修复代码,该热修复代码具有如下判断逻辑,如果该被插桩的方法具有Java补丁包,则采用Java补丁包中的方法逻辑来执行该方法;如果该被插桩的方法不具有Java补丁包,则采用应用程序中该方法的原逻辑来执行该方法。所以,本发明实施例的应用程序中所有Java文件中的所有方法都是支持本发明实施例的热修复方案的。
其中,上述服务器为该应用程序的服务器,也可以是其他专门用于下载该应用程序的补丁的服务器,本发明对此并不限定。
另外,对于下载的Java补丁包而言,其可以包括针对所述应用程序的待修复方法的修复代码。如上所述,虽然应用程序的所有方法都进行了插桩处理,但并不是每个方法都需要修复,而是只有存在bug的方法才需要修复,因此,该Java补丁包中可以包括至少一组修复代码,用于对于应用程序的一个bug方法(即待修复方法)进行修复。当然,当本次下发的补丁包是针对多个bug方法时,则该Java补丁包中可以包括分别对应不同bug方法的多组修复代码,本发明对此并不限定。
另外,需要注意的是,由于本发明实施例的方法用于对应用程序进行资源的热修复,因此,Java补丁包中的修复代码不仅仅可以包括对bug方法的逻辑修复,还可以包括对资源的修复代码,但是,该对资源的修复代码也是写在对bug方法的逻辑修复代码中的,而非单独存在。
那么对于应用程序的资源文件而言,其可以包括但不限于xml文件、图片文件、视频文件、主题、字符串等等资源。而本发明实施例的方法可以对应用程序的任意一个资源进行修复,修复的方式可以包括但不限于替换、增加、删除等。
可选地,步骤102,将所述应用程序的原始资源文件与所述资源补丁包中的资源文件合并,得到目标资源文件;
其中,在对应用程序进行资源热修复之前,该应用程序是具有原始资源文件的,该应用程序的所有页面都是使用原始资源文件中的资源的。那么在对应用程序进行资源热修复时,如上述修复的方式可知,有些原始资源还是需要被应用程序使用的,所以,本发明实施例下载资源补丁包后,会将该资源补丁包中的资源文件和该应用程序的原始资源文件进行合并操作,得到资源文件的并集,即目标资源文件。
可选地,步骤103,将所述目标资源文件存储至本地目标存储路径;
其中,可以便于利用该本地目标存储路径下的目标资源文件对应用程序的某个界面进行资源加载。
在具体实施时,可以将下载的修复补丁包直接存储至该应用程序的私有目录(data/data/应用包名/)下,即本地应用程序数据存储路径;也可以将下载的修复补丁包首先存储在移动终端的其他存储区域,待需要使用修复补丁包时,再将该其他存储区域的修复补丁包加载起来。本发明对此并不限定。
另外,由于修复补丁包包括Java补丁包和资源补丁包,两种补丁包的加载形式不同(java补丁包使用classloader加载,资源补丁包使用AssetManager加载),因此,在存储时,Java补丁包和资源补丁包的存储位置可以在相同的目录下,也可以不同。
可选地,步骤104,将所述Java补丁包加载至运行的所述应用程序中;
步骤105,当所述应用程序运行的目标页面调用目标方法时,若预先加载的Java补丁包包括针对所述目标方法的目标修复代码,则执行所述目标修复代码以对所述目标页面进行资源热修复;
其中,由于应用程序的每个页面中的方法都进行了插桩处理,因此,都会进行该方法是否具有Java补丁包的判断,那么如果应用程序想要加载展示某个页面时,该页面需要调用页面中的原始代码,如果执行到调用目标方法,则会执行插桩的逻辑片段,那么就可以从加载到该应用程序的Java补丁包的所有待修复的Java方法的修复代码中,查找是否存在针对该目标方法的修复代码,如果存在,则说明该页面(即目标页面)的该目标方法需要进行修复。因此,执行该目标方法的插桩的逻辑片段后,会执行该Java补丁包中关于该目标方法的目标修复代码,而不会执行应用程序的该目标页面中关于该目标方法的原始逻辑代码,从而通过执行该目标修复代码来对目标页面的目标方法进行资源热修复。
这样,本发明实施例可以在应用程序运行过程中将用于资源热修复的Java补丁包和资源补丁包下载到本地,并将资源补丁包中的资源文件与该应用程序的原始资源文件合并,并存储在本地目标存储路径下,使得资源热修复时使用的资源为合并后的资源,原始资源仍旧可以被使用;并将Java补丁包加载到应用程序中,使得程序运行到目标页面调用目标方法时,可执行Java补丁包中针对目标方法的目标修复代码,来达到对目标页面资源热修复的目的。
对于目标修复代码执行的代码逻辑可以参照图2的实施例。
其中,本发明实施例的Java补丁包也是基于预设修复框架开发的。
本发明实施例的资源热修复方案可以是对Robust热修复框架的二次开发,在此基础上开发出新的功能(即本发明实施例的资源热修复),得到本发明实施例的同时具备Java方法的热修复以及资源热修复功能的热修复框架。
另外,上述目标方法可以是目标页面调用的任意一个需要使用修复后的资源的方法,而针对目标方法的目标修复代码的执行逻辑可以实现对目标方法所调用的资源的热修复。
上述目标修复代码的执行逻辑如图2所示,也就是说,在执行步骤105的所述执行所述目标修复代码以对所述目标页面进行资源热修复的步骤时,可以包括如图2所示的各个步骤。
另外,Java补丁包中针对任意一个目标方法的目标修复代码均是基于上述预设热修复框架开发的,因此,图2所示的各个步骤也是基于预设热修复框架来实现的。
S201,将本地目标存储路径的目标资源文件加载至所述目标页面,其中,所述目标资源文件包括所述应用程序的原始资源文件和预先下载的资源补丁包中的资源文件;
其中,S201基于预设热修复框架而实现。
在一个示例中,该目标修复代码可以包括AssetManager的AddAssetPath方法,该AddAssetPath方法可以将本地目标存储路径的目标资源文件加载到目标页面中,来完成修复补丁包(patch.apk)中资源(包括xml、string、drawable图片等)的加载,被加载后的资源可供该目标页面使用。该AddAssetPath方法的返回值是一个AsssetManager对象,AsssetManager对象是一个资源管理对象,专门用于对该目标资源文件进行管理。而上述AddAssetPath方法是基于预设热修复框架开发的。所以通过执行Java补丁包中关于目标方法的目标修复代码中的该AddAssetPath方法可以将目标资源文件(即原始资源文件和资源补丁包中的资源文件的并集)加载到该目标页面。
S202,对加载的所述目标资源文件解析,生成编码资源和新资源映射表;
其中,S202基于预设热修复框架而实现。
在一个示例中,可以该目标修复代码还包括基于预设热修复框架以AssetManager为参数创建resources对象的代码逻辑(以代码A举例),此外,该目标修复代码还包括由AssetManager对加载到目标页面中的目标资源文件进行格式解析,解析后得到编码资源的代码逻辑(以代码B举例),该编码资源能够被应用程序所识别调用。其中,对于将资源文件转换为应用程序能够识别的编码资源属于已知技术,这里不再赘述。
因此,通过执行目标修复代码中的代码A和代码B,也可以根据预设热修复框架来对加载的所述目标资源文件解析,从而生成编码资源和新资源映射表(即resources对象)。其中,所述新资源映射表包括解析的每个编码资源的资源名称与资源标识的对应关系。
其中,需要注意的是,一个资源文件可以解析成一个或多个编码资源,例如XML文件中的每个控件都可以解析为一个编码资源。再如jpg图片文件,则可以解析为一个编码资源。其中,每个编码资源都具有一个唯一的资源名称,可以理解为字段名称,且不同编码资源的字段名称不同。
S203,将所述目标页面调用的原始资源映射表替换为所述新资源映射表;
其中,S203基于预设热修复框架而实现。
可选地,在一个实施例中,在执行S203时,可以由所述目标页面调用根据所述预设热修复框架开发的目标替换方法,从而使得所述目标页面调用的原始资源映射表替换为所述新资源映射表。
其中,该Java补丁包的目标修复代码包括根据预设热修复框架开发的一个目标替换方法,该目标替换方法用于将被调用页面所使用的原始资源映射表(例如mResources对象)替换为所述新资源映射表(resources对象)。
这里,该目标替换方法可以为replaceContextResources(Context context,Resources resources),其中,该context指代调用该目标替换方法的页面的上下文。利用反射,可以将目标页面调用的原始资源文件替换为合并后的目标资源文件,其中,通过执行该目标替换方法,可以将该目标页面的context的成员变量mResources替换成resources,其中resources是合并资源的资源映射表。其中,该合并资源(即为目标资源文件)包括了资源补丁包中的资源和原始资源的并集。
这样,本发明实施例通过开发目标替换方法,从而可以方便快捷的将原始资源映射表替换为新资源映射表,提升资源热修复速度,防止在资源热修复时页面卡顿的问题。
S204,根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复。
其中,经过S203的资源映射表的替换操作后,目标页面中目标方法所调用的资源也是基于替换后的resources的,因此,该目标修复代码中还包括代码C,其中,代码C用于根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复。其中,代码C包括对新资源ID的调用逻辑。
在本发明实施例中,本发明基于预设热修复框架开发Java补丁包和资源补丁包,并在Java补丁包中开发有将原始资源映射表替换为新资源映射表的代码逻辑,从而使得被修复的目标页面在执行到Java补丁包中目标方法的目标修复代码时,无需重启应用程序就能够将目标页面调用资源时所依据的资源映射表替换为新资源映射表,进而实现目标页面的资源热修复。
可选地,在一个实施例中,在执行S204时,可以通过方式来实现:
也就是说,上述代码C的逻辑可以以下述步骤来体现。
确定所述目标方法中待调用的目标编码资源的目标资源标识;
其中,以目标资源文件包括XML文件为例进行说明。例如,xml布局中多了一个button控件,那么在应用程序的目标页面的未修复的目标方法中是不存在这个xml文件里面定义的控件id的,且,该控件id在mResources中找不到的,所以,虽然进行了S203的资源替换,仍旧无法对控件设置点击事件等操作。因此,本发明实施例的目标修复代码中还设置了代码C,代码C是基于预设热修复框架开发的,其开发了关于对替换后的资源的调用逻辑代码。
对于该调用逻辑代码的执行而言,可以首先该目标方法的目标修复代码中待调用的目标编码资源(上述button控件)的目标资源标识(例如id=10)。
根据所述新资源映射表中的所述对应关系,确定与所述目标资源标识对应的目标资源名称;
其中,resource对象中记载了多个编码资源中的每个编码资源的资源名称与资源标识的对应关系。因此,通过查找该对应关系,可以确定与id=10对应的资源名称,例如button_1。
从所述多个编码资源中查找资源名称与所述目标资源名称匹配的目标编码资源;
其中,多个编码资源中每个编码资源都具有资源名称(即字段名称),因此,可以查找到字段名称为button_1的按钮控件资源。
在所述目标页面显示所述目标编码资源。
其中,该显示的定义根据资源的类型的不同而存在区别。例如该目标编码资源为静态资源时(例如各种静态控件),则本步骤对该目标编码资源进行显示;当该目标编码资源为动态资源时(例如动态图、视频、音频等),则该显示指代播放,即在目标页面播放该目标编码资源。
在本发明实施例中,由于在修复前的应用程序的资源调用逻辑中不存在对新添加/替换后资源的id属性,因此,本发明实施例的目标方法的目标修复代码中还设计有针对新资源的调用逻辑,即确定目标方法中待调用的目标资源标识,并根据新资源映射表中的对应关系,确定与目标资源标识对应的目标资源名称;再从多个编码资源中查找到具有目标资源名称的目标编码资源,从而完成对目标页面上新资源的修复。
本发明实施例针对基于InstantRun原理实现热修复的技术方案,提供了一套可行的资源热修复的扩展方案,在原有热修复技术方案基础上在Java补丁包中添加两个接口方法,分别用于将资源补丁包加载到目标页面,替换需要热修复资源的页面(Activity)的mResources变量,通过这两步操作可以实现热修复应用程序中的资源,可以新添加资源,也可以修改原来的资源。
并且,由于热修复对象一般数量较小,因此,本发明热修复资源的对象是页面,即Activity,而非整个应用程序,从而无需对应用程序所有应用程序均进行资源热修复,修复粒度较小,不易降低系统性能,并且无需重启应用程序即可实现资源热修复。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
与上述本发明实施例所提供的方法相对应,参照图3,示出了本发明一种应用程序的热修复装置实施例的结构框图,具体可以包括如下模块:
资源修复模块31,用于当所述应用程序运行的目标页面调用目标方法时,若预先加载的Java补丁包包括针对所述目标方法的目标修复代码,则执行所述目标修复代码以对所述目标页面进行资源热修复;
所述资源修复模块31包括:
加载子模块301,用于将本地目标存储路径的目标资源文件加载至所述目标页面,其中,所述目标资源文件包括所述应用程序的原始资源文件和预先下载的资源补丁包中的资源文件;
解析子模块302,用于对加载的所述目标资源文件解析,生成多个编码资源和新资源映射表,其中,所述多个编码资源中的每个编码资源具有资源名称,所述新资源映射表包括编码资源的资源名称与资源标识的对应关系;
替换子模块303,用于将所述目标页面调用的原始资源映射表替换为所述新资源映射表;
修复子模块304,用于根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复。
可选地,所述装置还包括:
下载模块,用于从服务器下载待修复补丁包,其中,所述待修复补丁包包括:Java补丁包和资源补丁包,其中,所述Java补丁包包括针对所述应用程序的待修复方法的修复代码;
合并模块,用于将所述应用程序的原始资源文件与所述资源补丁包中的资源文件合并,得到目标资源文件;
存储模块,用于将所述目标资源文件存储至本地目标存储路径;
加载模块,用于将所述Java补丁包加载至运行的所述应用程序中。
可选地,所述替换子模块303包括:
调用单元,用于调用根据所述预设热修复框架开发的目标替换方法,其中,所述目标替换方法用于将被调用页面所使用的原始资源映射表替换为所述新资源映射表。
可选地,所述修复子模块304包括:
第一确定单元,用于确定所述目标方法中待调用的目标编码资源的目标资源标识;
第二确定单元,用于根据所述新资源映射表中的所述对应关系,确定与所述目标资源标识对应的目标资源名称;
查找单元,用于从所述多个编码资源中查找资源名称与所述目标资源名称匹配的目标编码资源;
显示单元,用于在所述目标页面显示所述目标编码资源。
在本发明实施例中,本发明的资源热修复模块在执行到Java补丁包中目标方法的目标修复代码时,利用加载子模块将合并后的资源文件加载到目标页面,并由解析子模块对合并后的资源文件进行解析,生成新资源映射表和编码资源,再由替换子模块将原始资源映射表替换为新资源映射表,最后,利用修复子模块利用新资源映射表和编码资源来对目标页面进行资源热修复,无需重启应用程序就实现了目标页面的资源热修复。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种应用程序的热修复方法和一种应用程序的热修复装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (8)

1.一种应用程序的热修复方法,其特征在于,包括:
当所述应用程序运行的目标页面调用目标方法时,若预先加载的Java补丁包包括针对所述目标方法的目标修复代码,则执行所述目标修复代码以对所述目标页面进行资源热修复,其中,所述目标修复代码包括对目标方法的逻辑修复代码和对资源的修复代码,且所述对资源的修复代码写在所述对目标方法的逻辑修复代码中;
所述执行所述目标修复代码以对所述目标页面进行资源热修复,包括:
将本地目标存储路径的目标资源文件加载至所述目标页面,其中,所述目标资源文件是所述应用程序的原始资源文件和预先下载的资源补丁包中的资源文件进行合并操作得到的资源文件的并集;
对加载的所述目标资源文件解析,生成多个编码资源和新资源映射表,其中,所述多个编码资源中的每个编码资源具有资源名称,所述新资源映射表包括编码资源的资源名称与资源标识的对应关系;
将所述目标页面调用的原始资源映射表替换为所述新资源映射表;
根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复。
2.根据权利要求1所述的方法,其特征在于,所述当所述应用程序运行的目标页面调用目标方法时之前,所述方法还包括:
从服务器下载待修复补丁包,其中,所述待修复补丁包包括:Java补丁包和资源补丁包,其中,所述Java补丁包包括针对所述应用程序的待修复方法的修复代码;
将所述应用程序的原始资源文件与所述资源补丁包中的资源文件合并,得到目标资源文件;
将所述目标资源文件存储至本地目标存储路径;
将所述Java补丁包加载至运行的所述应用程序中。
3.根据权利要求1所述的方法,其特征在于,所述将所述目标页面调用的原始资源映射表替换为所述新资源映射表,包括:
所述目标页面调用根据预设热修复框架开发的目标替换方法,其中,所述目标替换方法用于将被调用页面所使用的原始资源映射表替换为所述新资源映射表。
4.根据权利要求1所述的方法,其特征在于,所述根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复,包括:
确定所述目标方法中待调用的目标编码资源的目标资源标识;
根据所述新资源映射表中的所述对应关系,确定与所述目标资源标识对应的目标资源名称;
从所述多个编码资源中查找资源名称与所述目标资源名称匹配的目标编码资源;
在所述目标页面显示所述目标编码资源。
5.一种应用程序的热修复装置,其特征在于,包括:
资源修复模块,用于当所述应用程序运行的目标页面调用目标方法时,若预先加载的Java补丁包包括针对所述目标方法的目标修复代码,则执行所述目标修复代码以对所述目标页面进行资源热修复,其中,所述目标修复代码包括对目标方法的逻辑修复代码和对资源的修复代码,且所述对资源的修复代码写在所述对目标方法的逻辑修复代码中;
所述资源修复模块包括:
加载子模块,用于将本地目标存储路径的目标资源文件加载至所述目标页面,其中,所述目标资源文件是所述应用程序的原始资源文件和预先下载的资源补丁包中的资源文件进行合并操作得到的资源文件的并集;
解析子模块,用于对加载的所述目标资源文件解析,生成多个编码资源和新资源映射表,其中,所述多个编码资源中的每个编码资源具有资源名称,所述新资源映射表包括编码资源的资源名称与资源标识的对应关系;
替换子模块,用于将所述目标页面调用的原始资源映射表替换为所述新资源映射表;
修复子模块,用于根据所述新资源映射表和所述多个编码资源,对所述目标页面进行资源热修复。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
下载模块,用于从服务器下载待修复补丁包,其中,所述待修复补丁包包括:Java补丁包和资源补丁包,其中,所述Java补丁包包括针对所述应用程序的待修复方法的修复代码;
合并模块,用于将所述应用程序的原始资源文件与所述资源补丁包中的资源文件合并,得到目标资源文件;
存储模块,用于将所述目标资源文件存储至本地目标存储路径;
加载模块,用于将所述Java补丁包加载至运行的所述应用程序中。
7.根据权利要求5所述的装置,其特征在于,所述替换子模块包括:
调用单元,用于调用根据预设热修复框架开发的目标替换方法,其中,所述目标替换方法用于将被调用页面所使用的原始资源映射表替换为所述新资源映射表。
8.根据权利要求5所述的装置,其特征在于,所述修复子模块包括:
第一确定单元,用于确定所述目标方法中待调用的目标编码资源的目标资源标识;
第二确定单元,用于根据所述新资源映射表中的所述对应关系,确定与所述目标资源标识对应的目标资源名称;
查找单元,用于从所述多个编码资源中查找资源名称与所述目标资源名称匹配的目标编码资源;
显示单元,用于在所述目标页面显示所述目标编码资源。
CN201810930312.0A 2018-08-15 2018-08-15 应用程序的热修复方法和装置 Active CN109344619B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810930312.0A CN109344619B (zh) 2018-08-15 2018-08-15 应用程序的热修复方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810930312.0A CN109344619B (zh) 2018-08-15 2018-08-15 应用程序的热修复方法和装置

Publications (2)

Publication Number Publication Date
CN109344619A CN109344619A (zh) 2019-02-15
CN109344619B true CN109344619B (zh) 2021-08-20

Family

ID=65291573

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810930312.0A Active CN109344619B (zh) 2018-08-15 2018-08-15 应用程序的热修复方法和装置

Country Status (1)

Country Link
CN (1) CN109344619B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109889608B (zh) * 2019-03-29 2021-12-10 北京金山安全软件有限公司 一种动态资源加载方法、装置、电子设备及存储介质
CN110297655B (zh) * 2019-06-21 2023-06-06 百度在线网络技术(北京)有限公司 生成补丁包的方法、装置、设备及存储介质
CN110321135B (zh) * 2019-06-28 2023-04-11 百度在线网络技术(北京)有限公司 热修复方法、装置、设备及计算机可读存储介质
CN111831316A (zh) * 2020-07-21 2020-10-27 北京字节跳动网络技术有限公司 一种软件开发包更新方法及装置
CN112667521B (zh) * 2021-01-19 2022-07-19 北京字节跳动网络技术有限公司 一种热修复方法及装置
CN114125915B (zh) * 2022-01-26 2022-04-12 舟谱数据技术南京有限公司 针对设定终端app应用的定位热修复系统和方法
CN117971532A (zh) * 2023-11-20 2024-05-03 北京计算机技术及应用研究所 一种面向模糊测试的语义修复方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106951279A (zh) * 2017-02-27 2017-07-14 努比亚技术有限公司 应用的热修复装置及方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10013558B1 (en) * 2015-12-17 2018-07-03 Lockheed Martin Corporation Method and computer readable medium for secure software installation mechanism
CN106095502A (zh) * 2016-06-13 2016-11-09 北京奇虎科技有限公司 一种安卓应用的热修复方法、装置、服务器和系统
CN106843933A (zh) * 2016-12-27 2017-06-13 北京五八信息技术有限公司 一种应用程序的漏洞修复方法、移动终端及补丁服务器
CN107958150A (zh) * 2017-12-05 2018-04-24 中科信息安全共性技术国家工程研究中心有限公司 一种检测安卓热补丁安全性的方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106951279A (zh) * 2017-02-27 2017-07-14 努比亚技术有限公司 应用的热修复装置及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
(4.6.29.4)插件化之资源加载:使用插件中的R资源;fei20121106;《https://blog.csdn.net/fei20121106/article/details/80774156》;20180622;第1-14页 *

Also Published As

Publication number Publication date
CN109344619A (zh) 2019-02-15

Similar Documents

Publication Publication Date Title
CN109344619B (zh) 应用程序的热修复方法和装置
CN109117169B (zh) 用于修复内核漏洞的方法和装置
CN109491695A (zh) 一种集成安卓应用的增量更新方法
WO2016177341A1 (zh) 接口调用方法、装置及终端
CN109032631B (zh) 应用程序补丁包获取方法、装置、计算机设备及存储介质
CN111381825B (zh) 一种小程序的生成方法和装置
CN107783766B (zh) 对应用程序的文件进行清理的方法和装置
US10338910B2 (en) Multi-tenant upgrading
CN110704031B (zh) 软件应用项目的创建方法、装置及电子设备
CN108170430B (zh) 一种界面展示的方法及系统
CN110597564A (zh) 一种安装包构建和业务组件加载方法、装置、终端设备
US20220350593A1 (en) Adaptive hot reload for class changes
CN113590327A (zh) 项目资源检测方法、装置、电子设备及存储介质
CN110602163B (zh) 文件上传方法及装置
KR102141749B1 (ko) App 프로그램 실행 방법 및 장치
CN115509515A (zh) 一种组件重用方法、装置、电子设备和存储介质
CN113101670B (zh) 一种版本切换方法及装置
CN113434194A (zh) 持续集成与交付系统、方法、电子设备及存储介质
JP2009122754A (ja) ソフトウェア開発支援装置
CN113590179B (zh) 插件检测方法、装置、电子设备及存储介质
CN115048083A (zh) 组件的可视化方法、装置、存储介质及电子设备
CN115576560A (zh) 一种动态类加载器的热重载方法、装置、设备和介质
US20210349808A1 (en) Source quality check service
CN114791884A (zh) 测试环境的构建方法、装置、存储介质及电子设备
CN114090502A (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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20240226

Address after: Room 205, 2nd Floor, Building 9, No. 365 Linhong Road, Changning District, Shanghai, 200000

Patentee after: Shanghai iqiyi New Media Technology Co.,Ltd.

Country or region after: China

Address before: 100080, 10 and 11 floors of Hongcheng development building, 2 North one street, Haidian District, Beijing.

Patentee before: BEIJING QIYI CENTURY SCIENCE & TECHNOLOGY Co.,Ltd.

Country or region before: China