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

时间: 2024-10-07 21:32:36

Android使用Eclipse遇到"java.lang.ClassNotFoundException"的相关文章

真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener 这时里的意思是说找不到jar包,如果使用的是maven管理jar包,会发现jar包明明已经有了,但还是报错:如果mvn package生成一个war包发布到tomcat下面会发现,其实项目是没问题的. 1.出现这个问题的原因有可能的其中一点就是sprin

maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoader

在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener 这时里的意思是说找不到jar包,如果使用的是maven管理jar包,会发现jar包明明已经有了,但还是报错:如果mvn package生成一个war包发布到tomcat下面会发现,其实项目是没问题的. 1.出现这个问题的原因有可能的其中一点就是sprin

Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener(Maven工程)

Eclipse中tomcat部署工程启动后报错: 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener at org.apache.catalina.loader.W

Android项目编译的时候出现:Caused by: java.lang.ClassNotFoundException: com.example.aaa.MainActivity

错误类型: 04-28 06:10:15.508: E/AndroidRuntime(849): Caused by: java.lang.ClassNotFoundException: com.example.aaa.MainActivity 04-28 06:10:15.508: E/AndroidRuntime(849): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 04-28 06:1

maven项目在eclipse启动报错:java.lang.ClassNotFoundException

问题: 用eclipse创建maven项目的时候,pom.xml中相关的依赖jar已经导入进去,还会报java.lang.ClassNotFoundException的错误,提示找不到相关的jar包,但是在maven Dependencies中又可以找到相关的jar包. 问题原因: 我们进入到tomcat的部署路径下:E:\workplace4.6\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\springmvc.r

在eclipse中运行spring web application时的异常: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener....... tomcat再发布web项目时,并没有将maven的依赖包一起随项目的编译一并进行打包. 解决办法

android 自定义View Caused by: java.lang.ClassNotFoundException: Didn't find class

在android studio中, 自定义View 时,出现 Caused by: java.lang.ClassNotFoundException: Didn't find class 在查看包名和类名都没有错误的情况,一个可能的原因是,在添加包名时,粗心导致把包类型定义为androidTest下了 如下图所示: 本人做为android  新手,英语水平一般,只是如实记录自己所犯的错,高手不喜勿吐. android 自定义View Caused by: java.lang.ClassNotFo

Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL

Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL     严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException: org.springframework.web.co

eclipse下执行wordcount报错 java.lang.ClassNotFoundException 解决办法

eclipse下执行wordcount报错 java.lang.ClassNotFoundException 17/08/29 07:52:54 INFO Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS 17/08/29 07:52:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for y