Поддержка зависимости Dagger 2 в проекте Dagger 1 - PullRequest
2 голосов
/ 17 февраля 2020

Это продолжение моего вопроса о 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"

Обновление результатов до 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)

В идеале я бы позволил новой версии библиотеки использовать 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'
}

неудивительно, что это привело к:

   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)

Принуждение платформы приведения к использованию более старой версии с помощью следующего также привело к дублированию классов:

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

Потенциально связанные вопросы это не помогло:

...