解決`java.long.NoClassDefFoundError`

解決java.long.NoClassDefFoundError

這個問題的原因多出現(xiàn)于Android版本兼容上

Android5.0以下的手機,會出現(xiàn)java.long.NoClassDefFoundError

情況1: 當(dāng)你的方法數(shù)超量時,采用

  1. 在Module的build.gradle的defaultConfig中加一行multiDexEnabled true

  2. 在dependencies中添加一行compile 'com.android.support:multidex:1.0.0';

  3. 如果有自定義的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) {


        }
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容