2014-12-02 3 views
13

Ho un progetto Android che utilizza gradle con un altro progetto come dipendenza. Il progetto Dipendenza ha un barattolo di libreria. Quando provo a compilare, la libreria del progetto viene compilata due volte e viene visualizzato l'errore: Errore: la classe n.nordicsemi.android.log.LogContract.Application è già stata aggiunta all'output. Si prega di rimuovere copie duplicate.Errore Android "è già stato aggiunto all'output" per jar in una dipendenza del progetto

Ecco la struttura delle cartelle con i file in questione:

>ProjectRoot 
    >dFULibrary 
    >libs 
     -nrf-logger-v2.0.jar 
    -build.gradle 
    >Logger 
    -build.gradle 

Questo è build.gradle per dFULibrary dipendenza:

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.1.0" 

    defaultConfig { 
     applicationId "no.nordicsemi.android.dfu" 
     minSdkVersion 18 
     targetSdkVersion 19 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:+' 
    compile files('libs/nrf-logger-v2.0.jar') 
} 

Questo è build.gradle per Logger (progetto principale):

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.14.4' 
    } 
} 

apply plugin: 'com.android.application' 

    android { 

    compileSdkVersion 20 
    buildToolsVersion '20' 

    sourceSets { 
     main { 
      java.srcDirs "src/main/java" 
      res.srcDirs "src/main/res" 
      assets.srcDirs = ['assets'] 
     } 
     androidTest.setRoot('tests') 
     androidTest.java.srcDirs = ['tests/src'] 

    } 
    dexOptions { 
     preDexLibraries = false 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:+' 
    compile project':dFULibrary') 
} 

no.nordicsemi.android.log.LogContract.Verrà trovata classe di nrf-logger-v2.0.jar Perché è incluso due volte e come posso assicurarmi che non lo faccia?

OLTRE

Ecco cosa ../gradlew dipendenze ritornano:

_debugApk - ## Internal use, do not manually configure ## 
\--- project :dFULibrary 

_debugCompile - ## Internal use, do not manually configure ## 
+--- project :dFULibrary 
\--- com.android.support:support-v4:+ -> 21.0.2 
    \--- com.android.support:support-annotations:21.0.2 

_releaseApk - ## Internal use, do not manually configure ## 
\--- project :dFULibrary 

_releaseCompile - ## Internal use, do not manually configure ## 
+--- project :dFULibrary 
\--- com.android.support:support-v4:+ -> 21.0.2 
    \--- com.android.support:support-annotations:21.0.2 

androidJacocoAgent - The Jacoco agent to use to get coverage data. 
\--- org.jacoco:org.jacoco.agent:0.7.1.201405082137 FAILED 

androidJacocoAnt - The Jacoco ant tasks to use to get execute Gradle tasks. 
\--- org.jacoco:org.jacoco.ant:0.7.1.201405082137 FAILED 


compile - Classpath for compiling the main sources. 
\--- project :dFULibrary 


provided - Classpath for only compiling the main sources. 
\--- com.android.support:support-v4:+ -> 21.0.2 
    \--- com.android.support:support-annotations:21.0.2 

ho rimosso tutte le linee che non avevano dipendenze.

EDIT # 2 uscita dal androidDependencies ./gradlew

:DFULibrary:androidDependencies 
debug 
\--- LOCAL: nrf-logger-v2.0.jar 

debugTest 
+--- LOCAL: nrf-logger-v2.0.jar 
\--- debug 
    \--- LOCAL: nrf-logger-v2.0.jar 

release 
\--- LOCAL: nrf-logger-v2.0.jar 
:nRFToolbox:androidDependencies 
debug 
+--- LOCAL: achartengine-1.1.0.jar 
\--- nrfToolbox:DFULibrary:unspecified 
    \--- LOCAL: nrf-logger-v2.0.jar 

debugTest 
No dependencies 

release 
+--- LOCAL: achartengine-1.1.0.jar 
\--- nrfToolbox:DFULibrary:unspecified 
    \--- LOCAL: nrf-logger-v2.0.jar 

BUILD SUCCESSFUL 
+0

Se si utilizza il 'dependencies' compito Gradle è possibile ottenere un po 'di indicazioni su ciò che sta succedendo. Puoi eseguirlo dalla riga di comando dalla directory di lavoro del tuo modulo principale (non dalla root del progetto) tramite '../gradlew dependnecies' –

+0

Non sicuro, se sarà d'aiuto, ma hai provato a cambiare i file compilati ('libs/nrf -logger-v2.0.jar ') ai file forniti (' libs/nrf-logger-v2.0.jar ') (Normalmente non dovrebbe includere questo jar in output) –

+0

Grazie per il tuo tempo! Purtroppo il file fornito() non ha modificato nulla. Ho aggiornato la domanda con l'output delle dipendenze gradlew – Stpn

risposta

7

Bingo, l'ho trovato.

Semplicemente interessante e ho cercato di trovare your project su Internet. E ho iniziato le mie indagini .... :).

Il problema è nascosto a nrf-logger-v2.0.jar. Contiene i file .java e .class. La soluzione è di rimuovere tutti i file .java da esso.

Ho fatto quel comandante totale. Passi:

  • rinomina nrf-logger-v2.0.jar in nrf-logger-v2.0.zip;
  • andare dentro e rimuovere tutto .java file;
  • rinominare il file in jar;
  • gradlew clean build o Build-Rebuild progetto a Android Studio
  • voilà
+0

grazie mille! Sarò in grado di testare questo domani e risponderà qui – Stpn

0

Si dovrebbe cercare di escludere la dipendenza duplicato come segue:

compile (project: ':dFULibrary'){ 
    exclude group: 'org.jacoco' 
} 

è necessario sostituire:

compile project':dFULibrary' 

con il codice dall'alto.

+0

Grazie. Ho provato ma non riesco ancora a correre, lo stesso errore. – Stpn