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

Android Studio无法导入依赖子模块的库:依赖解析失败

解决本地Maven仓库中子模块依赖无法解析的问题

我之前踩过一模一样的坑!你遇到的Could not find android-sdk-mylibrary:mysublibrary:unspecified错误,本质是本地Maven发布时,子模块的版本信息没明确配置,或者主库的pom文件没正确生成依赖关系,咱们一步步来搞定:

1. 先给子模块明确版本号

首先检查android-sdk-mylibrary:mysublibrary的build.gradle(如果是KTS就是build.gradle.kts),必须指定具体的版本号,绝对不能留空或者让它默认是unspecified:

// 在mysublibrary的build.gradle里
group = "com.yourcompany.libraries" // 换成你的实际groupId
version = "1.0.0" // 随便写个明确的版本,比如1.0.0

同时,主库android-sdk-mylibrary依赖子模块时,也要用这个明确的版本,别用相对路径或者默认的模糊版本:

// 在主库的build.gradle里
dependencies {
    implementation "com.yourcompany.libraries:mysublibrary:1.0.0"
}

2. 确保子模块和主库都正确发布到本地Maven

如果用的是maven-publish插件,得保证子模块单独发布,主库的pom能正确生成依赖项。

子模块的发布配置

给mysublibrary加上发布配置,确保它能被发布到本地Maven:

plugins {
    id 'com.android.library'
    id 'maven-publish'
}

// ... 其他Android配置(比如compileSdk、defaultConfig之类的) ...

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                groupId = "com.yourcompany.libraries"
                artifactId = "mysublibrary"
                version = "1.0.0" // 和上面的版本一致
            }
        }
        repositories {
            mavenLocal() // 发布到本地~/.m2仓库
        }
    }
}

主库的发布配置

主库这边要确保pom文件里的依赖项是正确的,别生成unspecified版本。我之前就是没加pom的手动生成逻辑,导致主库pom里的子模块依赖版本是空的:

plugins {
    id 'com.android.library'
    id 'maven-publish'
}

// ... 其他Android配置 ...

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                groupId = "com.yourcompany.libraries"
                artifactId = "android-sdk-mylibrary"
                version = "1.0.0"

                // 手动生成pom的依赖节点,避免版本丢失
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                    configurations.implementation.allDependencies.each { dep ->
                        // 只添加有明确group、name、version的依赖
                        if (dep.group != null && dep.name != null && dep.version != null) {
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', dep.group)
                            dependencyNode.appendNode('artifactId', dep.name)
                            dependencyNode.appendNode('version', dep.version)
                        }
                    }
                }
            }
        }
        repositories {
            mavenLocal()
        }
    }
}

3. 重新发布+清理缓存,避免旧文件干扰

按顺序执行以下操作,别搞反了:

  • 先发布子模块:在Android Studio的Gradle面板里,找到mysublibrary → Tasks → publishing → 双击publishToMavenLocal
  • 再发布主库:同样找到android-sdk-mylibrary → Tasks → publishing → 双击publishToMavenLocal
  • 清理本地Maven的旧缓存:删除~/.m2/repository/com/yourcompany/libraries这个目录(换成你的实际groupId路径),避免旧的错误pom文件残留
  • 清理Android Studio的Gradle缓存:点击顶部菜单File → Invalidate Caches... → 选Invalidate and Restart,彻底清掉旧的依赖缓存

4. 检查应用项目的依赖配置

最后,在你的应用项目的build.gradle里,确保添加了本地Maven仓库,并且依赖的版本正确:

repositories {
    mavenLocal() // 必须加这个,不然找不到本地发布的库
    google()
    mavenCentral()
}

dependencies {
    implementation "com.yourcompany.libraries:android-sdk-mylibrary:1.0.0"
}

这样操作完,应该就能解决那个找不到子模块的错误了。核心就是子模块必须有明确版本,发布时主库的pom要正确生成依赖关系,别让版本变成unspecified。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:21:33