在模块dagger-1.2.2.jar和dagger-2.22.jar中出现重复的类。

问题描述 投票:3回答:1

在将所有库升级到androidx并升级到最新版本的Firebase库后。

我在使用2个不同版本的dagger java文件时出现了错误,错误信息中的链接不起作用。问题发生在以下步骤 :app:checkDebugDuplicateClasses.

我在代码中没有直接使用匕首,而是使用了

./gradlew app:dependencies

我发现 com.google.android.gms:play-services-cast-framework:17.1.0 用途 com.google.dagger:dagger:2.22但没有任何信息 1.2.2.

Cause 1: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class dagger.Lazy found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.MembersInjector found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Module found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Provides found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class javax.inject.Inject found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Named found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Provider found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Qualifier found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Scope found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Singleton found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)

Go to the documentation to learn how to Fix dependency resolution errors.
android gradle dagger
1个回答
3
投票

最简单的方法是分析依赖关系。

解决方案 #1 (仅控制台)

在控制台中运行。

./gradlew -q dependencies app:dependencies

enter image description here

在控制台接收到依赖列表后,进入到... Analyze 部分 Solution #2).


解决方案#2 (生成html)

1) 添加插件生成报表

在到 app/build.gradle (这与 compileSdkVersion, targetSdkVersionbuildTypes),在顶部添加。

apply plugin: 'project-report'

靠近其中一个。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

靠近其中的一个:

2)生成报表

就从控制台运行。

 ./gradlew htmlDependencyReport

或者从Android Studio运行:

Tasks > other > htmlDependencyReport

enter image description here

3) 公开报告

在控制台中,你会发现URL。

./gradlew htmlDependencyReport


> Task :app:htmlDependencyReport
See the report at: file:///Users/user_name/your_path/project_name/app/build/reports/project/dependencies/index.html

然后进入 project ':app'

enter image description here

4)分析报告

点击每个位置后都有依赖关系。enter image description here

要展开所有这些,你可以在develper控制台中输入这样的代码。

$('#dependencies').html(function(index, html) {
    return html.split('style="display: none;"')
               .join('style="display: block;"')
               .split('<h3 class="closed">')
               .join('<h3>')
});

ANALYZE

1)寻找旧的依赖关系

在您的案例中,您搜索的是短语 dagger:1

enter image description here

或在控制台中。

enter image description here

2) Exlude dependencies

在报告中找到库名,然后只需 exclude group 从这个导入。

在您的 build.gradle (你有所有的依赖关系)修改 "有问题 "的库,不包括dagger v1。

比如说:1.修改 "有问题 "的库,不包括dagger v1。

implementation("some.old.library.using.dagger1:1.0.0") {
    exclude group: 'com.squareup.dagger', module: 'dagger'
}
© www.soinside.com 2019 - 2024. All rights reserved.