Android-Easy-MultiDex是基于DexKnifePlugin
建议先熟悉一下这2个东西
分包总共有2个地方,可以配置一个app的build.gradle、一个是dexknife.txt
一、在build.gradle的android{}插入这段代码,表示计算这几个activity的依赖,并加入maindexlist中
/需要加入主dex的Activity列表
def mainDexListActivity = ['SplashActivity1', 'LoginActivity','HomeTabActivity','WebActivity']
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += '--set-max-idx-number=48000'
dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
}
project.tasks.each { task ->
if (task.name.startsWith('collect') && task.name.endsWith('MultiDexComponents')) {
println "main-dex-filter: found task $task.name"
task.filter { name, attrs ->
String componentName = attrs.get('android:name')
if ('activity'.equals(name)) {
def result = mainDexListActivity.find {
componentName.endsWith("${it}")
}
return result != null
} else {
return true
}
}
}
}
}
二、修改dexknife.txt文件
我使用的规则:启动类相关的!
1.-split **.**
2.找到Application以及Application的代理类查看他引入的包,以及他的依赖。例如:-keep me.jessyan.**
3.找到SplashActivity引入的包,(这一步gradle已经做了)
4.注释掉-donot-use-sugges
# 不包含Android gradle 插件自动生成的miandex列表.(不使用建议的依赖树,注释掉表示使用,
否则-just activity无效)
#-donot-use-suggest
5.添加如下依赖
-keep android.support.v4.app.**
-keep android.support.v7.app.**
这样,主dex的类就差不多可以了。如果不愿意自己加也可以交给gradle算,写法是类似的。
三、分了包dex依然报65535
原因,可能是你没有-split**.**在你添加新的library时(比如okhttp3),直接添加到主dex中了。那么主dex依然爆炸。
解决办法1. -split **.**清空全部主dex,再自己keep。重新管理主dex
解决办法2. 可以的话 -split okhttp3.**(不是启动相关类的时候,可以用这个办法)