android 65536 简书,app编译打包时的65536问题

本文介绍了在Android开发中遇到的DexIndexOverflowException错误及其解决方案。通过修改build.gradle文件,启用jumbo模式或启用multiDex支持来处理方法数超过65536的限制。对于multiDex,详细说明了如何配置Application类,并提供了处理OutOfMemoryError的方法。此外,还提到了分包后的两种情况和如何配置mainDex类。

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

两种情况,第一种:

第一种non-jumbo instruction

UNEXPECTED TOP-LEVEL EXCEPTION:

com.android.dex.DexIndexOverflowException:Cannot merge new index 65562 into a non-jumbo instruction!

如果报 Cannot merge new index 65562 into a non-jumbo instruction! 这个问题则很容易解决,直接修改build.gradle,清理项目后重新sync编译:

android {

dexOptions {

jumboMode =true

}

}

第二种 method ID not in [0, 0xffff]: 65536

如果报 method ID not in [0, 0xffff]: 65536 这个问题则稍微麻烦一些。谷歌提供了解决方案,把单个巨大的Dex分成多个:

修改build.gradle,添加编译multidex包

dependencies{

compile'com.android.support:multidex:1.0.1'

}

开启multiDexEnabled:

android {

defaultConfig {

multiDexEnabled true

}

}

修改Application类,这个情况要分成3种:

1.没有创建自定义Application类(使用默认的Application类):

直接配置清单文件AndroidManifest.xml中的节点,添加:

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

2.自定义的Application类继承默认的android.app.Application:

这种情况把继承类改成android.support.multidex.MultiDexApplication即可

3.自定义的Application类继承别的类,而你无法修改或者不想改:

则要重写attachBaseContext方法:

@Override

protected    void    attachBaseContext(Context base) {

super.attachBaseContext(base);

MultiDex.install(this);

}

按上面修改编译后出现:

UNEXPECTED TOP-LEVEL ERROR:

java.lang.OutOfMemoryError: GC overhead limit exceeded

修改build.gradle

android {

dexOptions {

incrementaltruejavaMaxHeapSize"4g"

}

}

Sync后再次编译即可。

分包后有两种情况,一种是你代码方法数没有超过65536,那么还是在一个dex里,和没分包一样

63473ae1ce30?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

如果方法数量比较多,那么就会超出方法数,执行分包

63473ae1ce30?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

分包的实现就这些配置,就这些,当然可能遇到分包的maindex不包含应用初始的类,想要配置maindex,请参考:

http://www.jianshu.com/p/9eb063fa9c79

想理解分包的原因加深理解的话可以看看这篇:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值