[异常]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,替换或者升级在另外一片博文里会详细说明
- [异常]Android 引用第三方lib出现ClassNotFoundException
- Android 导入第三方jar时 出现ClassNotFoundException
- Android 导入第三方jar时 出现ClassNotFoundException
- Android NDK 引用第三方.so库到lib下
- android 引用第三方lib工程(非单独的lib文件)需要注意的地方
- Android studio引用第三方jar各种异常
- 引用第三方库lib/dll出现的无法解析的外部符号问题
- android打包引用第三方jar出现的错误
- Android 升级ADT到22第三方Jar包导致的ClassNotFoundException和NoClassDefFoundError异常解决
- android 引用第三方库
- android 第三方引用框架
- java打包时,导入第三方jar运行出现ClassNotFoundException
- android 关于第三方lib打包出现的问题:ResClass is not initialized
- android lib 第三方 库的使用
- 如何添加Android第三方lib
- objective-c 引用第三方lib的扩展方法
- android studio导出lib和使用第三方lib
- android引用第三方jar包
- OpenSSL “心脏滴血”漏洞
- linux 查看压缩包里文件用什么命令
- 冒泡排序
- flask源码笔记:一,阅读Flask源码前的准备工作
- faac编译
- [异常]Android 引用第三方lib出现ClassNotFoundException
- ansible简易实现corosync自动安装启动
- java 生成json与解析
- Python基础回顾之-格式化字符串
- 2016年:杭电A + B Problem II
- js 兼容Firefox与IE的Excel到处
- Qt之QHeaderView排序
- flask源码笔记:二,Flask源码目录结构
- 习题6-1 UVa673 Parentheses Balance(栈)