The invention relates to a custom DEX packet method, according to the app for the first time to start classes required for loading, configuration rules file, including custom configuration main_dex file in the retention rules; in the compilation process when the implementation of the DEX pre task, according to the 101 steps of the rule for custom configuration file main_dex the dependence of retention, will find the custom configuration main_dex retains the class of all the dependent class full path name output to the specified file; will specify the full path name documented in the dependent class list, and the system generated in the construction of the default main_dex class file list with reservation. The invention, in the process of generating DEX files, to rely on analysis of the types of documents, dynamic specified DEX file, INSTALL FAILED DEXOPT to avoid the wrong application installation, avoid Class Not Found Exception operation caused by collapse cannot be used.
【技术实现步骤摘要】
一种可自定义的dex分包的方法
本专利技术涉及dex文件转换
,具体说是一种可自定义的dex分包的方法。
技术介绍
在android系统中,开发app的工作随着业务规模发展,不断的加入新的代码,添加新的类库,当工程中的方法数超过65535时,就会遇到以下这个错误INSTALLFAILEDDEXOPT,导致app无法安装,开发无法进行。出现上述问题的原因是:因为Android系统使用Dalvik虚拟机,所以需要把使用JavaCompiler编译之后的class文件转换成Dalvik能够执行的dex文件。当Android系统启动一个应用(app)的时候DexOpt(系统内部的一个工具,用来优化dex文件,及查看源文件的详细信息)会对dex文件进行优化。DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面,但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65535个。Dexopt使用一个固定大小的缓冲区LinearAlloc来存储应用的方法信息。Android2.2和2.3的LinearAlloc只有5MB,Android4.x提高到了8MB或16MB。当方法数量过多会导致超出缓冲区LinearAlloc大小,这也会造成Dexopt崩溃。现有技术对此的解决方案通常是:使用谷歌官方的MultidexSupportLibrary来解决这个问题,实现原理是将class编译进不同的classes.dex文件中。这种方法存在以下技术缺陷:不能根据项目实际需求自动智能的指定哪些类必须包含在主dex中,需要人工分析,手动指定哪 ...
【技术保护点】
一种可自定义的dex分包的方法,其特征在于,包括如下步骤:步骤101,根据app首次启动加载所必需类,配置规则文件,所述规则文件包括自定义配置的main_dex保留类规则文件;步骤102,在编译过程中,当执行到dex前置任务时,根据步骤101所述规则文件寻找自定义配置的main_dex保留类的依赖关系,将找到的自定义配置的main_dex保留类的所有依赖类的全路径名称输出到指定文件;步骤103,将步骤102所述指定文件中记载的依赖类的全路径名称列表,和系统在构建时生成的默认的main_dex保留类文件列表合并。
【技术特征摘要】
1.一种可自定义的dex分包的方法,其特征在于,包括如下步骤:步骤101,根据app首次启动加载所必需类,配置规则文件,所述规则文件包括自定义配置的main_dex保留类规则文件;步骤102,在编译过程中,当执行到dex前置任务时,根据步骤101所述规则文件寻找自定义配置的main_dex保留类的依赖关系,将找到的自定义配置的main_dex保留类的所有依赖类的全路径名称输出到指定文件;步骤103,将步骤102所述指定文件中记载的依赖类的全路径名称列表,和系统在构建时生成的默认的main_dex保留类文件列表合并。2.如权利要求1所述的可自定义的dex分包的方法,其特征在于:步骤101中,所述app首次启动加载所必需类尤指启动页及程序初始化相关所必需类。3.如权利要求1所述的可自定义的dex分包的方法,其特征在于:步骤101中,所述规则文件记载希望保留在main_dex中的类;规则具体格式如下:保留单个类,以class:开头,类文件的全路径名称为一行;保留整个类库,以jar:开头,以类库的全路径名称为一行;以*代表通配符。4.如权利要求1所述的可自定义的dex分包的方法,其特征在于:步骤102的具体步骤如下:步骤201,在AndroidGradle脚本的编译过程中,在生成main_dex任务队列中插入自定义Task任务;步骤202,在自定义Task任务中,调用分析工具对步骤101中所述自定义配置的main_dex保留类以及该保留类所依赖的类进行循环分析。5.如权利要求4所述的可自定义的dex分包的方法,其特征在于:步骤201中,任务队列指在Android...
【专利技术属性】
技术研发人员:李天成,
申请(专利权)人:北京酷我科技有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。