最近遇到個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