在 Dagger 1 项目中支持 Dagger 2 依赖项

Jak*_*eam 7 android gradle google-play-services dagger-2

这是我关于 Play Services Cast Framework 的问题的后续,其中解决方案似乎从 v17.0.0 更新到 v18.0.0。不幸的是,新版本依赖于 Dagger 2,而(大型且复杂的)项目是 Dagger 1。

我们目前正在使用:

api "com.google.android.gms:play-services-cast:17.0.0"
api "com.google.android.gms:play-services-cast-framework:17.0.0"
Run Code Online (Sandbox Code Playgroud)

将这些更新到 18.0.0 会导致:

> 1 exception was raised by workers:
java.lang.RuntimeException: Duplicate class dagger.Lazy found in modules dagger-1.2.2.jar (com.squareup.dagger:dagger:1.2.2) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.MembersInjector found in modules dagger-1.2.2.jar (com.squareup.dagger:dagger:1.2.2) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Module found in modules dagger-1.2.2.jar (com.squareup.dagger:dagger:1.2.2) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Provides found in modules dagger-1.2.2.jar (com.squareup.dagger:dagger:1.2.2) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我可以让库的新版本使用 Dagger 2,而应用程序的其余部分使用 Dagger 1。重新设计项目以使用 Dagger 2 是一项为期数周的工作。

有任何想法吗?


我已经尝试过的:

通过以下方式从演员框架中排除 Dagger 2:

api("com.google.android.gms:play-services-cast:18.0.0") {
    exclude group:'com.google.dagger', module:'dagger'
}
api("com.google.android.gms:play-services-cast-framework:18.0.0") {
    exclude group:'com.google.dagger', module:'dagger'
}
Run Code Online (Sandbox Code Playgroud)

结果不出所料:

   java.lang.NoClassDefFoundError: Failed resolution of: Ldagger/internal/Preconditions;
        at com.google.android.datatransport.runtime.DaggerTransportRuntimeComponent$Builder.setApplicationContext(com.google.android.datatransport:transport-runtime@@2.1.0:150)
Run Code Online (Sandbox Code Playgroud)

通过以下强制转换框架使用旧版本也会导致重复的类:

configurations.all {
    resolutionStrategy {
        preferProjectModules()
        dependencySubstitution {
            substitute(module("com.google.dagger:dagger:2.22")).with(module("com.squareup.dagger:dagger:1.2.2"))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可能没有帮助的相关问题: