2013-11-15 17 views
5

私はアンドロイドアプリケーションを構築するために 'com.android.tools.build:gradle:0.6.+'を使用しています。Android Gradleの依存関係を管理する最良の方法

Android dexには同じバージョンの異なるバージョンのライブラリを含めることはできません。しかし、あなたが使いたいMavenの依存関係を扱うには、すでに使用しているライブラリが必要ですが、別のバージョンが必要です。 例。 はbuild.gradleファイルに次のようた:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile 'com.github.chrisbanes.bitmapcache:library:2.3' 
} 

はエラーを生成します。

UNEXPECTED TOP-LEVEL EXCEPTION: 
    java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/FragmentManager$OnBackStackChangedListener; 
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
    at com.android.dx.dex.file.DexFile.add(DexFile.java:163)... 

このエラーは、次の理由で起こる: http://search.maven.org/remotecontent?filepath=com/github/chrisbanes/bitmapcache/library/2.3/library-2.3.pomはcom.google.android:support-v4

が必要ですcom.android.support:appcompat-v7:+にはすでにcom.google.android:support-v4が含まれているため、同じクラスファイルを二重に含むことになります。

私は今のような答えを探しています:「LIBS」フォルダにすべての依存関係をダウンロードして、使用 使用のAnt コンパイルしたファイル(「...」) など

変更包含注文オスロにはありません助けて。

私は堅牢で便利なソリューションを探しています。どのようにmavenの依存関係を使用して上記の例外から解放されますか?アイデア?どのように成熟したアンドロイドの開発者はこれを管理する?

答えて

10

あなたができるexclude transitive dependencies

dependencies { 
    compile 'com.android.support:appcompat-v7:19.0.0' 
    compile ("com.github.chrisbanes.bitmapcache:library:2.3"){ 
     exclude group: 'com.google.android', module: 'support-v4' 
    } 
} 

あなたがこの問題について作者に通知したり、同様のプルリクエストを作成する必要がありますので、それはopensourcedライブラリです。

2

問題は、サポートライブラリのr7 +バージョンを許可するのではなく、特にbitmapcacheがサポートライブラリのr7を必要とすることです。したがって、appcompatは、必要なr7のbitmapcacheと競合している最新の(r19)を取得しようとしています。

たとえば、ActionBarSherlockは、サポートライブラリの任意のバージョンと一緒に使用できるように、its pom fileのバージョンのサポートライブラリを指定していません。

最も簡単な解決策は、サポートライブラリの新しいバージョンを使用できるようにbitmapcacheを更新することです。それ以外の場合は、依存関係をプロジェクトの追加モジュールとしてローカルにダウンロードして管理する必要があります。

+0

私は正しくあなたを理解していると、問題をBaven in Mavenリポジトリとし、Maven POMを修正することで問題が解決されると考えていますか? –

+0

@ xp-vit - 特定のバージョンを必要とするPOMの問題です。 – ianhanniballake

関連する問題