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

相关推荐
xingxiliang7 小时前
深入浅出 Android CTS 视频测试:从环境搭建、用例设计到底层通信原理
android·音视频
我命由我123457 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
雨白9 小时前
深入理解 Kotlin 协程 (八):拾遗补阙,探秘官方框架的调度细节与取消闭环
android·kotlin
海天鹰10 小时前
PHP上传文件
android·开发语言·php
2501_9159184111 小时前
详解iOS App上架至App Store的全流程步骤与注意事项
android·macos·ios·小程序·uni-app·cocoa·iphone
码农coding13 小时前
android12 SystemUI之StatusBar(二)
android
Lesile15 小时前
Interview#1 历史演进:MVC · MVP · MVVM · MVI架构详解
android·android jetpack
杉氧15 小时前
Flutter 像素级还原实战:用 CustomPaint 与 Bezier 曲线手绘精致图针
android·前端·flutter
我命由我1234518 小时前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
Coffeeee18 小时前
谷歌的一个优化建议,让我重新学了一遍Android里面如何正确处理位图
android·google·kotlin