行是知之始,知是行之成。这篇文章主要讲述Android 出现java.lang.NoClassDefFoundError错误相关的知识,希望能为你提供帮助。
项目中用到了Retrofit在android4.4以下版本发生的问题
【Android 出现java.lang.NoClassDefFoundError错误】因为项目的build.gradle文件沿用于一个项目的,在defaultConfig
z中已经声明了
multiDexEnabled true
,当方法数超过65535时便会自动打出两个Dex包命名为classes.dex
classes2.dex
,一些方法被打入了第二个dex包,即classes2.dex
中,导致了5.0以下机型无法运行应用报错。
解决方法:
(1)在app的 build.gradle 中的dependencies 中添加
compile ‘com.Android.support:multidex:1.0.1‘
dependencies {
compile fileTree(include: [‘*.jar‘], dir: ‘libs‘)
compile ‘com.android.support:multidex:1.0.1‘
}
(2)在app的 build.gradle 中的 defaultConfig 中添加
multiDexEnabled true
defaultConfig {
...
multiDexEnabled true
}
(3)在 AndroidManifest.xml 中的
application 标签中添加 :
<
?xml version="1.0" encoding="utf-8"?>
<
manifest xmlns:android="http://schemas.android.com/apk/res/android"
package=".test">
<
application
...
android:name="android.support.multidex.MultiDexApplication">
...
<
/application>
<
/manifest>
提示:如果你的应用重写了Application,则你需要继承MultiDexApplication而不再是Application啦
如果你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类,如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法:
/**
* 分割 Dex 支持
* @param base
*/
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
推荐阅读
- 通过AndroidSDK自带的Tool在dos命令行窗口显示日志,并存入txt文档中
- centos /dev/mapper/cl-root 100% 解决方法
- 使用illuminate/html 提示( Call to undefined method IlluminateFoundationApplication::bindShared())
- Android 多屏幕适配 dp和px的关系 最好用dp
- Android 自定义组件 事件处理
- Android Canvas 抗锯齿的两种方式
- Ext.app.Application
- AppServ安装
- JavaFX SepiaTone效果