[发明专利]应用程序的热修复方法和装置有效
申请号: | 201810930312.0 | 申请日: | 2018-08-15 |
公开(公告)号: | CN109344619B | 公开(公告)日: | 2021-08-20 |
发明(设计)人: | 刘建章 | 申请(专利权)人: | 北京奇艺世纪科技有限公司 |
主分类号: | G06F21/57 | 分类号: | G06F21/57 |
代理公司: | 北京润泽恒知识产权代理有限公司 11319 | 代理人: | 莎日娜 |
地址: | 100080 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 应用程序 修复 方法 装置 | ||
本发明提供了一种应用程序的热修复方法和装置。该方法通过将资源补丁包的资源和原始资源的合并资源加载至目标页面,并对合并资源生成多个编码资源和新资源映射表,多个编码资源中的每个编码资源具有资源名称,新资源映射表包括编码资源的资源名称与资源标识的对应关系;再将目标页面调用的原始资源映射表替换为新资源映射表,从而能够根据新资源映射表和多个编码资源,对目标页面进行资源热修复,并解决基于InstantRun的热修复方案无法对应用程序中的资源进行热修复的问题。
技术领域
本发明涉及计算机技术领域,特别是涉及一种应用程序的热修复方法和装置。
背景技术
目前,在应用程序(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补丁包包括针对所述应用程序的待修复方法的修复代码;
将所述应用程序的原始资源文件与所述资源补丁包中的资源文件合并,得到目标资源文件;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京奇艺世纪科技有限公司,未经北京奇艺世纪科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810930312.0/2.html,转载请声明来源钻瓜专利网。