最近遇到个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. Bootstrap3.0入门学习系列

    Bootstrap3.0入门学习系列规划[持续更新]   前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...

  2. (转)NoSQL——Redis在win7下安装配置的学习一

    NoSQL——Redis在win7下安装配置的学习一   有些也是从网上看来的 1.下载安装 Redis它没有windows的官方版本,但是又非官方的版本,到官网上去下载相应的版本,我的电脑是win7 ...

  3. asp.net内部原理3

    asp.net内部原理(三) 第三个版本 (最详细的版本) 前言: 今天继续吧这个系列补齐,这几天公司的项目比较忙,回到家已经非常的累了,所以也没顾得上天天来这里分享一些东西和大家一起探讨,但是今天晚 ...

  4. iOS蓝牙调用的一般流程

    一.服务端(也叫周边设备吧..脑残的翻译) 1.实现类必须遵守协议 CBPeripheralManagerDelegate 2.需要的主要类有: @property(strong,nonatomic) ...

  5. MySQL TIMESTAMP(时间戳)详解

    在创建表时如果表中有一个字段类型为TIMESTAMP,则该字段默认的生成语句为: CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `ctime` ti ...

  6. EasyUI Editable Tree

    效果如图: Create Tree <ul id="tt"></ul> $('#tt').etree({ url: 'tree_data.json', cr ...

  7. python 爬虫总结【转】

    1.基本抓取网页 get方法 import urllib2 url = "http://www.baidu.com" response = urllib2.urlopen(url) ...

  8. Python 3语法小记(五)字符串

    Python 3 的源码的默认编码方式为 UTF-8 在Python 3,所有的字符串都是使用Unicode编码的字符序列. utf-8 是一种将字符编码成字节序列的方式.字节即字节,并非字符.字符在 ...

  9. Haxe2.10到Haxe3,NME到OpenFL的迁移备忘

    终于决定正式向Haxe3和OpenFL迁移了,这期间也遇到不少问题,这里总结记录如下: 首先是Haxe3环境 * 因为还想保留Haxe 2.10的环境,因此没有使用官网的Haxe 3安装包,而是下载了 ...

  10. nginx整合tomcat集群并做session共享----测试案例

    最近出于好奇心,研究了一下tomcat集群配置,并整合nginx,实现负载均衡,session共享,写篇记录,防止遗忘.---------菜鸡的自我修炼. 说明:博主采用一个web项目同时部署到两台t ...