Android 编译报错:Duplicate class android.support.v4.app..... found in modules core-1.13.1.aar and ....

一、问题描述

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 会自动禁用这些库的迁移。

出现"duplicate class androidx.annotation.animres found in modules annotation-1.5."的错误提示,意味着在Android项目的依赖中,出现了重复的类。 这个错误通常是由于项目中引入的两个或多个库依赖中,都出现了相同的类名的冲突所引起的。 解决这个问题的方法有以下几种: 1. 通过检查项目的依赖关系,找到重复的库依赖并移除其中一个。可以在项目的build.gradle文件中查找引入的库依赖,然后逐个排查可能存在重复的库依赖。 例如,可能出现的情况是: dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'androidx.appcompat:appcompat:1.0.0' //其他依赖项 } 由于上述两个依赖库都包含了相同的类名androidx.annotation.animres,因此会出现冲突错误。需要选择其中一个库依赖,并将其移除,以消除冲突。 2. 更新库依赖版本。有时,重复类冲突是由于库依赖版本不一致造成的。可以尝试升级或降级某个库依赖的版本,以解决冲突。 3. 使用gradle的exclude功能,排除重复的类。可以在库依赖的声明中添加exclude操作,排除重复的类。 例如: implementation('com.android.support:appcompat-v7:28.0.0') { exclude group: 'androidx.annotation' } 在这种情况下,将排除appcompat-v7库中的androidx.annotation包,以解决冲突。 总之,通过检查项目的依赖关系,移除重复的库依赖、更新库依赖版本或使用gradle的exclude功能,可以解决"duplicate class"错误导致的冲突问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值