当前位置:   article > 正文

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

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号