2013-05-25 14 views
34

Ich habe ein Projekt, das ein paar andere Bibliotheksprojekte (SlidingMenu, ActionBarSherlock) und beide von diesen verwendet verwenden, um die Android-Support-Bibliothek, beim Bau erhalte ich folgendes:Android gradle bauen und die Support-Bibliothek

UNEXPECTED TOP-LEVEL EXCEPTION: 
java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/LoaderManager; 
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
    at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
    at com.android.dx.command.dexer.Main.processClass(Main.java:490) 
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) 
    at com.android.dx.command.dexer.Main.access$400(Main.java:67) 
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398) 
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) 
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) 
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) 
    at com.android.dx.command.dexer.Main.processOne(Main.java:422) 
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333) 
    at com.android.dx.command.dexer.Main.run(Main.java:209) 
    at com.android.dx.command.dexer.Main.main(Main.java:174) 
    at com.android.dx.command.Main.main(Main.java:91) 

beiden Bibliotheksprojekte haben eine Abhängigkeit von Unterstützung lib:

dependencies { 
    compile files('libs/android-support-v4.jar') 
} 

Antwort

19

Bis die Support-Bibliothek ein Repository-Artefakt hat, können Sie es nicht in mehr als ein Bibliotheksprojekt einschließen. Sie können ein Bibliotheksprojekt erstellen, das nur die Unterstützungsbibliothek enthält und von dem alle anderen Bibliotheken abhängig sind.

Aktualisieren: this is now possible.

+0

Vielen Dank:) –

+1

Ich habe versucht, das zu tun, aber ich bekomme eine Reihe von 'Konnte nicht Element/Manifest/Anwendung finden.' Fehler. –

+1

Sollte die Bibliothek Projekt mit der Support-Bibliothek ein' android- sein Bibliotheksprojekt? –

1

Die ADT wird eine Ausnahme wie UNEXPECTED TOP-LEVEL EXCEPTION wenn Eclipse-classpath enthält mehr als eine Klasse mit den gleichen Namen/Paket/Dosen werfen. In diesem Fall trifft es auf mehr als eine Instanz der Klasse LoaderManager.

Lösung: Sie haben dieselbe jar Bibliothek zweimal enthalten. Überprüfen Sie Ihre Anwendung und alle referenzierten Android-Bibliotheken und stellen Sie sicher, dass Sie alle JAR-Dateien genau einmal enthalten.

13

Basiert in der Antwort von Xav, wenn Sie andere Module haben, die von android-support-v4.jar abhängen, erstellen Sie ein Bibliotheksprojekt, das die android-support-v4.jar enthält, und verweisen Sie dieses Projekt stattdessen die JAR-Datei .

ZB:

Fügen Sie ein Projekt mit dieser Struktur:

- android-support 
    - libs 
    - android-support-v4.jar 
    - AndroidManifest.xml 
    - build.gradle 

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.example.support.lib"> 

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"/> 

<application /> 

</manifest> 

build.gradle:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4.2' 
    } 
} 
apply plugin: 'android-library' 

dependencies { 
    compile files ("libs/android-support-v4.jar") 

} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 7 
    } 
    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
     } 

    } 
} 

erinnern, dies schließen Projekt in y unsere Projekte settings.gradle:

include ':android-support' 

nun, für jedes Projekt, das die Support-Bibliothek erfordert, statt

compile files ("libs/android-support-v4.jar") 

verwenden Sie die folgende Zeile:

compile project (':android-support') 
51

Dies ist jetzt möglich Herunterladen aus dem SDK-Manager und ersetzen

compile files("libs/android-support-v4.jar") 

mit

compile 'com.android.support:support-v4:13.0.0' 

hat dies für alle Projekte, die die Support-Bibliothek verwenden, durchgeführt werden. Das Android-Support-Repository wird automatisch vom Build-System zu Ihrer Liste der Repositorys hinzugefügt (Unsicher, welcher Teil hinzugefügt wird, Sie kennen noch nicht genug Gradle).

Source

+0

Muss ich mein Projekt erneut importieren, damit dies wirksam wird? Ich habe es versucht, aber es funktioniert nicht. – dannyroa

+0

@dannyroa Möglicherweise aber sollte die Schaltfläche "Import von Gradle" im Android Studio den Trick machen. Versuchen Sie einmal, über die Befehlszeile zu erstellen, und sehen Sie, ob das Problem dadurch behoben wird. – abhishekmukherg

+0

Das ist es, das mein Problem dank viel Partner behoben –

2

FYI, hatte ich das hinzufügen, um die Android-support-v4.jar in meinem gradle Build ausschließen, weil ich es als Artefakt hinzugefügt:

kompilieren filetree (dir: 'libs' , include: '* .jar', ausschließen: 'android-support-v4.jar')

Ich habe build.gradle mithilfe der Projekt-Exportfunktion in Eclipse's ADT-Plugin erstellt.

+0

Dies verursachte einen Haufen Compiler Fehler wegen des Fehlens der lib. –

+0

danke, du information geholfen mir – feelinglucky

Verwandte Themen