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

  最近遇到個Android Jar的問題,找了幾天才找到root cause. 在此記錄下。html

  咱們的Android項目須要使用一個供應商的Jar.java

  咱們使用的開發環境爲:Eclipse + ADT插件(這年頭竟然不用Android Studio...)。android

  把下載好的Jar放入"libs"文件夾內,Eclipse就會自動識別。 啓動APK,直接crash. Logcat 報:"java.lang.ClassNotFoundException"錯誤。app

  查看項目的 Java Build Path, Android Private Libraries and Android Dependencies 都正確而且都打勾了。工具

  接下來就瘋狂Googling,試了不少方法,仍是不行。gradle

  三天以後。。。ui

  搜到一篇文章,裏面提到了有多是由於Java Jar版本不兼容致使的。會報:spa

Dx bad class file magic (cafebabe) or version (0033.0000)

  看了一下Eclipse的Console輸出,果真有上面的錯誤。插件

  媽呀,終於知道爲何了,浪費了這麼多天時間。code

 

  原來供應商的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

相關文章
相關標籤/搜索