java.lang.NoClassDefFoundError

本文介绍了当Android应用遇到方法数超出65536限制时的解决方案,包括配置multidex、修改build.gradle文件及实现自定义Application类。详细解释了为何会出现此问题及如何通过多DEX文件进行分包。

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

1.编译能通过,但运行找不到类

2.大部分出现这个问题的主要原因是:方法数超65536限制


1.

compile 'com.android.support:multidex:1.0.1'
2.
defaultConfig {
    applicationId "com.manniu.manniu"
    minSdkVersion 14
    targetSdkVersion 21
    multiDexEnabled true
    ndk {
        moduleName "P2PTransfor hjz"  //设置库(so)文件名称
        ldLibs "log"
        abiFilters "armeabi"//,"armeabi-v7a","x86_64"
        // abiFilters 'armeabi-v7a' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
    }
}
3.

使用自定义的Application继承MultiDexApplication这个类,或者重写Application的方法attachBaseContext(),并调用MultiDex.install();

@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(base); }

为啥:

这个错误是Android应用的方法总数限制造成的。Android平台的Java虚拟机Dalvik在执行DEX格式的Java应用程序时,使用原生类型short来索引DEX文件中的方法。这意味着单个DEX文件可被引用的方法总数被限制为65536。通常APK包含一个classes.dex文件,因此android应用的方法总数不能超过这个数量,这包括Android框架、类库和你自己开发的代码。而Android 5.0和更高版本使用名为ART的运行时,它原生支持从APK文件加载多个DEX文件。在应用安装时,它会执行预编译,扫描classes(..N).dex文件然后将其编译成单个.oat文件用于执行. 通熟的讲,就是分包。

参考:Sunjy1881的博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值