打包錯誤Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define
阿新 • • 發佈:2018-11-01
昨天準備釋出一個版本,算好了時間,在解決完其他問題後預留兩個小時來上傳。在打包時遇見了問題,害的我加班三個小時。現記錄下問題,並整理下解決問題的思路。
打包出現問題時的截圖
圖片可能看不太清楚,錯誤如下:
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs;
蹩腳的翻譯:
錯誤:將位元組碼檔案轉換為dex檔案出現錯誤
原因:異常為:com.android.dex.DexException,Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs這一個類出現了多個dex檔案的定義
經過一番搜尋,我的理解為:要使用到的一個類在專案中有多個librariy都存在。如果只是照這樣理解,就應該在那幾個librariy新增依賴時移除掉AccessibilityServiceInfoCompatIcs這個類,但是搜遍全網並沒有方法可以做到。
於是,我就在新增依賴時,移除點含有AccessibilityServiceInfoCompatIcs這個類的librariy,因為,一般這些包含同一個相同類的library功能肯定是相同的,不用擔心,移除了重複的library會導致專案出現錯誤。
具體方法:
1、Ctrl + N 查詢到專案中含有AccessibilityServiceInfoCompatIcs這個類的librariy (注意:最近又遇到一個library重複的問題,但是通過Ctrl + N根本找不到會有兩個或者更多的library包含了這一個檔案,所以,需要自己判斷引入重複的library)
可以看到一共有三個v4包含有這個類
2、對應檢視專案中含有AccessibilityServiceInfoCompatIcs類的librariy,找到External Libraries
3、移除重複librariy,只保留一個.
這時候想要移除重複包,應該是有兩種情況。
一種情況是,可以直接在libs資料夾中可以找到,那麼就直接移除即可。對於有的地方移除了會報錯,只需新增依賴那唯一一個保留下來的librariy即可。
另一種情況就是在libs資料夾中找不到,我這兒就是。就說明這個librariy是在別的librariy裡面。這比較頭疼,因為我也不知道我新增依賴的library裡面到底包含哪些library。
不過,我想到了一個笨方法:在給一個library新增依賴後,編譯完成後在External Library可以檢視到對應的library,那我就不斷去掉對應依賴的library,不斷的檢視External Library中library,如果在移除掉一個library後在External Library中我們需要移除的library(我這兒就是關注那2個v4包和support-compat包)也跟著沒了,那就說明該library中包含那個重複library(我這兒就是那2個v4包和support-compat包)。
我在不斷的註釋移除依賴庫,終於找到了第一個library,在移除掉cn.finalteam:galleryfinal:1.4.8.7這個庫之後,support-v4-23.1.1在External Library中消失了。其他幾個就不一一列舉了。