Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件

  • 在 Android 开发中,构建项目时,出现如下错误信息

    Execution failed for task ':app:mergeDebugJavaResource'.

    A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
    2 files found with path 'META-INF/DEPENDENCIES' from inputs:
    - D:\Gradle\caches\transforms-3\c13541bae7b590bbb30dd4b2fef497d0\transformed\jetified-pdfbox-2.0.27.jar
    - D:\Gradle\caches\transforms-3\02007676df71727c0ea188624ff7de13\transformed\jetified-fontbox-2.0.27.jar
    Adding a packagingOptions block may help, please refer to
    https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/ResourcesPackagingOptions
    for more information

问题原因
  1. Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件

  2. META-INF/DEPENDENCIES 文件分别来自 jetified-pdfbox-2.0.27.jarjetified-fontbox-2.0.27.jar

  3. jetified-fontbox-2.0.27.jarjetified-pdfbox-2.0.27.jar 的子模块,它们都打包了自己的 META-INF/DEPENDENCIES 文件

处理策略
  1. 在主模块的 build.gradle 中添加如下内容,处理冲突的文件,其中,pickFirst 表示如果多个依赖包含同名文件,就选择第一个遇到的
groovy 复制代码
android {

    ...

    packagingOptions {
        pickFirst 'META-INF/DEPENDENCIES'
    }
}
  1. 或者,如果不需要这些元信息文件,使用 exclude 直接丢弃该文件
groovy 复制代码
android {

    ...

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }
}
相关推荐
誰能久伴不乏1 小时前
深入理解 C++ 多态:对象模型与底层机制解析
开发语言·c++·架构
Wang's Blog1 小时前
Go-Zero项目开发30: 微服务配置中心的设计与实现
开发语言·微服务·golang·go-zero
HH‘HH1 小时前
前端应用的离线暂停更新策略:原理、实现与最佳实践
开发语言·前端·php
程序员天天困2 小时前
Arthas Profiler 火焰图实战:CPU 热点在哪一目了然
java·jvm·后端
蜡台2 小时前
JS 浏览器 / App WebView 检测工具
开发语言·javascript·ecmascript
用户3126874877202 小时前
@Autowired 注入的是代理对象?Spring AOP 代理选择原理一次讲透
java·spring
@insist1232 小时前
信息系统管理工程师-任务、标准、EDM 过程与关键域
java·大数据·数据库
程序喵大人2 小时前
【C++进阶】STL容器与迭代器 - 04 list 和 forward_list 用节点换稳定位置
开发语言·c++·list
Coffeeee2 小时前
谷歌的一个优化建议,让我重新学了一遍Android里面如何正确处理位图
android·google·kotlin