最近遇到个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"的更多相关文章

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

    原文地址:http://www.cnblogs.com/amosli/p/4067665.html 在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.Clas ...

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

    在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.ClassNotFoundException:org.springframework.web.context ...

  3. eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN

    eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错?java. ...

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

    在android studio中, 自定义View 时,出现 Caused by: java.lang.ClassNotFoundException: Didn't find class 在查看包名和 ...

  5. myeclipe eclipse 常遇问题:Some projects cannot be imported 、java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver、The file connot be validate

    1.Some projects cannot be imported because they already exist in the workspace 2.Some projects were ...

  6. Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener

    Eclipse中tomcat部署工程启动后报错: 严重: Error configuring application listener of class org.springframework.web ...

  7. java.lang.ClassNotFoundException: org.eclipse.jetty.plus.webapp.EnvConfiguration

    最近刚接触jetty,在myeclipse8.6中加入了一个项目,运行时就出了这个java.lang.ClassNotFoundException: org.eclipse.jetty.plus.we ...

  8. eclipse中启动tomcat报错 java.lang.ClassNotFoundException

    之前启动还好好的,某次启动tomcat就莫名其妙的报了这个java.lang.ClassNotFoundException的错.   检查maven依赖包,发现这个类是存在的. 然后一通clean操作 ...

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

    Eclipse中tomcat部署工程启动后报错: 严重: Error configuring application listener of class org.springframework.web ...

随机推荐

  1. 发挥jQuery的威力

    发挥jQuery的威力 由于当前jQuery如此的如雷贯耳,相信不用介绍什么是jQuery了,公司代码中广泛应用了jQuery,但我在看一些小朋友的代码时发现一个问题,小朋友们使用的仅仅是jQuery ...

  2. js操作iframe总结

    一 在父页面操作子页面   IE下操作IFrame内容的代码: document.frames["MyIFrame"].document.getElementById(" ...

  3. MongoDB学习(翻译5)

    C#驱动序列化文档对象 介绍 本文档基于C#官方驱动1.8版本. 本节C#驱动教程谈论C#类到BSON对象的序列化和反序列化.序列化是映射一个对象到可保存到MongoDB库中BSON对象的过程,反序列 ...

  4. 自定义生命周期的设计(iOS篇)

    自定义生命周期的设计(iOS篇) 首先要确定一点,我们的App,要基于XIB文件进行编程,而不是在每个相应的ViewController里面去手动创建页面的每个控件.这样做的好处是,将页面布局与业务逻 ...

  5. C语言中的调试小技巧

    C语言中的调试小技巧 经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的 ...

  6. .NET框架设计—常被忽视的C#设计技巧

    .NET框架设计—常被忽视的C#设计技巧 阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你 ...

  7. Ubuntu snappy is lame

    ubuntu has just announced that snappy will replace 'apt' as the next generation of package manager f ...

  8. squid和varnish的小结

    squid和varnish的小结 http://blog.haohtml.com/     上周初步接触linux下的这2个反向缓存软件,都实验了一下,貌似squid还是比较顺利的,varnish则碰 ...

  9. Create Table DDL sample(TSQL)

    IF EXISTS (SELECT 1 FROM sysobjects o, sysusers u WHERE o.uid=u.uid AND o.name = 'Table_Name' AND u. ...

  10. IPC之消息队列详解与使用

    一.    概念 消息队列就是一个消息的链表.对消息队列有写权限的进程可以向其中按照一定的规则添加新消息:对消息队列有读权限的进程可以从消息队列中读出消息.消息队列是随内核持续的.下面介绍三个概念: ...