android - 模块 dagger-1.2.2.jar 和 dagger-2.22.jar 中的重复类

标签 android gradle dagger

将所有库升级到 androidx 和最新版本的 Firebase 库后

我收到了 2 个不同版本的 dagger java 文件的错误,错误消息中的链接不起作用。问题出现在步骤 :app:checkDebugDuplicateClasses .

我不直接在我的代码中使用 Dagger ,使用

./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.

最佳答案

最简单的方法是分析依赖关系。
解决方案 #1(仅限控制台)
在控制台中运行:

./gradlew -q dependencies app:dependencies
enter image description here
在控制台收到依赖列表后,转到Analyze部分(在 Solution #2 下方)。

解决方案 #2(生成 html)
1) 添加插件生成报告
转至 app/build.gradle (这与 compileSdkVersiontargetSdkVersionbuildTypes ),在顶部添加:
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
要扩展所有这些,您可以在开发人员控制台中使用这样的代码:
$('#dependencies').html(function(index, html) {
    return html.split('style="display: none;"')
               .join('style="display: block;"')
               .split('<h3 class="closed">')
               .join('<h3>')
});

分析
1) 查找旧依赖项
在您的情况下,您正在搜索短语 dagger:1 enter image description here
或者在控制台中:
enter image description here
2)排除依赖
在报告库名称中查找,只需 exclude group从这个进口。
在您的 build.gradle (您拥有所有依赖项)修改“有问题的”库,不包括 dagger v1。
例如:
implementation("some.old.library.using.dagger1:1.0.0") {
    exclude group: 'com.squareup.dagger', module: 'dagger'
}

关于android - 模块 dagger-1.2.2.jar 和 dagger-2.22.jar 中的重复类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58156070/

相关文章:

kotlin - 为什么 Dagger 需要提供我不想提供的实体?

java - 用于在 Android 中调试构建的替代应用程序子类

java - 使用 Dagger 注入(inject)登录 session

android - 如何在 Android 上保存/上传图像到服务器?

android - Eclipse - Android 库更新

android - 如何在 ActionBarSherlock 中实现多选和上下文 ActionMode?

gradle - 使用 maven-publish gradle 插件获取已发布工件的 uri

android - Gradle 访问同一文件中 `apply from: ' '` 的属性

java - 为什么 Gradle 在另一个 git 分支中创建文件?

Android从数据中获取联系人照片。电子邮件查询