解决`java.long.NoClassDefFoundError`

简介: 解决java.long.NoClassDefFoundError这个问题的原因多出现于Android版本兼容上Android5.0以下的手机,会出现java.

解决java.long.NoClassDefFoundError

这个问题的原因多出现于Android版本兼容上

Android5.0以下的手机,会出现java.long.NoClassDefFoundError

情况1: 当你的方法数超量时,采用

  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的系统识别成 高版本API. 类A将不会运行.

解决方法:

在做版本兼容的时候, 类名或者主要方法上 尽量不要 混编高API的方法或者接口.

比如这样


img_9c439e4f9213eec29b70eee3babeebe5.png
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) {


        }
    }

目录
相关文章
|
存储 Java
[java]I/O
[java]I/O
58 0
|
Java
Java 中do...while()的使用
Java 中do...while()的使用
56 0
1062 最简分数(JAVA)
一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。
1062 最简分数(JAVA)
1071 小赌怡情(JAVA)
常言道“小赌怡情”。这是一个很简单的小游戏:首先由计算机给出第一个整数;然后玩家下注赌第二个整数将会比第一个数大还是小;玩家下注 t 个筹码后,计算机给出第二个数。若玩家猜对了,则系统奖励玩家 t 个筹码;否则扣除玩家 t 个筹码。
1071 小赌怡情(JAVA)
|
小程序 Oracle Java
Java小史:从0到1
简单介绍下java的历史
189 0
Java小史:从0到1
|
Java
Java一些常见的坑
总是觉得自己Java基础还是不行,需要恶补。今天偶然mark了一本《Java解惑》,其中以端程序的方式罗列了95个即常见又不常见的xian(坑)jing(儿),拿来瞻仰一下。
87 0
|
存储 Java C++
C++和java的比较
C++和java的比较
122 0
|
Java
java if..else
java if..else
126 0
java if..else
|
存储 安全 算法
一篇文章让你真正了解Java
“你学习一门技术的最佳时机是三年前,其次是现在。”这句话对于哪一种行业都很适用,如果你已经学习过Java,那么恭喜你你很有先见之明,如果你并不了解Java,这篇文章带你快速掌握Java的几个核心知识点。
|
Java 关系型数据库