博客
关于我
Android google Multidex分包 gradle 3.1.0 坑
阅读量:512 次
发布时间:2019-03-07

本文共 1627 字,大约阅读时间需要 5 分钟。

项目在很早之前方法数就超过65535,就加了google的Multidex。在第一次加入的无非就是根据api文档中的一步一步的加入到项目中:

基本方案

1、配置APP的build.gradle

在配置文件中增加:

defaultConfig {        // Enabling multidex support.        multiDexEnabled true}
afterEvaluate {tasks.matching {    it.name.startsWith('dex')}.each { dx ->    if (dx.additionalParameters == null) {        dx.additionalParameters = []    }    dx.additionalParameters += '--multi-dex'}
2、在代码中的Application中通过复写attachBaseContext方法中,调用MultiDex.install(this)
@Override    protected void attachBaseContext(Context base) {        super.attachBaseContext(base);        MultiDex.install(this);    }

当然对于这里网上还有许多优化方案,大家可以针对这边做优化。我这里不在去copy。

这样就可以将项目分成好几个dex文件了,但是这个dex文件里面的方法数是随机的,但是不会超过65535。

问题

今天我想说的坑是最近遇到的配置文件中的问题。由于百度加固中要求每个dex的方法数不要超过65530。之前打出来的三个dex,其中有一个恰好是65532,好吧,每次利用百度加固都不成功,没办法只能去解决限制dex中方法的数量。

通过查找网上各种资料,发现有两种方法:

1、使用gradle中增加--set-max-idx-number=48000

2、第三方的dexnkife,github地址:。使用这种方式没有成功,就决定采用第一种方式。

在gradle中增加了

afterEvaluate {tasks.matching {    it.name.startsWith('dex')}.each { dx ->    if (dx.additionalParameters == null) {        dx.additionalParameters = []    }    dx.additionalParameters += '--multi-dex'   dx.additionalParameters += '--set-max-idx-number=48000'}

发现不起任何作用,好吧又查找资料发现这种方式gradle1.5.0之后分包的方式已经换成下面这种方式

dexOptions {        javaMaxHeapSize "3g"        preDexLibraries  false        additionalParameters '-multi-dex',                                '--set-max-idx-number=48000'    }

加了之后发现还是不起作用,顿时感觉好崩溃。

好在看到了从gradle3.1.0之后dex编译采用D8。所以导致这种分包不成功。将gradle的版本降到3.0.0之后,分包成功,每个dex的方法都不超过48000。

另外也可以采用gradle3.1.0,然后将项目的gradle配置android.enableD8=false //暂时关闭

所以今天的目标就是看看3.1.0之后到底应该怎么设置,才能完成限制分包大小的功能

转载地址:http://giejz.baihongyu.com/

你可能感兴趣的文章
mysql索引创建及使用注意事项
查看>>
mysql索引创建和使用注意事项
查看>>
MySQL索引原理以及查询优化
查看>>
Mysql索引合并(index merge)导致的死锁问题
查看>>
MySQL索引和查询优化
查看>>
mysql索引底层数据结构和算法
查看>>
Mysql索引底层结构的分析
查看>>
MySQL索引底层:B+树详解
查看>>
Mysql索引总结
查看>>
mysql索引最左匹配原则理解以及常见的sql使用的索引情况的实测
查看>>
Mysql索引类型
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
mysql索引能重复吗_mysql “索引”能重复吗?“唯一索引”与“索引”区别是什么?...
查看>>
MySQL索引详解(IT枫斗者)
查看>>
MySQL索引那些事:什么是索引?为什么加索引就查得快了?
查看>>
Mysql索引(2):索引结构
查看>>
Mysql索引(3):索引分类
查看>>
Mysql索引(4):索引语法
查看>>
mysql级联删除_Mysql笔记系列,DQL基础复习,Mysql的约束与范式
查看>>
mysql经常使用命令
查看>>