【问题标题】:Android: How to Resolve Transitive Dependency Conflicts with DeprecationsAndroid:如何通过弃用解决传递依赖冲突
【发布时间】:2019-08-26 15:50:39
【问题描述】:

我有一个已模块化的 Android 应用程序,以便它可以作为依赖项包含在其他项目中。

此模块依赖于 Dagger 和 Retrofit 等库。

我看到的是此模块的传递依赖项与父消费者应用程序中存在的先前版本冲突。

例如,如果父应用使用 Dagger 2.9,而模块使用 2.24,则 Gradle 将此依赖关系解析为 2.24,这会导致父应用因弃用或其他各种原因而发生重大更改。

我尝试在我的 Gradle 配置中排除这些冲突的依赖项,但这会导致模块中断。

我该如何解决这个问题?是否需要强制父应用更新依赖关系?

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    父母需要通过执行以下操作来强制使用正确的依赖项:

    implementation('com.google.dagger:dagger:2.x') {
        force = true
    }
    

    或者如果您使用的是api

    api ('com.google.dagger:dagger:2.x'){
         force = true
    }
    

    更多信息可以参考Gradle Docs

    【讨论】:

    • 所以这会强制模块依赖版本匹配父依赖?这会导致模块代码在尝试调用以前版本中不存在的某些功能时崩溃吗?
    • 这会强制应用使用定义的依赖。根据您的描述,模块依赖项迫使应用程序使用较低级别。如果是这种情况,那么您不必担心模块使用更高版本,因为除非有重大更改,否则模块将不会使用新功能。
    • Gradle 正在强制应用程序从 2.9 -> 2.24 解析,因为模块中存在较新的版本。我只是在编写模块以使用最新版本的 Dagger(与早期的 2.9 版本相比有重大变化)。我不知道这个模块的消费者将使用什么版本的 Dagger 或其他依赖项。在应用程序中强制使用 2.9 版会破坏模块。所以看来我被困住了。将应用依赖项更新到更高版本的唯一解决方案是什么?
    • 我会强制应用使用正在运行的版本 2.9,然后强制模块使用它的版本 2.24。
    • 有意思,两者都可以强制吗?我原以为这会导致两个库都被加载到内存中。
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2015-08-26
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    相关资源
    最近更新 更多