The number of method references in xxx.dex file cannot exceed 64K问题

The number of method references in xxx.dex file cannot exceed 64K问题


背景:最近给移动公司写的项目,随着时间的推移,需求越来越多,引入的library越来越多,项目也越来越大,某一天编译工程时,出现了dex 64k问题。

问题1:某一天,当引入一个library以后,编译工程,出现了错误:The number of method references in xxx.dex file cannot exceed 64K.
分  析:当引入的内容太多达到android工程构建的极限时,便会遇到dex exceed 64K的构建错误。
解决方案:需要在.gradle文件中,配置multiDexEnabled属性为true。这样配置以后,可以将dex文件进行分包处理,Android 构建工具根据需要,会构建主 dex (classes.dex) 和 辅助 dex(classes2.dex、classes3.dex)。随后构建系统会将它们打包成一个 APK 文件进行分发。反编译一些稍大的app,会发现,里面通常会有几个.dex文件,就是进行了分包处理。(前提是:Android SDK Build Tools >=21.1,小于21.1的构建工具不支持分包处理)。
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 110
        versionName "x.x.x"
        multiDexEnabled true
    }


问题2:当上面问题1中的配置搞定后,有时候会出现另一个问题,OOM:GC overhead limit.
分  析:进行分包配置以后,在构建项目时,需要消耗更多的时间和内存,当内存超过最大限制时,就会OOM。
解决方案:扩展最大的memory限制,在.gradle文件中配置dex操作的max heap size。这里按照google各位大神的推荐,用了4g。
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 110
        versionName "x.x.x"
        multiDexEnabled true
    }

    dexOptions{
        javaMaxHeapSize "4g"
    }


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值