問題:項目里經常需要添加第三方jar包,加入新的jar包后編譯時可能報錯Unable to execute dex: Multiple dex files define。
我的報錯信息如下:
1 [2015-06-11 09:54:32 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/google/protobuf/AbstractMessage$1; 2 [2015-06-11 09:54:32 - SharePDF] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/google/protobuf/AbstractMessage$1;
上網查別人的問題和解決方法,檢查自己的lib目錄后發現有兩個jar包里都含有google.protobuf,試着刪除其中一個jar包里的google.protobuf,發現編譯通過了。
1 [2015-06-11 10:10:45 - SharePDF] Dx 2 trouble writing output: already prepared
但是!!!!!
在運行時報class not find 之類的,然后又試着換成保留這個包的而刪除另外一jar包里的,編譯通過,運行成功。
我覺得是:第三方jar包他們在生成時可能把某些類做了關聯,直接刪除可能會出現錯誤。所以遇到這種jar包里類沖突的情況,不能隨便刪除其中一個,還要看會不會有某種關聯關系導致其他類不可用。
》》》這里請教下這種關聯關系到底是怎樣的嗎,鄙人對於編譯,dx這方面不太懂。
附網上其他解決辦法:
方法一:
Eclipse->Project->去掉Build Automatically->Clear ->Build Project->Build Automatically,關閉Eclipse,再打開(試過,我的問題不是出在這)
方法二:
更新ADT插件,刪除workspace目錄下的.metadata目錄,(未試過)
方法三:
在你的項目下某個文件夾中有一個后綴為*.APK的文件,刪掉,重啟Eclipse即可。(未試過)
方法四:
原因是有重復的。jar被引用,可以查看你的build path,尤其是Android Dependencies一定有重復引入的.jar包,解決的方法是在libs刪除重復的jar即可。(不是這種情況)
方法五:
在項目中,有一個類的包名和引用的jar包中的類和包名一致,如果用的是jar包中的類,所以工程中的這個類就是重復引用的,刪除工程中重復引用的類后,成功打包啟動。(我的情況跟這個類似,不過是兩個jar包中的類和包名一致或沖突)