[发明专利]一种启动应用的控件加载方法及装置有效
申请号: | 201910067089.6 | 申请日: | 2019-01-24 |
公开(公告)号: | CN111552518B | 公开(公告)日: | 2023-04-07 |
发明(设计)人: | 宋照春;贾晓婷;杨夕凯 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 北京鼎佳达知识产权代理事务所(普通合伙) 11348 | 代理人: | 王伟锋;刘铁生 |
地址: | 英属开曼群岛大开*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 启动 应用 控件 加载 方法 装置 | ||
本发明公开了一种启动应用的控件加载方法及装置,涉及应用研发技术领域,主要目的在于在主Dex中利用代理组件替换应用启动所需的组件以确保应用成功启动。本发明主要的技术方案为:在主Dex中设置代理组件以及组件映射表,所述组件映射表中记录有所述代理组件与设置在辅助Dex中的应用组件的对应关系;在启动应用时,将应用中的类加载器替换为代理类加载器,所述代理类加载器用于在所有Dex优化完成前将启动应用所需加载的应用组件替换为对应的代理组件;利用优化完成的Dex中的应用组件替换应用加载的代理组件,以启动所述应用组件。
技术领域
本发明涉及应用研发技术领域,尤其涉及一种启动应用的控件加载方法及装置。
背景技术
随着应用不断迭代,业务线的扩展,App的功能越来越丰富,其编译包也就越来越大,在Android编译App的时候,很容易出现Dex文件方法数超过了最大值65536上限的错误。这是因为在Android系统中,一个APP的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多个Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。当Android系统启动一个应用的时候,需要对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt,DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODex文件,即Optimised Dex,因为执行ODex的效率会比直接执行Dex文件的效率要高很多,而DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面,但是在Android5.0以下的大部分手机中这个链表的长度是用一个short类型来保存的,因为Dalvik的invoke-kind指令集中,method reference inDex只留了16bits,最多能引用65535个方法,导致了方法id的数目不能够超过65536个。所以Android IDE在编译项目的时候,限制了Dex的方法数,当一个项目足够大的时候,就会发生该错误。
为了解决上述的问题,常用的是multiDex的分包方案,当方法数超过65536的时候,生成多个Dex文件,把应用启动时必须用到的类和该类的直接引用类放到主Dex中,把其他类放到辅助Dex中。当应用启动之后,动态加载辅助Dex,从而避免出现方法数超出65536上限的问题。然而,这种分包方案并不能确保将所有应用启动必须的类放到主Dex中,而一旦出现该情况,在应用启动时,如果从主Dex中无法加载到启动所需的组件,而存储该组件的辅助Dex此时还未动态加载完成,那么该应用将会因为组件无法加载而导致启动失败。
发明内容
鉴于上述问题,本发明提出了一种启动应用的控件加载方法及装置,主要目的在于在主Dex中利用代理组件替换应用启动所需的组件以确保应用成功启动。
为达到上述目的,本发明主要提供如下技术方案:
一方面,本发明提供一种启动应用的控件加载方法,具体包括:
在主Dex中设置代理组件以及组件映射表,所述组件映射表中记录有所述代理组件与设置在辅助Dex中的应用组件的对应关系;
在启动应用时,将应用中的类加载器替换为代理类加载器,所述代理类加载器用于在所有Dex优化完成前将启动应用所需加载的应用组件替换为对应的代理组件;
利用优化完成的Dex中的应用组件替换应用加载的代理组件,以启动所述应用组件。
另一方面,本发明提供一种启动应用的控件加载装置,具体包括:
设置单元,用于在主Dex中设置代理组件以及组件映射表,所述组件映射表中记录有所述代理组件与设置在辅助Dex中的应用组件的对应关系;
类加载器替换单元,用于在启动应用时,将应用中的类加载器替换为代理类加载器,所述代理类加载器用于在所有Dex优化完成前将启动应用所需加载的应用组件替换为对应的代理组件;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910067089.6/2.html,转载请声明来源钻瓜专利网。