Android使用Eclipse遇到"java.lang.ClassNotFoundException"

Posted 心在飞_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的。

  

  我试着在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使用Eclipse遇到"java.lang.ClassNotFoundException"的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse启动时卡死在"Android SDK: Resolving error markers"的解决方法

Android 和 Eclipse:更改应用程序 API 级别

为 android 编程时 Eclipse 出现问题 - “刷新外部文件夹”

Android logcat“应用程序”列始终为空

Android中的“找不到活动”

如何使用 Eclipse + Proguard“运行”导出的 Android 应用程序?