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

相关推荐

  1. flink源码分析 - jar提取和第三方依赖

    2024-03-20 15:26:04       45 阅读
  2. jar依赖相关

    2024-03-20 15:26:04       59 阅读
  3. Springboot如何判断pom.xml是否加载某个jar依赖

    2024-03-20 15:26:04       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 15:26:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 15:26:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 15:26:04       87 阅读
  4. Python语言-面向对象

    2024-03-20 15:26:04       96 阅读

热门阅读

  1. 我的自建博客之旅03之vuepress和Vitepress

    2024-03-20 15:26:04       42 阅读
  2. kill死锁(当你找不到sessionid的时候)

    2024-03-20 15:26:04       34 阅读
  3. 用python实现华容道小游戏

    2024-03-20 15:26:04       40 阅读
  4. Selenium WebDriver提供By.CSS_SELECTOR定位元素方法

    2024-03-20 15:26:04       43 阅读
  5. php Zend Opcache 配置

    2024-03-20 15:26:04       40 阅读
  6. oracle 误删数据 delete 恢复

    2024-03-20 15:26:04       43 阅读
  7. 【mysql】drop、delete与truncate的区别

    2024-03-20 15:26:04       46 阅读
  8. 长短期记忆神经网络关键名词解释

    2024-03-20 15:26:04       42 阅读