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 固定路径。
相关推荐
吹什么轩5 小时前
MySQL:数据类型
android·adb
酷炫码神5 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
造火箭6 小时前
安卓不同类型自动化测试介绍
android
汪海游龙9 小时前
流式回复结尾的那一下闪:逐帧定位 Compose 聊天列表的三处布局跳动
android·性能优化·kotlin
2501_9159090611 小时前
Ipa Guard 防护上架,混淆、重签名和回归测试怎么做
android·ios·小程序·https·uni-app·iphone·webview
码点12 小时前
Android ANR 全解析 与 traces 分析实战
android
敲代码的瓦龙13 小时前
Jetpack?lifecycle!!!
android·kotlin
苦瓜花13 小时前
Hilt用使用及原理
android
深度学习040714 小时前
MySQL InnoDB Cluster 部署完整文档
android·mysql·adb
邪修king15 小时前
Re:Linux系统篇(三十七):进程间通信Chapter4:System V 共享内存深度解析:为什么它是最快的 IPC?
android·linux·运维