flutter 3.10.8 在android模拟器上启动报错Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by settings file 'settings.gradle.kts'

1. 问题

博客园已经两年没更新了,有点小小的懈怠,可能年龄大了,有点力不从心了,也对技术没那么执着了,只想退休下班,技术只当做谋生的工具,谈不上多喜欢了,没事锻炼锻炼身体,自己做做饭,把自己照顾好足以.2026年已经30了,还有5年就35岁了,离"毕业"也没几年了,和审判一样.工作上也经历了许多事,心态不一样了.

回到正题,之前按照flutter文档重新部署了3.10.8版本的flutter,我以为flutter会沉寂下去,没想到还一直更新,公司最近要做小程序,也可能会做移动端,趁着这段时间重新温习温习flutter,万一要开发移动端用得上.

本来是打算好好钻研java,进大厂,但是现在也没那种心了,好好工作,生活,能养活自己就好.现在前端,java,实施,服务器运维,打包,部署,移动端,小程序都有接触,已经成为了大家经常说的只有广度没有深度的一类人,照这样下去一辈子都去不了大厂,不过也认命了,随遇而安吧.工资虽然不多,但是小有盈余,也算是知足常乐,没办法中的办法,每个人人生轨迹不一样.

按照官方文档操作了一遍,用android studio 的 模拟器启动后一直报这个错误,百度了好久没找到答案,最终解决了,希望能给其他人帮助.

FAILURE: Build failed with an exception.

* Where:
Settings file 'D:\Develop\workspace\flutter\study01\flutter_application_1\android\settings.gradle.kts' line: 20

* What went wrong:
Error resolving plugin [id: 'dev.flutter.flutter-plugin-loader', version: '1.0.0']
> Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by settings file 'settings.gradle.kts'

2. 解决

调整flutter安装路径下的settings.gradle.kts文件,比如:  D:\Develop\tool\flutter\packages\flutter_tools\gradle\settings.gradle.kts

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) //flutter下载后默认是
//FAIL_ON_PROJECT_REPOS,需要改成PREFER_SETTINGS
    repositories {
         google()
        mavenCentral()
    }
}

然后把项目中的仓库都改成阿里云仓库就可以

pluginManagement {
    val flutterSdkPath =
        run {
            val properties = java.util.Properties()
            file("local.properties").inputStream().use { properties.load(it) }
            val flutterSdkPath = properties.getProperty("flutter.sdk")
            require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
            flutterSdkPath
        }

    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

    repositories {
        maven {
            url = uri("https://maven.aliyun.com/repository/public/")
        }
        maven {
            url = uri("https://maven.aliyun.com/repository/public")
        }
        maven {
            url = uri("https://maven.aliyun.com/repository/gradle-plugin")
        }
        maven {
            url = uri("https://maven.aliyun.com/repository/google")
        }
        maven {
            url = uri("https://maven.aliyun.com/repository/central")
        }
    }
}

plugins {
    id("dev.flutter.flutter-plugin-loader") version "1.0.0"
    id("com.android.application") version "8.11.1" apply false
    id("org.jetbrains.kotlin.android") version "2.2.20" apply false
}

include(":app")

看下gradle官方文档解释

image

 

大概意思就是说

PREFER_PROJECT:项目的仓库配置会覆盖配置文件settings.gradle(.kts)的仓库配置

PREFER_SETTINGS: 配置文件settings.gradle(.kts)的仓库配置会覆盖项目的仓库配置

FAIL_ON_PROJECT_REPOS: 写在项目中的仓库配置会报错,必须使用settings.gradle(.kts)的配置

所以flutter下载后默认是FAIL_ON_PROJECT_REPOS,启动就会报错,改成PREFER_SETTINGS就正常了.

可能有人会疑惑,项目中也有settings.gradle.kts,配置文件settings.gradle和项目的仓库配置怎么区分,其实flutter项目中有一段

includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

这个会在构建的时候同时构建flutter中的gradle,flutter中的gradle也有settings.gradle.kts,如果不修改repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)的配置,在构建flutter的gradle就会报错,如果改成PREFER_PROJECT,会从环境变量GRADLE_USER_HOME配置的地址中的配置文件加载仓库地址,也同样不会加载flutter项目中的地址.

总结: 

PREFER_PROJECT: 从环境变量的GRADLE_USER_HOME配置的.gradle目录的配置文件加载仓库.

PREFER_SETTINGS: 从新建的项目的settings.gradle.kts加载仓库.

FAIL_ON_PROJECT_REPOS:强制从settings.gradle.kts加载仓库,如果有配置GRADLE_USER_HOME有配置仓库就会报错.

所以改成PREFER_SETTINGS就可以.如果有不对的地方希望大神指正.

 

posted @ 2026-02-03 15:36  随意的马蒂洛克  阅读(5)  评论(0)    收藏  举报