本猿已疯: Ecplise正确导入jar包,但是一直报错, java.lang.ClassNotFoundException,泣血分享 - Go语言中文社区

本猿已疯: Ecplise正确导入jar包,但是一直报错, 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)

或者

Cta5File::isCta5NormalFile false, bad magic:OggS

看了一下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中添加

android{   
     compileOptions {
            sourceCompatibility = JavaVersion.VERSION_1_6
            targetCompatibility = JavaVersion.VERSION_1_6
        }
}

总结:

  1.你的jar包的jdk一定要和目标工程的jdk版本一致,不然就会报这个"驴唇不对马嘴"的问题(本猿是用AS制作了一个jar包,jdk版本号是默认的1.8,  然后放到ecplise里面使用, Ecplise默认的JDK版本号是1.6,  所以就报错了)

2.这个问题困扰了我三天, 太让人抓狂了, 一致在搜索ClassNotFoundException,  显而易见得到的答案都是没有用的.  所以LogCat的输出所有的信息,  都要仔细看

 

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/mawei7510/article/details/98210592
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 22:13:26
  • 阅读 ( 952 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢