[异常]Android 引用第三方lib出现ClassNotFoundException

来源:互联网 发布:蚂蚁宝卡 知乎 编辑:程序博客网 时间:2024/05/15 03:49

近期在做一个项目需要使用到七牛SDK,进行上传图片,调用SDK方法时出现了ClassNotFoundException异常,首先说下出现的原因

//Suppressed: java.lang.ClassNotFoundException: com.qiniu.android.storage.UploadManager

ClassNotFoundException 出现原因:
1.可能是环境变量配置有问题
2.jar包有错误,查看jar是否有漏或者重新导入jar包,以及缺少依赖的包
3.可能你用了不存在的类
4.版本不一致,jdk的版本

根据出现的原因进行排查,最后发现是jdk版本导致的这个原因,当你前面几个步骤都检验过后,如何确定是jdk版本的问题,需要以下几个步骤

(以 qiniu-android-sdk-7.1.2.jar 为例子)

第一种方式:

直接解压jar,随便找到其中一个类,通过以下代码进行查询

public class VersionMain {    private static final int JAVA_CLASS_MAGIC = 0xCAFEBABE;    public static void main(String[] args) {        try {            // 随便一个class路径            String path = "H:\\异常\\qiniu-android-sdk-7.1.2\\com\\qiniu\\android\\common\\Constants.class";            DataInputStream dis = new DataInputStream(new FileInputStream(path));            int magic = dis.readInt();            if (magic == JAVA_CLASS_MAGIC) {                int minorVersion = dis.readUnsignedShort();                int majorVersion = dis.readUnsignedShort();                // Java 1.2 uses major version 46                // Java 1.3 uses major version 47                // Java 1.4 uses major version 48                // Java 5 uses major version 49                // Java 6 uses major version 50                // Java 7 uses major version 51                System.out.println("ClassVersionTest.main() " + majorVersion + "." + minorVersion);            }        } catch (Exception e) {            e.printStackTrace();        }    }}// 最后打印的结果是:// ClassVersionTest.main() 51.0// 表明这个jar,是以jdk 1.7的版本打包的

第二种方式:

直接用二进制编辑工具(例如Uedit32),打开class
这里写图片描述

会有以下的显示: CA FE BA BE 00 00 00 33
33是编译这个类的JDK版本。
33表示51,是JDK1.7;32表示50,是JDK1.6 依次类推。


知道了属于jdk版本的问题,但是通过 java -version 查看自己的版本就是1.7为什么会出现这个问题,可以通过 对应的项目 右键 -> properties -> Java Compiler -> Compiler compilance level 选择对应的jdk版本

这里写图片描述

这里查看到是以1.6版本,改成1.7就行


Android 版本选择:
有些人改成1.7后会出现以下错误

Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.

很有可能原因就是ADT版本决定的,
http://developer.android.com/sdk/index.html

ADT23以上都是以 jdk 1.7 版本编译,而之前的版本都是属于 1.6所以导致更换jdk版本出现这个问题,这个时候就需要替换ADT,替换或者升级在另外一片博文里会详细说明

0 0
原创粉丝点击