You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android编译错误:Type重复定义,多模块依赖外部Jar的正确方式

同一Android项目多模块共享外部Jar的正确依赖方式

你的问题根源是两个模块重复引入了同一个Jar文件:MyLibrary和App各自libs目录下都存放了该Jar,且都通过implementation依赖。当App模块依赖MyLibrary时,MyLibrary中的Jar会被传递到App,再加上App自身的Jar,就造成了类的重复定义,触发「Type com..... is defined multiple times」错误。

下面是几种可行的解决方案,按推荐程度排序:

方案1:项目级统一存放Jar(最推荐)

  1. 在项目根目录创建一个libs文件夹,将共享的Jar文件放入其中。
  2. 修改项目根目录的build.gradle文件,配置全局仓库路径,让所有模块都能访问这个目录:
allprojects {
    repositories {
        google()
        mavenCentral()
        // 添加这一行,指定项目根目录的libs作为本地仓库
        flatDir {
            dirs rootProject.file("libs")
        }
    }
}
  1. 在MyLibrary模块的build.gradle中,使用api依赖该Jar(api会将依赖传递给上层的App模块,满足你暴露Jar中类作为参数的需求):
dependencies {
    // 单个Jar的写法
    api files('../libs/your-shared-library.jar')
    // 多个Jar的写法
    // api fileTree(dir: '../libs', include: ['*.jar'])
}
  1. App模块无需再单独依赖该Jar,只需依赖MyLibrary模块即可:
dependencies {
    implementation project(':MyLibrary')
    // 其他业务依赖...
}

方案2:仅在库模块存放Jar,App间接依赖

如果不想改动项目级配置,可以只保留MyLibrary模块libs目录下的Jar,删除App模块中的重复Jar:

  1. 移除App模块libs目录下的目标Jar文件。
  2. 在MyLibrary模块的build.gradle中使用api依赖自身libs中的Jar:
dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])
}
  1. App模块保持对MyLibrary的依赖,即可自动获取该Jar的依赖,无需额外配置。

方案3:本地Maven仓库管理(进阶场景)

如果你的项目有多个共享Jar需要版本管理,可以将Jar安装到本地Maven仓库,然后通过坐标引用:

  1. 执行命令将Jar安装到本地Maven(替换占位符为你的信息):
mvn install:install-file -Dfile=your-shared-library.jar -DgroupId=com.your.group -DartifactId=shared-lib -Dversion=1.0.0 -Dpackaging=jar
  1. 在MyLibrary和App模块的build.gradle中,通过Maven坐标依赖:
dependencies {
    // MyLibrary用api,让App能间接获取
    api 'com.your.group:shared-lib:1.0.0'
    // App模块如果需要直接用,也可以加,但因为依赖了MyLibrary,其实不需要重复加
    // implementation 'com.your.group:shared-lib:1.0.0'
}

Gradle会自动处理重复依赖,避免类重复定义问题。

关键注意点

  • 核心原则:同一外部Jar不要在多个模块中重复存放和依赖,通过依赖传递或统一管理来避免重复。
  • api vs implementation:当库模块的API需要暴露依赖中的类(比如作为方法参数、返回值),必须使用api;如果只是库内部使用该Jar,用implementation可以减少不必要的依赖传递,优化构建。

内容的提问来源于stack exchange,提问作者momone50

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:33:13