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.**(不是啓動相關類的時候,可以用這個辦法)