34 votes

Android gradle build et la bibliothèque de support

J'ai un projet qui utilise quelques autres projets de bibliothèque (SlidingMenu, ActionbarSherlock) et les deux utilisent la bibliothèque de support Android. Lors de la construction, j'obtiens les éléments suivants:

 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)
 

Les deux projets de bibliothèque dépendent du support lib:

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

51voto

abhishekmukherg Points 586

Ceci est maintenant possible en téléchargeant Android Support Repository partir du SDK Manager et en remplaçant

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

avec

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

Cela doit être fait pour tous les projets qui utilisent la bibliothèque de support. Le référentiel de support Android est automatiquement ajouté à votre liste de référentiels par le système de construction (vous ne savez pas quelle partie l'ajoute, mais vous ne connaissez pas encore suffisamment de niveaux).

La source

19voto

Xavier Ducrohet Points 10342

Tant que la bibliothèque de support n'a pas d'artefact de référentiel, vous ne pouvez pas l'inclure dans plus d'un projet de bibliothèque. Vous pouvez créer un projet de bibliothèque qui ne contient que la bibliothèque de support et que toutes les autres bibliothèques en dépendent.

Mise à jour : c'est maintenant possible .

13voto

rafaello Points 739

En fonction de la réponse de Xav, si vous avez d'autres modules qui dépend de la android-support-v4.jar, créer un projet de bibliothèque qui contient l'android-support-v4.jar et de faire référence à ce projet plutôt que le fichier jar.

E. g.:

Ajouter un projet avec cette structure:

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

construire.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'
        }

    }
}

n'oubliez pas d'inclure ce projet dans vos projets de paramètres.gradle:

include  ':android-support'

maintenant, pour chaque projet, ce qui nécessite le soutien de la bibliothèque, au lieu de

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

utilisez la ligne suivante:

compile project (':android-support')

2voto

kenyee Points 818

Pour votre information, j'ai dû ajouter ceci pour exclure l'androïde-support-v4.jar dans ma version de développement, car je l'ai ajouté en tant qu'artefact:

compiler fileTree (dir: 'libs', inclure: '* .jar', exclure: 'android-support-v4.jar')

J'ai créé le fichier build.gradle à l'aide de la fonctionnalité d'exportation de projet du plug-in ADT d'Eclipse.

1voto

Bhavesh Patadiya Points 11043

ADT lève une exception telle que UNEXPECTED TOP-LEVEL EXCEPTION si votre chemin d'accès aux classes Eclipse contient plus d'une classe du même nom / package / jars. Dans ce cas, il rencontre plus d'une instance de la classe LoaderManager .

Solution: La même bibliothèque de fichiers jar est incluse deux fois. Vérifiez votre application et toutes les bibliothèques Android référencées et assurez-vous que tous les fichiers jar sont inclus exactement une fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X