解決java.long.NoClassDefFoundError
這個問題的原因多出現(xiàn)于Android版本兼容上
Android5.0以下的手機,會出現(xiàn)java.long.NoClassDefFoundError
情況1: 當(dāng)你的方法數(shù)超量時,采用
在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的系統(tǒng)識別成 高版本API. 類A將不會運行.
解決方法:
在做版本兼容的時候, 類名或者主要方法上 盡量不要 混編高API的方法或者接口.
比如這樣

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) {
}
}