java - Android Gradle ResolutionStrategy force 仍然会下载以前版本的 lib

标签 java android gradle findbugs

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

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

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

gradle resolution for module 2

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

enter image description here

我收到如下编译错误: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.CheckForNullProgram 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' }
我的问题:
  • 为什么 Gradle 还在下载旧版本的 jsr305 ?
  • 尽管 jsr305 版本得到解决,为什么 multidex 会抛出该错误?

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

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

    最佳答案

    模块 :firstlib引用资料 implementation "com.google.code.findbugs:jsr305:2.0.0" ,
    应该是 implementation "com.google.code.findbugs:jsr305:3.0.2" ...但另一个 build.gradle与问题不匹配,因为它缺少 react-native .
    dependencies模块 :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-native 引起的支持库版本冲突(已在上面的示例中修复)。
  • 当移动那些 jniLibs来自 armeabi进入 armeabi-v7a ,它不会再提示缺少剥离工具了。但是,它们不会被加载到 arm64-v8a了。
  • 关于java - Android Gradle ResolutionStrategy force 仍然会下载以前版本的 lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52744845/

    相关文章:

    android - gradlew 是否有任何自动完成功能?

    java - 无法使用 Hibernate 检索 Oracle 中最后插入的行的 id

    java - 使用 TokensRegex 开发基于规则的 NER 并根据上下文单词对实体进行分类

    java - 如何避免并行运行 Surefire 测试

    android - 如何在android studio中更新Gradle文件

    android - 如何在 android 中模拟 Kotlin 对象?

    java - 如何检查Android EditText整数值?

    Android - 数据库类结构 OOP

    android - 找不到方法 'org.gradle.api.artifacts.result.ComponentSelectionReason.getDescription()Ljava/lang/String;'

    java - H2 数据库总是损坏