Error:warning: Ignoring InnerClasses attribute for an anonymous inner class



刚刚接手新项目,从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);
}


再编译运行,问题就解决了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值