16

我正在使用新的Android Studio,我正在尋找一種方法來使用多個項目中的支持​​庫。基本上我有一個項目,使用ActionBarSherlock這個項目需要支持庫。所以我添加了一個參考,如this question在Android項目和庫中使用支持庫(Android Studio)

現在我有問題,我的主項目也使用支持庫,所以我有它在某種程度上包括兩次。如果我從兩個項目中的一個項目中刪除庫,我會得到一些支持庫相關類的錯誤,這對我來說很清楚,但如果我在兩個項目中都有參考,我將面臨以下錯誤:

Android Dex: [ProjectName] UNEXPECTED TOP-LEVEL EXCEPTION: 
Android Dex: [ProjectName] java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ShareCompat$ShareCompatImplJB; 
Android Dex: [ProjectName] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
Android Dex: [ProjectName] at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
Android Dex: [ProjectName] at com.android.dx.command.dexer.Main.processClass(Main.java:490) 
Android Dex: [ProjectName] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) 
... 

任何想法如何解決這個問題?

+0

我猜你必須刪除從旅遊項目的jar和嘗試。 – Raghunandan

+0

@Raghunandan你注意到了這一點:*「[...]如果我從兩個項目中刪除庫文件,我會得到一些支持庫相關的類未知的錯誤[...]」* – rekire

回答

28

我通過進入File > Project Structure...並選擇Modules來解決這個問題,然後點擊模塊的Dependencies選項卡。然後在圖書館旁邊,我將範圍從Compile更改爲Provided

這意味着該模塊仍然可以使用它,但它沒有達到編譯,因爲我假設您已經在您的主項目中使用了該JAR。

希望這會有所幫助!

+0

偉大的答案 - 只是工作:) – Ron

+1

有沒有一種方法可以在build.gradle中手動指定? – nhaarman

+4

在Android Studio 0.4.0中不再提供選項。有什麼方法可以在Gradle文件中指定這種行爲嗎? – Greg

0

這個用法是否是Eclipse項目?如果是這樣,嘗試進入Eclipse,清理項目,退出,在IntelliJ重建。我相信這是一個國家問題,而不是配置問題。

+0

我需要一個小時修復一個有線的eclipse錯誤。但是這不起作用。 – rekire

1

我有類似的問題發生在我身上。在項目選項卡/ bar/whatever(在左邊,所以你可以看到項目樹)中選擇actionbarsherlock。打到F4打開模塊設置。
確保您在012行動版本和您的項目中使用不會使用兩次相同的依賴項
此外,請確保您使用的是支持庫的版本,位於android-studio sdk(​​)。

最後,如果你像我一樣,請確保你沒有意外使actionbarsherlock依賴於自身,從而以兩種方式加載庫! >。 <

看看這些圖片顯示我的模塊喜好: http://imgur.com/a/JupWp Actionbar Sherlock enter image description here

而且,不要忘記,以確保libs沒有任何隱藏相同的人的!

0

而是進口的Android支持庫的罐子,我改變了庫(在我的情況的Facebook SDK)的依賴關係的build.gradle到:

dependencies { 
    compile 'com.android.support:support-v4:13.0.0' 
}