一、问题描述
Android 开发过程中,需要引入显示 PDF 文件的第三方库,然后在编译时出现库冲突报错:
Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.os.IResultReceiver found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.os.IResultReceiver$Stub found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.os.IResultReceiver$Stub$Proxy found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.os.ResultReceiver found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.os.ResultReceiver$1 found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.os.ResultReceiver$MyResultReceiver found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
Duplicate class android.support.v4.os.ResultReceiver$MyRunnable found in modules core-1.13.1.aar -> core-1.13.1-runtime (androidx.core:core:1.13.1) and support-compat-25.3.1.aar -> support-compat-25.3.1-runtime (com.android.support:support-compat:25.3.1)
二、问题分析
这个错误表明你的项目中同时包含了 Android Support Library 和 AndroidX 的依赖,导致了类冲突。从 Android 9.0(API 级别 28)开始,Android Support Library 已被废弃,Google 推荐使用 AndroidX 来替代。
三、解决方案
1、排除其中一个库
在添加第三方库依赖时,通过 exclude 方法将冲突的类进行排除。
implementation("com.github.barteksc:android-pdf-viewer:2.8.2") {
exclude("com.android.support", "support-compat")
}
-
方法分析:
这种方法可以编译通过,但是调用的第三方库方法在运行时会报错,提示找不到。 -
分析结果:
该方法无效。
2、配置 android.enableJetifier=true
android.enableJetifier 是一个 Gradle 配置选项,用于帮助 Android 项目从旧的 Support Library 迁移到 AndroidX。
(1)配置方法
在项目的 gradle.properties 文件中添加以下两行配置:
android.useAndroidX=true
android.enableJetifier=true
- android.useAndroidX=true 表示启用 AndroidX。
- android.enableJetifier=true 表示启用 Jetifier 工具,自动迁移项目中的第三方库依赖。
(2)作用
- 自动迁移依赖
Jetifier 会自动扫描项目中的第三方库依赖(如 .aar 或 .jar 文件),并将它们迁移到对应的 AndroidX 版本。 - 减少手动工作
它可以帮助开发者减少手动修改代码和依赖的工作量,确保项目在迁移到 AndroidX 后能够正常运行。
(3) 注意事项
-
性能影响
启用 android.enableJetifier 可能会增加构建时间,因为它需要在构建过程中对依赖进行转换。 -
检查依赖
启用后,建议检查项目中的依赖是否都成功迁移到了 AndroidX。如果某些第三方库没有对应的 AndroidX 版本,Jetifier 会自动禁用这些库的迁移。