依赖的多个 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

相关推荐
jzlhll1234 小时前
android MVC/MVP/MVVM/MVI架构发展历程和编写范式
android·架构
安卓开发者4 小时前
Android ConstraintLayout 使用详解
android
CV资深专家7 小时前
Android 基础入门学习目录(持续更新)
android
侧耳4297 小时前
android添加i2c-tools工具
android
我是好小孩11 小时前
Android-侧边导航栏的使用
android·gitee
吗喽对你问好11 小时前
安卓基础布局核心知识点整理
android·gitee
安卓开发者11 小时前
Android Material Components 全面解析:打造现代化 Material Design 应用
android
教程分享大师11 小时前
带root权限_中国移动创维DT541_S905L3融合机器改机顶盒刷机教程 当贝纯净版安卓9.0系统线刷包 刷机包
android
wuk99811 小时前
Android:UI:Drawable:View/ImageView与Drawable
android·ui
whysqwhw13 小时前
Kotlin 中作用域函数 let、with、run、also、apply 的核心使用指南
android