1. 程式人生 > >Android Studio 引入Jar包,Jar包衝突問題總結

Android Studio 引入Jar包,Jar包衝突問題總結

在整合環信聊天SDK的時候,真是遇到了好多坑啊,真是白了少年頭,而Jar包衝突相信很多人都遇到過吧,
首先你必須熟悉幾個Android Studio導包的方式和特點:

方式1:直接引用下載網路jar包

compile ‘com.Android.support:support-v4:23.3.0

方式2:引用libs下所有jar包(最好不要用,自己一個一個引入比較好)

compile fileTree(dir: ‘libs’, include: [‘*.jar’])

方式3:引用一個jar

compile files(‘libs/fastjson-1.1.53.android
.jar’)

方式4:引用一個aar檔案,注意並不能像 方式2 那樣自動引用全部的aar,而需要對每個aar分別進行引用。

compile(name: ‘aar_file_name’, ext: ‘aar’)

方式5:引用庫型別的專案

compile project(‘:xxxsdk’)

方式6:僅僅在編譯時使用,但最終不會被編譯到apk或aar裡

provided files(‘libs/glide-3.7.0.jar’)

檢視一下報錯的資訊,大部分jar包衝突報錯資訊如下:

Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes

大部分人報錯原因為:
1: app/libs下有兩個兩個相同的jar包或者dependencies{}裡面compile了兩個相同庫

2:專案引入v4包和v7包,因為v7包裡面包含了v4包,所以導致衝突,這個可以用以下方法解決:

compile('com.android.support:appcompat-v7:23.3.0') {
            exclude module: 'support-v4'
        }

預設情況下v7中是包含V4包的,exclude 的意思就是從v7包中去除v4包這樣就可以解決衝突

3: 例如引入的module中有v4包,然後主module又有v4包,如果你不想刪除任何一個v4包,或者其他情況不能把其中的一jar包刪除,這時候就要注意到注意compile 和 provided 的區別了:

compile :jar包/依賴程式碼 在編譯的時候需要依賴,在執行的時候也需要

provided : jar包/依賴程式碼 僅在編譯的時候需要,但是在執行時不需要依賴

也就是說,你只要吧其中任意一個改為provided就可以了

注意沒效果的可以多clean,rebuild一下,或者刪除build目錄這裡寫圖片描述

網上還有幾個處理不同情況jar包衝突的方法,如:
在 allprojects{}裡面配置

 configurations {
      all*.exclude group: 'com.android.support', module: 'support-v4'
        all*.exclude group: 'com.android.support', module: 'support-annotations'
   }

表示在jar包裡面如果有包含 v4包或者annotations包,則從包中去除(這種方法我的沒解決)
jar包衝突情況基本就這樣子了,基本上能解決今後遇到的衝突問題了把,媽媽再也不用擔心我的jar包衝突問題了,0-0