android - Gradle 排除或添加硬包含在库 classes.jar 中的 JAR 文件的引用

标签 android gradle android-gradle-plugin

我在项目中包含的库遇到了一些问题: 一开始它只是一个冲突的依赖关系问题,我通过排除解决了 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

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

  1. 如果我将 compile 'com.android.support:support-v4:18.0.+' 添加到 build.gradle 一个 多个 dex文件 在构建时抛出错误,因此库被引用两次。

    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 的库,它会在应用程序运行时抛出缺少依赖项错误。

所以我想知道是否有可能从构建中排除这个 .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'
}

最佳答案

尝试在根 build.gradle 中使用 resolutionStrategy ( API 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
        }
    })

}

关于android - Gradle 排除或添加硬包含在库 classes.jar 中的 JAR 文件的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27965690/

相关文章:

gradle - Flutter 应用程序无法在 Android 上运行

android - 如何为 crashlytics 定义 list 文件的路径

Android 套接字和异步任务

php - 在 Android 中解析 JSON 对象时出错

java - 在 android 中使用类 - 使用 Context 和 helper 类

java - Gradle 6/Java 11 "module not found"poi 和 poi-ooxml 错误,但 jars 存在

gradle - Gradle-IDE中无法识别编译的生成源

android - 将 Android Studio 2.3.3 更新到 3.0 后无法合并 dex

gradle - 具有 Gradle 属性的 Travis CI 环境变量

android - 为 AOSP 开发设置 C++ IDE 项目(无 NDK)