2015-01-15 10 views
6

Ich bin in einige Probleme mit einer Bibliothek in meinem Projekt enthalten: Am Anfang war es nur ein widersprüchliches Abhängigkeitsproblem, das ich durch Ausschließen gelöst support-v4 Das ist das gemeinsam genutzte Modul.Gradle Ausschließen oder hinzufügen Verweis für JAR-Datei schwer innerhalb der Bibliothek enthalten classes.jar

Das Problem ist, dass eine dieser lbsLib-release mit einer einfachen .jar Datei innerhalb des Root-Projekts vor dem Entwickler gebaut worden zu sein scheint.

Durch Ausführen von ./gradlew app:dependencies habe ich überprüft, dass die Abhängigkeit im Build-Diagramm nicht referenziert wird.

Und ich fand diese support-v4 in die classes.jar eingebettet befindet an: app/build/intermedites/exploded-aar/MyQaaAndroid/lbsLib-release/unspecified/classes.jar/ wie man auf dem Bild unten sehen können:

enter image description here

Ich kann das Projekt nicht selbst wieder aufzubauen, weil es nicht ist eine Open-Source-lib, so gibt es zwei Probleme:

  1. Wenn ichhinzufügenzu build.gradle Ein multiple dex file Fehler wird zum Zeitpunkt der Erstellung ausgelöst, sodass die Bibliothek zweimal referenziert wird.

    UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/app/BackStackState; 
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) 
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) 
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) 
    at com.android.dx.command.dexer.Main.run(Main.java:246) 
    at com.android.dx.command.dexer.Main.main(Main.java:215) 
    at com.android.dx.command.Main.main(Main.java:106) 
    

    `

  2. Wenn ich alle Libs entfernen, die support-v4 es erfordern einen fehlenden Abhängigkeiten Fehler bei der Anwendung Runtime löst.

Also ich würde gerne wissen, ob es möglich ist, diese .jar Datei aus dem Build ausschließen oder die anderen Libs auf den support-v4.jar eingebettet lbsLib-release abhängig zu machen.

compile (project(':lbsLib-release')) { 
    exclude module: 'support-v4' 
} 

compile ('com.sothree.slidinguppanel:library:2.0.4'){ 
    exclude module: 'support-v4' 
} 

compile('com.google.android.gms:play-services:6.5.87') { 
    exclude module: 'support-v4' 
} 
+0

Wenn Sie mit lbsLib-Release über eine 'kompilieren project' Richtlinie dann nicht haben Sie den Quellcode es? –

+0

Nein, es ist eine * .aar-Datei –

+0

Versuchen Sie, das 'exclude module' -Bit in der build.digle des Submoduls, wo Sie die .aar, und nicht in der obersten Ebene, wo Sie das Submodul enthalten. –

Antwort

4

Try build.gradleresolutionStrategy (API reference) an der Wurzel zu verwenden.

// Top-level build file where you can add configuration options common to all sub-projects/modules. 
buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.0.0' 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
    configurations.all((Closure) { 
     resolutionStrategy { 
      force 'com.android.support:support-v4:21.0.2' // your version of support library 
     } 
    }) 

} 
Verwandte Themen