解决方案
第一步:添加分包支持
android{
defaultConfig {
multiDexEnabled true
}
}
dependencies {
compile 'com.android.support:MultiDex:1.0.1'
}
第二步:在继承的 Application中重写attachBaseContext(Context)
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
第三步:在项目的Build.gradle中添加
buildscript {
dependencies {
classpath 'com.library.tangxiaolv:dexknife-plus:1.0.4'
}
}
第四步:在App的Build.gradle中添加插件
apply plugin: 'dexknifePlus'
第五步: 在App的Android{}中配置参数
dexKnife{
//必选参数
enabled true //if false,禁用分包插件
//可选参数
//1.如果没有可选参数,将根据enabled决定是否分包。
//2.如果有可选参数,需满足必选参数和可选参数的条件才允许分包
productFlavor 'mock'
buildType 'debug'
/*
*eg:当前productFlavors = dev,buildType = debug,
*参数组合1:enabled = true,productFlavor = dev,buildType = debug 分包
*参数组合2:enabled = true,productFlavor = mock,buildType = debug 不分包
*参数组合1:enabled = true,buildType = debug 所有buildType = debug分包
*参数组合1:enabled = true,productFlavor = dev 所有productFlavor = dev分包
* */
}
第六步:在你的App模块目录下新建Text文件 dexknife.text,并自定义配置
#为注释符
#-----------主Dex中必要依赖的脚本配置-----------(支持依赖检测)
#默认保留四大组件中Service,ContentProvider,BroadcastReceiver三大组件,Activity组件选择性保留,若为空不保留任何Activity
-just activity com.ceabie.demo.MainActivity
#-----------附加类-----------(不支持依赖检测)
#如果你想要某个包路径在maindex中,则使用 -keep 选项,即使他已经在分包的路径中.若为空,不保留任意类
#-keep com.ceabie.demo.**
#保留单个类.
#-keep android.support.v7.app.AppCompatDialogFragment.class
#这条配置可以指定这个包下类在第二及其他dex中.
#-split android.support.v?.**
#将全部类移出主Dex
-split **.**
#不包含Android gradle 插件自动生成的miandex列表.(不使用建议的依赖树,注释掉表示使用,否则-just activity无效)
#-donot-use-suggest
#(分割每个dex包的方法数上限) 扩展参数:例如 --set-max-idx-number=50000
#如果出现 DexException: Too many classes in --main-dex-list, main dex capacity exceeded:
#表明限制的方法数小于main dex的必要方法数,调大到合适数值即可
-dex-param --set-max-idx-number=4000
#注释掉将执行自定义dex分包,否则执行默认分包.
#-auto-maindex
#显示miandex的日志.
#-log-mainlist