[发明专利]一种集成安卓应用的增量更新方法有效
申请号: | 201811219307.5 | 申请日: | 2018-10-19 |
公开(公告)号: | CN109491695B | 公开(公告)日: | 2021-08-06 |
发明(设计)人: | 陆璐;周娟平 | 申请(专利权)人: | 华南理工大学 |
主分类号: | G06F8/658 | 分类号: | G06F8/658;G06F8/41 |
代理公司: | 广州市华学知识产权代理有限公司 44245 | 代理人: | 陈宏升 |
地址: | 510640 广*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 集成 应用 增量 更新 方法 | ||
1.一种集成安卓应用的增量更新方法,其特征在于,基于React Native,包括以下步骤:
1)在项目中插入获取最新补丁包的代码,更改读取bundle路径的方法,并在编译期将class文件转为dex文件前给所有类和方法都加上修复功能代码,为增量热更新做好准备;
2)打包经过步骤1)处理的代码,使用ProGuard工具,解决代码混淆问题和优化包大小,最后上线使用;
3)当步骤2)应用出现问题需要更新时,参考即时编译技术Instant Run的原理实现增量补丁包,使用RocooFix获得patch.jar补丁包,bsdiff对比两个版本的bundle文件得到差异文件,最后下发增量补丁包;
4)应用检测更新,下载增量补丁包并校验,使用热加载方式修复有问题代码,使应用无需重启即可修复;
5)优化步骤4)中$change字段需要通过反射赋值引起的性能问题,用一个全局的LruCache存储和查找反射过的字段与方法,尽量保证反射只被调用一次;
6)当在原apk中找不到需要的资源,改变应用读取资源文件的路径,指向自定义的补丁包路径,从而达到增量加载更新包中资源的目的。
2.根据权利要求1所述集成安卓应用的增量更新方法,其特征在于,步骤1)中,所述更改读取bundle路径的方法,具体为:
安装包中的bundle文件是在asset目录下的,而asset目录是没有写权限的,所以不能修改安装包中的bundle文件,而React Native提供了getJSBundleFile方法修改读取bundle路径;该方法默认返回null时,读取asset里的bundle,当有更新时,返回可写目录下的bundle文件路径。
3.根据权利要求1所述集成安卓应用的增量更新方法,其特征在于,步骤1)中,所述给所有类和方法都加上修复功能代码,具体包括以下步骤:
(1)用Groovy语言实现一个Transform的Gradle Plugin来解析相对应的注解;
(2)采用ASM框架修改class字节码插入修复代码,使用ASM包中的api来处理class文件,操作类使用ClassVisitor,操作方法使用MethodVisitor。
4.根据权利要求1所述集成安卓应用的增量更新方法,其特征在于,步骤2)中所述代码混淆和优化包大小都运用了ProGuard的思想;解决代码混淆所采用的方法是先针对混淆前的代码生成补丁包,然后利用正式打包时生成的mapping文件中对应class的映射关系,对应用包中的class做字符串上的处理,让应用包中的class使用运行环境中混淆过的class名;优化包大小是在编译期间将所有的方法都与int值进行唯一映射,再保存所有映射关系到一个单独的文件中,以后只需通过映射文件即可读取到对应的方法。
5.根据权利要求1所述集成安卓应用的增量更新方法,其特征在于,步骤3)中,所述即时编译技术Instant Run能够在不重启App的情况下运行修改后的代码,大幅提高编译速度,减少重新构建和部署应用的时间;参考Instant Run的原理实现增量补丁包,使用RocooFix获得patch.jar补丁包,并使用bsdiff对比两个版本的应用文件得到差异文件,客户端下载好补丁文件,将其与本地的应用文件使用bspatch命令进行合并得到新版本并存放在自定义目录里。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华南理工大学,未经华南理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811219307.5/1.html,转载请声明来源钻瓜专利网。