flutter插件报错

这个报错信息非常明确:
Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by plugin 'dev.flutter.flutter-gradle-plugin'

原因分析:
Gradle 7.0+ 引入了新的依赖管理方式。你的 settings.gradle.kts 中配置了 repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)(或者默认行为),这意味着所有仓库必须在 settings.gradle.kts 中定义
但是,Flutter 的 Gradle 插件(dev.flutter.flutter-gradle-plugin)在运行时尝试动态添加一个 Maven 仓库(通常是 https://storage.googleapis.com/download.flutter.io),这违反了“禁止在项目层级添加仓库”的规则,导致构建失败。

解决方案:
你需要修改 android/settings.gradle.kts,将仓库策略从“强制失败”改为“优先使用设置”,并显式添加 Flutter 所需的 Maven 仓库。

🛠️ 修复步骤

请打开 android/settings.gradle.kts,找到 dependencyResolutionManagement 代码块,按照以下方式修改:

修改前(可能是这样的):

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) // 这行导致了报错
    repositories {
        google()
        mavenCentral()
        // ...
    }
}

修改后(请替换为以下代码):

dependencyResolutionManagement {
    // 1. 将策略修改为 PREFER_SETTINGS
    // 这允许插件添加仓库,但优先使用这里配置的仓库
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    
    repositories {
        google()
        mavenCentral()
        
        // 2. 【关键】显式添加 Flutter 所需的 Maven 仓库
        // 这样 Flutter 插件就不需要动态去添加了,从而避免冲突
        maven { 
            url = uri("https://storage.googleapis.com/download.flutter.io") 
        }
        
        // 如果你有其他阿里云镜像配置,也可以加在这里
        // maven { url = uri("https://maven.aliyun.com/repository/google") }
    }
}

💡 为什么这样做有效?

  1. RepositoriesMode.PREFER_SETTINGS
    这个模式告诉 Gradle:“请在 settings.gradle.kts 中查找仓库配置。如果插件(如 Flutter 插件)试图在其他地方(如 build.gradle)添加仓库,请忽略它们或使用这里的配置,而不是抛出异常”。

  2. 预注册 Flutter 仓库
    Flutter 插件报错是因为它想添加 download.flutter.io 这个仓库。如果我们提前在 settings.gradle.kts 中把它加进去了,插件发现仓库已存在,就不会再尝试“违规”添加了。

🚀 后续操作

修改完成后,请执行以下操作以确保缓存被清除:

  1. 在 Android Studio 中点击 File -> Sync Project with Gradle Files
  2. 或者在终端运行:
    cd android
    ./gradlew clean
    cd ..
    flutter clean
    flutter pub get
    flutter run
    

如果修改后仍然报错,请检查是否还有其他地方(如 android/build.gradle)手动配置了 allprojects { repositories { ... } },如果有,请将其移除或合并到 settings.gradle.kts 中。

posted @ 2026-03-26 17:13  涣明  阅读(24)  评论(0)    收藏  举报