Android工程方法数超过65535,怎么破

编译后安卓的方法都存放在dex文件里,dex会被DexOpt这个程序odex化。dexopt会把dex里的每个方法的id保存到一个链表中,而这个链表的长度却是用short类型保存的。这样的话,方法的ID就最多只能有66535个了,项目大了就可能会不够用

当Android工程方法数大于66535时,就会报错:

  1. UNEXPECTED TOP-LEVEL EXCEPTION:  
  2. java.lang.IllegalArgumentException: method ID not in [00xffff]: 65536  
  3. at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:501)  
  4. at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:282)  
  5. at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:490)  
  6. at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167)  
  7. at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)  
  8. at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)  
  9. at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)  
  10. at com.android.dx.command.dexer.Main.run(Main.java:230)  
  11. at com.android.dx.command.dexer.Main.main(Main.java:199)  
  12. at com.android.dx.command.Main.main(Main.java:103



我们可以通过谷歌官方推荐的MultiDexApplication解决
Gradle 配置:
defaultConfig {   
       applicationId "XXX"
       minSdkVersion 14
       targetSdkVersion 23
       multiDexEnabled true
}
dependencies {
    compile 'com.android.support:multidex:1.0.0'
}
Application 类重写方法:
@Override
protected void attachBaseContext(Context base) {
   super.attachBaseContext(base);
   MultiDex.install(this);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值