Android64K方法编译限制

本文介绍了解决Android应用中超过64K方法数限制的问题,通过使用multidex来应对这一挑战,并讨论了该方案可能带来的负面影响及建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是64k问题

Android平台的Java虚拟机Dalvik执行Dex程序时,使用的是short类型来索引DEX文件中的方法。这就意味着单个Dex文件可被引用的方法总数被限制为64x1024, 即65536。随着项目发展,有可能就会超过64K方法,这个时候编译将会报错.
Android官方64K说明

解决问题

1. build.gradle添加multidex依赖
dependencies { compile 'com.android.support:multidex:1.0.0'}

2. 项目Appplication继承MultiDexApplication
Modify your manifest to reference the MultiDexApplication class

3. builder.gradle加配置
android {
 defaultConfig {
...
 minSdkVersion 14
targetSdkVersion 21
...
  // Enabling multidex support.
multiDexEnabled true
 }
...}

使用mutidex的负面影响

1. 由于是分2个dex文件,安装启动的时候如果需要从这2个dex文件上获取数据,而dex文件太大,有可能会ANR.
2. 在4.0(API level 14)前使用multidex模式可能不能启动, 原因在于Dalvik线性分配的bug(Issue [22586(http://b.android.com/22586)).如果一定要用,详细测试这些api等级
是否有问题,最好是减少代码.
3. 使用multidex会造成巨大的内存分配,可能会oom,由于Dalvik 线性内存分配限制 (Issue 78035).这个限制在Android 4.0 (API level 14)做了增加,但是Android 5.0 (API level 21)前仍有可能有此限制.
4. calsses执行在Dalvik runtime的时候需要在primary dex file.这挺复杂的.Android build tooling 会处理好 Android原本的代码,有些但项目包含的libraries依赖native code(JNI).这些包可能无法使用直到multidex build tools 允许你把类似的特殊classes添加到primary dex file.也就是有些依赖工程或者jra包会有问题.

建议

尽量减少项目不必要的方法数.通过混淆优化代码.
AndroidStudio 2.2版本及以上可以在工具栏Builer->Analyze Apk ->classdex8查看方法数使用详情.
项目有意识的去减少不必要的方法数,触及64K的底线还是挺难的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值