1. 程式人生 > >Android開發之包衝突解決

Android開發之包衝突解決

通過Maven中央庫新增第三方jar包的時候,出現了重複載入jar包的問題,解決辦法很簡單去掉一個不讓它去載入就OK了

一、錯誤

<span style="font-size:14px;">Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
	F:\zsl\sdk\build-tools\21.1.2\dx.bat --dex --output F:\zsl\Android\pro\RecipesDaquan\app\build\intermediates\dex\debug --input-list=F:\zsl\Android\pro\RecipesDaquan\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
	2
Output:
	UNEXPECTED TOP-LEVEL EXCEPTION:
	com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs;
		at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
		at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
		at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
		at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
		at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
		at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
		at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
		at com.android.dx.command.dexer.Main.run(Main.java:246)
		at com.android.dx.command.dexer.Main.main(Main.java:215)
		at com.android.dx.command.Main.main(Main.java:106)</span>

從上述錯誤中我們可以看到support_v4的包重複載入編譯了,我們看一下gradle-app檔案

\

<span style="font-size:14px;"><"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHByZSBjbGFzcz0="brush:java;">
dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:21.0.0' 
compile 'in.srain.cube:cube-sdk:1.0.42.1' 
compile files('libs/android-async-http-1.4.6.jar')
}
其中引入了v7的包後會自動去載入編譯一個v4:21.0.0包,而在in.srain.cube:cube-sdk:1.0.42.1庫中也有一個v4的包,
所以我們需要去掉一個</span>

看一下,libraries是否是我們所講的那樣,重複載入v4包

\

二、解決辦法

<span style="font-size:14px;">dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
    compile ('in.srain.cube:cube-sdk:1.0.42.1'){
        exclude module: 'support-v4'
    }
    compile files('libs/android-async-http-1.4.6.jar')
}</span>

去掉in.srain.cube:cube-sdk:1.0.42.1中的包不載入即可。

注意:如果SDK 或者module中載入v4包的方式是使用載入jar包的方式 ,那麼就在app的build.gradle使用下面的方式載入v4包

<span style="font-size:14px;">compile 'com.android.support:support-v4:24.2.0'</span>
然後刪除libs中的v4jar包就可以解決問題了