博客
关于我
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查看表结构和表中数据
查看>>
MySQL查询优化:LIMIT 1避免全表扫描
查看>>
MySQL查询优化之索引
查看>>
mysql查询储存过程,函数,触发过程
查看>>
mysql查询总成绩的前3名学生信息
查看>>
MySQL查询报错ERROR:No query specified
查看>>
mysql查询数据库储存数据的占用容量大小
查看>>
MySQL查询数据库所有表名及其注释
查看>>
MySQL查询数据表中数据记录(包括多表查询)
查看>>
mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层执行原理吗?
查看>>
MySQL死锁套路:一次诡异的批量插入死锁问题分析
查看>>
Mysql死锁问题Deadlock found when trying to get lock;try restarting transaction
查看>>
mysql每个数据库的最大连接数_MySQL数据库最大连接数
查看>>
Mysql流程控制结构,if函数、case结构、if结构、循环结构
查看>>
mysql添加用户
查看>>
MySQL添加用户、删除用户与授权
查看>>
mysql添加用户及权限
查看>>