解决java.long.NoClassDefFoundError
这个问题的原因多出现于Android版本兼容上
Android5.0以下的手机,会出现java.long.NoClassDefFoundError
情况1: 当你的方法数超量时,采用
在Module的build.gradle的defaultConfig中加一行
multiDexEnabled true
;在dependencies中添加一行
compile 'com.android.support:multidex:1.0.0'
;如果有自定义的Application,那么在自定义的Application类中,继承
MultiDexApplication
。
情况2: 如果上面都没有问题, 请检查你 报错的类里面, 有没有引用高版本API
比如,我在Android4.3上跑项目, 但是我类A implement 了一个Android7.0的接口,也会报这个错误.
因为 这个A 会被编译成.class 打包进.dex ,但是会被Android4.3的系统识别成 高版本API. 类A将不会运行.
解决方法:
在做版本兼容的时候, 类名或者主要方法上 尽量不要 混编高API的方法或者接口.
比如这样
![img_9c439e4f9213eec29b70eee3babeebe5.png](https://yqfile.alicdn.com/img_9c439e4f9213eec29b70eee3babeebe5.png?x-oss-process=image/resize,w_1400/format,webp)
image.png
尽量在一个方法中做版本兼容,比如这样.
/**
* 兼容5.0以下版本
*/
private void setOnScrollListenerV5() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (scrollChangeListener == null) {
scrollChangeListener = new WevScrollChangeListener();
}
mWebView.setOnScrollChangeListener(scrollChangeListener);
}
}
/**
* 兼容5.0以下版本
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public class WevScrollChangeListener implements View.OnScrollChangeListener {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
}
}