Gradle排除或添加库类classes.jar中包含的JAR文件的引用

时间:2015-01-15 14:30:41

标签: android gradle android-gradle

我在项目中包含的库遇到了一些麻烦: 一开始,这只是一个冲突的依赖问题,我通过排除解决了 support-v4这是共同的共享模块。

问题是,在开发人员构建之前,其中一个lbsLib-release似乎是在根项目内部使用普通.jar文件构建的。

通过运行./gradlew app:dependencies我验证了构建图中没有引用依赖项。

我发现此support-v4已嵌入classes.jar位置 在: app/build/intermedites/exploded-aar/MyQaaAndroid/lbsLib-release/unspecified/classes.jar/ ,如下图所示:

enter image description here

我无法自己重建项目,因为它不是一个开源的lib,所以有两个问题:

  1. 如果我将compile 'com.android.support:support-v4:18.0.+'添加到build.gradle,则会在构建时抛出multiple dex file错误,因此会引用两次库。

    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. 如果删除所有需要support-v4的库,则会在应用程序运行时抛出缺少的依赖项错误。

  3. 所以我想知道是否可以从构建中排除这个.jar文件,或者让其他文件取决于lbsLib-release嵌入式support-v4 .jar

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

2 个答案:

答案 0 :(得分:4)

尝试在根resolutionStrategy使用build.gradleAPI reference)。

// 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
        }
    })

}

答案 1 :(得分:0)

Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat exclude module: 'support-v4'

例如

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}