刚刚接手新项目,从SVN上拿下代码,导入Android studio时,在Gradle Console中报了如下警告:
既然是警告,先不搭理他,只管在真机上部署,然而启动就崩溃,在Android Monitor - logcat中报了如下错误:
这当然不是jar包导入失败的问题,通过更新调整gradle版本、修改jdk版本,无法解决问题。
折腾了好长时间,明确了问题的出现与Android的MultiDex机制有关。
Android系统将项目代码打包成一个Dex文件时,如果Dex文件过于肥大,如方法数太多,超过 65536 时( 导入过多第三方包就会造成方法数急剧增长 ),或者文件太大,打包就会出问题。即便暂时打包未出问题,APP运行在低于5.0版本以下的系统上时还可能会出问题。像我的问题就出在真机系统版本是4.4.4,低于5.0。
既然确定是 M ultiDex机制造成的,那针对这个找解决办法。
网上很多人这样说:
在工程的混淆配置文件 proguard-rules.pro 中加入下面这句代码即可:
不起作用。
-keepattributes EnclosingMethod
我甚至将进行代码混淆的代码注释掉了,然并卵。因为代码混淆前实际上已经设置了jar包的keep。
要这样做:
1、修改Gradle配置文件,启用MultiDex并包含MultiDex支持:
defaultConfig {
multiDexEnabled true
}
添加依赖:
dependencies { compile 'com.android.support:multidex:1.0.1' }
注意:上面的android首字母的a是小写,CSDN处理成链接就变成大写了。
2、 让应用支持多Dex文件。在MultiDexApplication JavaDoc中描述了三种可选方法:
(1)在AndroidManifest.xml的application中声明android.support.multidex.MultiDexApplication;
(2)如果你已经有自己的Application类,让其继承MultiDexApplication;
(3)如果你的Application类已经继承自其它类,你不想/能修改它,那么可以重写attachBaseContext()方法:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base); MultiDex.install(this);
}
再编译运行,问题就解决了。