主要问题
java.lang.NoClassDefFoundError
问题描述
在使用不同版本手机进行测试时,往往出现手机类型兼容性问题与手机系统版本兼容性问题,此问题主要为后者,描述如下:
1. 开发中使用5.0+android系统(coolpad);
2. 编译运行无误;
3. 使用5.0-android系统(HUAWEI-4.4)调试时出现初始化出错;
4. logcat 输出错误为java.lang.NoClassDefFoundError
5. 出问题的类文件保证存在切能通过编译
问题现象
由Error导致应用崩溃或闪退
问题分析
在开发中,所做项目的量级与应用兼容android版本是一个非常严重的问题,而在此问题上,大致分析为两种:
- 应用的使用版本最低要求是 API 16 通过查阅 Android 5.0以下出现 java.lang.NoClassDefFoundError: 得出可能是版本问题;
- 而在应用中,由于需求不断变更导致文件越来越多,有可能引发Dex超出方法数问题, 参照 Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚 ;
解决方案
1.添加依赖
compile 'com.android.support:multidex:1.0.0'
2.配置build.gradle
android {
...
defaultConfig {
...
multiDexEnabled true
...
}
}
3.自定义Application继承MultiDexApplication或者重写Application的方法attachBaseContext(),并调用MultiDex.install()
例如:
//继承MultiDexApplication使用
public class App extends MultiDexApplication {
...
}
4.clean 重新编译,如果不放心可删除build文件夹
5.问题解决
此问题属于个人开发中所遇问题,并不代表此类问题都能通过这种方式解决,若有更好解决方式或相似问题,欢迎各位留言探讨,不胜感激!