1. 程式人生 > >打包錯誤Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define

打包錯誤Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define

昨天準備釋出一個版本,算好了時間,在解決完其他問題後預留兩個小時來上傳。在打包時遇見了問題,害的我加班三個小時。現記錄下問題,並整理下解決問題的思路。

打包出現問題時的截圖

打包出現問題是的截圖

圖片可能看不太清楚,錯誤如下:

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中消失了。其他幾個就不一一列舉了。

這裡寫圖片描述

在找到對應的library之後,就移除重複的庫。

在build.gradle中修改compile ‘cn.finalteam:galleryfinal:1.4.8.7’為格式如下

compile(‘cn.finalteam:galleryfinal:1.4.8.7’) {

exclude group: “com.android.support”, module: “support-v4”

}

cn.finalteam:galleryfinal:1.4.8.7是包含v4包的library,”support-v4”是需要移除的v4包