Android5.0以下(Android4.x)出现NoClassDefFoundError

事发起因

大周末的,突然接到老大的电话说很多用户无法安装新上线的APK,让我紧急Fix(现Android项目就我一己之力)。但奇怪的是也没有Bug Reporter,而且开发过程中也一直没问题。根据上报的几个用户的机型,我初步推断都是5.0以下的设备无法启动App,通过优测云测的真机模拟(在此强烈推荐这两个测试平台,前者是腾讯的,机型较新,后者做的规模还不错,测试较为准确,并且每天都有免费兼容测试的资格和限时免费的机型)打印出Log后得出判断,错误异常居然是这个:

java.lang.NoClassDefFoundError

这可就折腾了,因为Log打印的是某个类没有找到,开始以为是该类的代码问题,仔细检查后发现根本不应该是这个类引发的问题。而分别打的两个正式包(Mac和PC环境)设备报错都不是同一个类,刚开始Google的时候,关键字是NoClassDefFoundError android,SF上网友遇到的是Eclipse的路径配置问题,和我遇到的不是同一个Bug,就在希望快崩溃的时候,再次GoogleNoClassDefFoundError android studio发现该问题描述和我遇到的一模一样,回想前些日子遇到过Configure Apps with Over 64K Methods该问题,检查后发现Application并没继承MultiDexApplication,而build.gradle中依赖也没了,仅仅剩余下述开关multiDexEnabled true 。重新打包测试后果然是这个问题引发的血案,而出现这个问题是因为我和同事merge代码时候丢失部分修改导致的。

解决方法:

  1. 配置build.gradle (app)
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support. 开关
        multiDexEnabled true
    }
    ...
}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于出现java.lang.NoClassDefFoundError错误的解决办法,可以尝试以下几个步骤: 1. 检查类路径(Classpath):确保所需的类在项目的类路径中。检查是否已正确设置了依赖项和库文件,并且它们在项目构建路径中。 2. 清理和重建项目:有时编译过程中的错误可能导致类文件丢失或损坏。尝试执行项目的清理操作,然后重新构建项目。 3. 检查依赖项:确认所需的类是否位于正确的依赖项中。如果使用了第三方库或框架,确保已经正确导入并配置了依赖项。 4. 检查类命名和包名:确保类的名称和包名与代码中的引用一致。如果类名或包名有误,会导致无法找到对应的类。 5. 检查Java版本兼容性:如果使用了较新版本的Java特性或API,确保目标设备上的Java版本也支持这些特性。如果目标设备上的Java版本较低,可能会导致NoClassDefFoundError错误。 6. 检查构建工具和环境:如果使用了特定的构建工具(如Gradle或Maven),确保其配置正确并且依赖项已正确添加。还要确保开发环境中使用的编译器和构建工具版本与项目配置兼容。 7. 检查代码逻辑:有时,错误可能是由于代码逻辑错误造成的。检查相关代码,确保类在适当的位置被实例化和引用。 如果以上步骤都没有解决问题,可以进一步查看错误日志和堆栈跟踪,以了解更多关于错误原因的信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值