【问题标题】:Android Gradle ResolutionStrategy force stil downloads previous version of libAndroid Gradle ResolutionStrategy force 仍然会下载以前版本的 lib
【发布时间】:2018-10-10 16:27:22
【问题描述】:

我已强制在我的 gradle 中下载此版本的 jsr305,如下所示:

resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1'

我看到当我尝试编译 gradle 时正在解析版本:

尽管如此,我发现在 gradle 同步期间,旧版本(2.0.1 和 1.3.9)仍在下载:

我收到如下编译错误: com.android.build.api.transform.TransformException: Error while generating the main dex list. com.android.tools.r8.errors.CompilationError: Program type already present: javax.annotation.CheckForNull Program type already present: javax.annotation.CheckForNull

我进行了模块级别的搜索,发现CheckForNull.java 出现在多个地方 jsr305/2.0.1 jsr305/3.0.1 jsr305/1.3.9

我已尝试删除 ./gradle 文件夹并重新同步项目。我看到gradle仍然下载之前的jsr305版本。

这些是我在 gradle 中的依赖项:

implementation "com.facebook.react:react-native:${versions.reactNative}" implementation ("com.google.code.findbugs:annotations:3.0.1") { exclude group: 'net.jcip', module: 'jcip-annotations' }

我的问题:

  1. 为什么 Gradle 还在下载旧版本的 jsr305?
  2. 尽管 jsr305 版本已得到解决,但为什么 multidex 会抛出该错误?

创建了一个测试项目,该项目显示了即使在强制解决之后仍会下载旧 lib 版本的行为: https://github.com/vineyugave/scratchpad

您还可以在此处查看 gradle 扫描: https://scans.gradle.com/s/tzrobr2zuar3c/dependencies?dependencies=jsr&expandAll

【问题讨论】:

  • 能否添加来自build.gradle的依赖项?
  • 按要求在原始帖子中添加了依赖项。@MartinZeitler
  • ... 完整的 dependencies {}resolutionStrategy 而不仅仅是一个小小的 sn-p。否则这个问题是不可能正确回答的;最好的情况是因为“太宽泛”或“不清楚你在问什么”而关闭它。
  • 整个依赖列表由一些我无法发布的私有库和代码组成。你到底在寻找什么?
  • 寻找我可以简单地粘贴到 build.gradle 的代码,这足以重现该问题......那么我很容易回答这两个问题。

标签: java android gradle findbugs


【解决方案1】:

模块:firstlib 引用implementation "com.google.code.findbugs:jsr305:2.0.0", 可能应该是implementation "com.google.code.findbugs:jsr305:3.0.2" ...但另一个build.gradle 与问题不匹配,因为它缺少react-native

模块:appdependencies 应该看起来相似(只有更改):

dependencies {
    implementation "com.android.support:appcompat-v7:28.0.0"
    implementation "com.android.support:recyclerview-v7:28.0.0"
    implementation "com.android.support:support-v4:28.0.0"
    implementation ("com.facebook.react:react-native:0.20.1") {
        exclude group: "com.android.support", module: "recyclerview-v7"
        exclude group: "com.android.support", module: "support-v4"
    }
    //noinspection GradleDependency
    implementation "com.google.guava:guava:24.1-android"

}

configurations.all {
    resolutionStrategy.force "com.google.code.findbugs:jsr305:3.0.2"
    resolutionStrategy.force "com.google.guava:guava:24.1-android"
}
  • 它正在下载旧版本,因为它们需要从需要它们的依赖项中明确排除(如上所示)。可以用./gradlew app:dependencies 列出它们,然后用exclude 相应地列出它们。

  • 任务:app:transformClassesWithMultidexlistForDebug 失败,因为react-native 导致的支持库版本冲突(已在上面的示例中修复)。

  • 当将那些 jniLibsarmeabi 移动到 armeabi-v7a 时,它不会再抱怨缺少剥离工具了。但是,它们将不会再加载到arm64-v8a

【讨论】:

  • 有什么可能的解释为什么当我运行 Proguard 时它编译得很好?
猜你喜欢
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 2015-07-03
  • 2022-01-15
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多