Flutter 项目本地 Maven 引入 AAR 找不到?一次 Gradle 路径问题排查

Flutter 本地 Maven 引入 AAR,为什么 settings.gradle.kts 里配置了却不生效?

在 Flutter Android 项目里接入本地 AAR 时,我一开始把本地 Maven 仓库配置写在了 settings.gradle.kts:

scss 复制代码
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven { url = uri("local-maven") }
    }
}

依赖写在 android/app/build.gradle.kts:

scss 复制代码
dependencies {
    implementation("com.example.sdk:example-sdk:1.0.0")
}

本地 Maven 目录结构也是正确的:

bash 复制代码
android/local-maven/com/example/sdk/example-sdk/1.0.0/example-sdk-1.0.0.aar

但 Gradle 仍然提示找不到:

makefile 复制代码
com.example.sdk:example-sdk:1.0.0

原因

问题不在 AAR,也不在 Maven 目录结构,而是 Flutter Android 项目里 project 级 repositories 覆盖/影响了 settings 里的 repositories。

Gradle 里有两个常见仓库配置位置:

bash 复制代码
settings.gradle.kts
android/build.gradle.kts

settings.gradle.kts 里的:

markdown 复制代码
dependencyResolutionManagement {
    repositories { ... }
}

理论上可以统一管理依赖仓库。

但在 Flutter 项目里,android/build.gradle.kts 通常还会有:

scss 复制代码
allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

同时 Flutter Gradle Plugin 自己也可能给 project 动态添加仓库。

在这种情况下,project 级 repositories 会参与依赖解析。默认模式下,如果 project 自己声明了 repositories,settings.gradle.kts 里的仓库配置就不一定是最终使用的那一套。

所以你只在 settings.gradle.kts 里加本地 Maven,有时不会生效。

正确做法

把本地 Maven 仓库加到 android/build.gradle.kts 的 allprojects.repositories 里:

scss 复制代码
allprojects {
    repositories {
        maven {
            url = rootProject.layout.projectDirectory
                .dir("local-maven")
                .asFile
                .toURI()
        }

        google()
        mavenCentral()
    }
}

这样 :app 模块和其他 Android 子模块都能看到这个本地 Maven 仓库。

为什么不要直接写相对路径?

不要这样写:

ini 复制代码
maven { url = uri("local-maven") }

因为在多模块项目里,相对路径可能会按当前模块目录解析。

例如在 :app 模块中,它可能会去找:

bash 复制代码
android/app/local-maven

但真实目录是:

bash 复制代码
android/local-maven

所以更稳的是用:

bash 复制代码
rootProject.layout.projectDirectory.dir("local-maven")

它永远从 Android 根工程目录开始找。

总结

settings.gradle.kts 里配置本地 Maven 不生效,主要是因为 Flutter Android 项目里 project 级 repositories 也参与了依赖解析,最终没有使用到 settings 里的仓库配置。

所以更稳的方式是在 android/build.gradle.kts 里配置:

scss 复制代码
allprojects {
    repositories {
        maven {
            url = rootProject.layout.projectDirectory
                .dir("local-maven")
                .asFile
                .toURI()
        }
        google()
        mavenCentral()
    }
}

一句话总结:

bash 复制代码
Flutter 项目里,本地 Maven 仓库最好配置到 android/build.gradle.kts 的 allprojects.repositories,并且用 rootProject 固定路径。
相关推荐
火柴就是我1 小时前
Android 打包报错 25.0.3
android·前端
码上有光2 小时前
Linux进程通信——共享内存、消息队列和信号量
android·linux·运维·共享内存·通信
Android打工仔6 小时前
Kotlin 协程源码解析:DispatchedContinuation 里的 Dispatcher 从哪里来?
android·kotlin
打工仔折腾 AI6 小时前
从BPE到SentencePiece:Transformer分词原理与Python实战对比
android·人工智能·python·深度学习·langchain·transformer·ai agent 实战
Dovis(誓平步青云)7 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
恋猫de小郭10 小时前
KMP 又改了编译流程, Separate Compilation 禁止了 `commonMain` 的依赖穿透
android·前端·flutter
执明wa11 小时前
Android RecyclerView 实战:点击频道栏切换对应内容
android·开发语言·windows·microsoft·android studio
新鲜势力呀11 小时前
PHP 定时数据同步实战:从第三方接口超时到异步同步 + 增量更新架构优化全过程
android
星间都市山脉13 小时前
RecoveryUI 圆角屏安全边距配置及代码调用链
android·java·linux·windows·ubuntu