64K方法数限制原理和解决方案

概述

Android Dalvik可执行文件.dex中的Java方法数引用超过65536,64k的计算方法是65536除以1024,65K的计算方法是65536除以1000

原因

dex限制了程序的最大方法数是65535,如果超过最大限制,无法编译.

Android 5.0 之前的版本

谷歌出了一个名为MultiDex Support Library的库

Android 5.0 之后的版本

Android试用了名为ART的虚拟机来代替Dalvik虚拟机,ART支持从APK文件中加载多个.dex文件.
在安装期间,他会执行一个预编译操作,对.dex文件编译成一个个单一的.oat文件,在运行应用时去加载.oat文件,而不是.dex文件

解决方案一 减少方法数

不建议使用MultiDex Support Library来将APK中单一的dex拆分成多个,从而规避64k方法数限制引起的变异错误 ,因为会在大多数情况下降低应用的性能

1.减少不必要的依赖,对于lib的体积,方法数,性能进行考察,选择合适的库
2.使用Proguard移除无用的代码,配置并在Release版本中使能ProGuard,它的压缩功能通过分析字节码,能够检测并移除没有使用到的类,字段,方法和属性,

解决方案二 使用MultiDex

配置

在 Application Module 的build.gradle文件 增加对MultiDex的依赖

defaultConfig{
    multiDexEnabled true
}
dependencies{
    compile "com.android.support:multidex:1.0.1"
}
三种情况
1.如果项目没有自定义Application的类,只需要在AndroidManifest,xml文件使用MultiDexApplication替换Application即可,

android:name="android.support.multidex.multiDexApplication"


##### 2.如果应用已经有了自定义Application 那么让他继承MultiDexApplication
##### 3.如果不像或者不能修改他的父类,那么覆写attachBaseContext方法初始化MultiDex
>```
protected void attchBaseContext(Context context){
    super.attchBasaeContext(context);
    MultiDex.install(this);
}

总结

MultiDex在开发阶段会机打的影响到开发效率,建议最小支持5.0防止64k问题的发生,如有必要兼容Android 5.0以下版本,请充分做好测试.

转载于:https://my.oschina.net/wenlongguo/blog/816321

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值