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

Gradle内部依赖缺失:Android库发布后应用构建失败

解决Android多模块库发布后依赖缺失问题

问题背景

多模块Gradle项目结构:

├── legacy
│   ├── src
│   │   └──...
│   └── build.gradle
├── data
│   ├── src
│   │   └──...
│   └── build.gradle
├── feature
│   ├── src
│   │   └──...
│   └── build.gradle
└── settings.gradle
  • data依赖legacy(implementation project(":legacy"))
  • feature依赖data和legacy(implementation声明)
  • 仅feature对外发布,data/legacy为内部未发布模块
  • 应用依赖发布后的feature AAR时,报错无法找到data/legacy模块

核心原因

Android Library默认不会将依赖的本地模块代码打包进AAR,只会在POM文件中保留依赖声明。当应用依赖发布后的feature时,Gradle会尝试去仓库查找未发布的data/legacy,导致依赖解析失败。

解决方案:将内部模块代码打包进feature的AAR

使用Gradle Shadow插件,把data和legacy的代码合并到feature的AAR中,无需对外发布这两个内部模块。

步骤1:引入Shadow插件

在项目根目录的settings.gradle中配置插件仓库:

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

在feature/build.gradle中应用Shadow插件:

plugins {
    id 'com.android.library'
    id 'com.github.johnrengelman.shadow' version '7.1.2' // 可替换为最新稳定版
}

步骤2:配置Shadow打包规则

在feature/build.gradle中添加Shadow配置,指定要合并的内部模块代码:

shadowJar {
    // 导入data和legacy模块的编译输出
    from project(':data').sourceSets.main.output
    from project(':legacy').sourceSets.main.output
    // 处理重复类(根据实际情况调整策略)
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
}

// 确保打包AAR时包含Shadow生成的合并代码
tasks.withType(com.android.build.gradle.tasks.PackageLibrary) {
    dependsOn shadowJar
    from zipTree(shadowJar.archiveFile)
}

步骤3:调整feature的依赖声明

将feature对data/legacy的依赖改为compileOnly,避免传递未发布模块的依赖声明:

// feature/build.gradle
compileOnly project(':legacy')
compileOnly project(':data')

验证

发布feature模块后,解压生成的AAR文件,检查classes.jar中是否包含data和legacy模块的类文件,确认代码已被打包进去。

为什么之前的尝试无效

  • api/implementation:仅传递依赖声明,不会打包代码,导致应用仍需查找未发布的内部模块
  • compileOnly:仅在编译时提供依赖,运行时无对应类文件,引发类找不到错误
  • 本地依赖替换:仅能在本地开发环境生效,无法在团队中统一推行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:50:46