亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Android使用Eclipse遇到"
java.lang.ClassNotFoundException"
相关的知识,希望能为你提供帮助。
最近遇到个android Jar的问题,找了几天才找到root cause. 在此记录下。
我们的Android项目需要使用一个供应商的Jar.
我们使用的开发环境为:Eclipse + ADT插件(这年头居然不用Android Studio...)。
把下载好的Jar放入"libs"文件夹内,Eclipse就会自动识别。 启动APK,直接crash. Logcat 报:"java.lang.ClassNotFoundException"错误。
查看项目的 Java Build Path, Android Private Libraries and Android Dependencies 都正确并且都打勾了。
接下来就疯狂Googling,试了很多方法,还是不行。
三天之后。。。
搜到一篇文章,里面提到了有可能是因为Java Jar版本不兼容导致的。会报:
Dx bad class file magic (cafebabe) or version (0033.0000)
看了一下Eclipse的Console输出,果然有上面的错误。
妈呀,终于知道为什么了,浪费了这么多天时间。
原来供应商的Jar使用的是Android Studio导出的,而Android Studio默认使用Java 1.7编译的,而Eclipse的ADT工具Dx最多只支持1.5和1.6(这点没有找到权威的资料).
所以导致了Java 1.6虚拟机无法解析Java 1.7字节码文件。
我用在Windows下用Cygwin控制台的file *.class 命令看了下,确实看到供应商的Jar是Java 1.7的。
【Android使用Eclipse遇到" java.lang.ClassNotFoundException" 】
我试着在Eclipse中把Java Compliance 调到Jdk 1.7. 但是编出来的APK还是Crash.看来ADT确实最多只支持1.6.
文章图片
解决方法:
需要在导出Jar中配置的,所以为了兼容需要在工程的build.gradle中添加
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6
}
看来要让供应商改下了。
经验教训:
不要只看Logcat的错误输出,Console的输出有时也很重要。
参考链接:
http://www.jianshu.com/p/f789fe4bcacd
http://www.eoeandroid.com/thread-312955-1-1.html
推荐阅读
- Android代理模式封装百度地图路线规划模块
- Android状态选择器用法总结
- 安卓通知控件SnackBar详解
- 安卓手机优化ROOT自启动管理 + 电量管理
- office2007版本都有哪些?office2007各个版本介绍_其它办公
- office2007正式版到底有多大?office2007正式版文件大小_其它办公
- office2007更新后无法运用的处理办法_其它办公
- office2007安装时出错的几种原因与处理办法_其它办公
- 哪里有acrobat xi pro序列号?_其它办公