Android Gradle ResolutionStrategy强制Stil下载早期版本的lib

时间:2018-10-10 16:27:23

标签: java android gradle findbugs

我不得不按照如下方式下载此版本的jsr305:

std::map::emplace

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

gradle resolution for module 2

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

enter image description here

我遇到如下编译错误: resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1' 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仍下载先前的jsr305版本。

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

./gradle

我的问题:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

模块dependencies的{​​{1}}应该看起来很相似(只有更改):

:app
  • 它正在下载旧版本,因为需要从需要它们的依赖项中明确排除它们(如上所示)。可以使用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-nativejniLibs移到armeabi时,它不会再抱怨缺少丢失的剥离工具。但是,它们将不会再加载到armeabi-v7a上。