2013-11-15 12 views
5

Ich benutze 'com.android.tools.build:gradle:0.6.+', um meine Android-Anwendung zu bauen.Beste Methode Android Gradle Abhängigkeiten zu verwalten

Es ist bekannt, dass Android dex nicht verschiedene Versionen derselben Bibliothek enthalten kann. Aber wie man mit der Situation umgeht, wenn Maven-Abhängigkeit verwendet werden soll, benötigt eine Bibliothek, die Sie bereits benutzen, aber nur eine andere Version. Beispiel. in build.gradle Datei folgenden Eigenschaften:

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

produziert Fehler:

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)... 

Dieser Fehler aus den folgenden Gründen geschieht: http://search.maven.org/remotecontent?filepath=com/github/chrisbanes/bitmapcache/library/2.3/library-2.3.pom erfordert com.google.android:support-v4

Und com.android.support:appcompat-v7:+ enthält bereits com.google.android:support-v4, was zur doppelten Aufnahme der gleichen Klassendateien führt.

ich jetzt bin auf der Suche nach Antworten wie: Verwenden Ant Laden Sie alle Abhängigkeiten in den Ordner ‚libs‘ und verwenden, um Dateien kompilieren (‚...‘) usw.

ändern olso Aufnahme um nicht Hilfe.

Ich bin auf der Suche nach einer robusten und praktischen Lösung. Wie kann man Maven-Abhängigkeiten nutzen und trotzdem frei von den oben beschriebenen Ausnahmen? Ideen? Wie reife Android-Entwickler das schaffen?

Antwort

10

Sie können 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' 
    } 
} 

Es ist opensourced Bibliothek, so dass Sie den Autor zu diesem Thema mitteilen sollte oder Pull-Anforderung auch erstellen.

2

Das Problem ist, dass Bitmapcache speziell r7 der Support-Bibliothek erfordert, anstatt jede r7 + -Version der Support-Bibliothek zuzulassen. Daher versucht appcompat, das neueste (r19) einzufügen, das mit dem erforderlichen r7 von Bitmapcache in Konflikt steht.

ActionBarSherlock zum Beispiel gibt keine Version der Support-Bibliothek gemäß its pom file an, die es ermöglicht, sie zusammen mit einer beliebigen Version der Support-Bibliothek zu verwenden.

Die einfachste Lösung besteht darin, Bitmapcache zu aktualisieren, um spätere Versionen der Supportbibliothek zu ermöglichen. Andernfalls müssen Sie die Abhängigkeit lokal als zusätzliches Modul in Ihrem Projekt herunterladen und verwalten.

+0

Also, wenn ich Sie richtig verstehe, betrachten Sie das beschriebene Problem als Fehler in maven repository und beheben maven POM wird das Problem beheben? –

+0

@ XP-Vit - es ist ein Problem mit dem POM eine bestimmte Version, ja. – ianhanniballake

Verwandte Themen