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