依赖的多个 jar 中包含了相同类,编译提示 :app:checkDebugDuplicateClasses‘

问题描述

项目依赖了两个 jar 包,并且两个jar 包中包含了路径和名称完全相同的类。编译时报错:app:checkDebugDuplicateClasses'

问题分析

大思路就是排除掉

面向 CSDN 编程,网上各种 exclude 方式无效。

面向 Github Copilot 编程,

问:

build.gradle 中排除引入的 jar 包中的某个文件

答:

在 Gradle 的 build.gradle 文件中,你不能直接排除某个 JAR 包中的单个文件,因为 Gradle 的依赖管理系统是基于整个库或模块级别的,而不是文件级别。当你引入一个 JAR 包作为依赖时,Gradle 会将整个 JAR 包下载并添加到项目的类路径中,没有提供直接的机制来排除其中的单个文件。

如果你需要排除某个 JAR 包中的特定文件,你可能需要采取一些间接的方法:

使用 ProGuard 或 R8(Android 项目) : 如果你正在开发一个 Android 应用,你可以使用 ProGuard 或 R8(Android Gradle 插件 3.4.0+ 的默认代码收缩工具)来移除不需要的代码和文件。你可以在 ProGuard 或 R8 的配置文件中指定要移除的文件或类。

自定义依赖 : 如果可能的话,你可以尝试联系该 JAR 包的维护者,请求他们提供一个不包含该文件的版本,或者自己修改源代码并构建一个新的 JAR 包来使用。

使用其他库或替代方案 如果排除某个文件是因为它包含了你不想要的代码(例如,某些功能、日志、调试信息等),考虑查找一个不包含这些代码的替代库。

手动处理 : 如果上述方法都不可行,你可能需要手动下载 JAR 包,从中删除不需要的文件,然后将其添加到你的项目中。这样做的话,你将失去 Gradle 的自动依赖管理和版本控制的好处,因此需要谨慎处理。

使用 Gradle 任务在构建过程中处理 : 你可以编写一个 Gradle 任务,在构建过程中解压 JAR 包,删除不需要的文件,然后重新打包。这种方法比较复杂,需要编写和维护额外的 Gradle 脚本。

使用类加载器过滤 : 在某些情况下,你可以使用自定义的类加载器来过滤掉不需要的类。这种方法比较高级,需要对 Java 类加载机制有深入的了解。

请注意,排除 JAR 包中的单个文件可能会导致不可预测的行为,特别是如果该文件是库的必要组成部分。在采取任何行动之前,请确保你了解排除该文件可能带来的后果,并仔细测试你的应用程序以确保其正常工作。

问题解决

上面方式这么多,当然是怎么简单粗暴怎么来。选择手动处理。

处理方式见 CSDN 博客 - jar 包解压后重新打包

将重新打包后的 jar 包替换原来的,重新构建,成功。APK 运行亦 OK

相关推荐
是店小二呀2 小时前
【优选算法 | 字符串】字符串模拟题精选:思维+实现解析
android·c++·算法
奔跑吧 android3 小时前
【android bluetooth 协议分析 12】【A2DP详解 1】【车机侧蓝牙音乐免切源介绍】
android·bluetooth·bt·gd·a2dpsink·免切源·aosp14
飞猿_SIR4 小时前
Android Exoplayer多路不同时长音视频混合播放
android·音视频
前端懒猫4 小时前
android实现USB通讯
android
jiet_h5 小时前
Android锁
android
teacher伟大光荣且正确13 小时前
Qt Creator 配置 Android 编译环境
android·开发语言·qt
飞猿_SIR16 小时前
Android Exoplayer 实现多个音视频文件混合播放以及音轨切换
android·音视频
HumoChen9916 小时前
GZip+Base64压缩字符串在ios上解压报错问题解决(安卓、PC模拟器正常)
android·小程序·uniapp·base64·gzip
沙振宇20 小时前
【HarmonyOS】ArkTS开发应用的横竖屏切换
android·华为·harmonyos
橙子199110161 天前
Kotlin 中的作用域函数
android·开发语言·kotlin