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

构建Flutter Android项目如何避免访问dl.google.com、maven公网仓库?

问题原因

你虽然修改了项目根目录的build.gradle,但还有其他层级的配置会自动注入公网仓库,导致构建时仍然请求dl.google.com等公网地址。

解决步骤

  1. 检查android/settings.gradle配置
    新版本Flutter Android项目会将仓库优先级配置放在settings.gradle的pluginManagement和dependencyManagement块中,你需要将这两个块内的google()、mavenCentral()、jcenter()配置全部删除,替换为你的私有Nexus仓库配置,和根build.gradle的仓库配置保持一致即可。

  2. 强制过滤所有公网仓库
    在根build.gradle的allprojects和buildscript的repositories块末尾添加以下逻辑,自动移除所有自动注入的公网仓库:

    repositories.each { repo ->
        if (repo instanceof MavenArtifactRepository) {
            def repoUrl = repo.url.toString()
            // 匹配所有公网仓库地址并移除
            if (repoUrl.contains('dl.google.com') || repoUrl.contains('maven.apache.org') || repoUrl.contains('jcenter.bintray.com')) {
                repositories.remove(repo)
            }
        }
    }
    
  3. 修改Flutter SDK内置的Gradle配置
    Flutter工具会在构建时自动向项目注入公网仓库配置,你需要找到本地Flutter安装路径下的packages/flutter_tools/gradle/flutter.gradle文件,将文件内所有google()、mavenCentral()、jcenter()配置替换为你的私有Nexus仓库地址。

  4. 检查app模块的build.gradle配置
    确认android/app/build.gradle文件内的所有repositories块都没有配置公网仓库,如果有则替换为私有Nexus地址。

  5. (可选)配置全局Gradle初始化脚本强制走私有仓库
    如果你需要所有Gradle项目都默认走私有仓库,可以在当前用户目录下的.gradle文件夹中新建init.gradle文件,添加以下配置:

    allprojects {
        buildscript {
            repositories {
                maven {
                    credentials {
                        username = "${NEXUS_CREDENTIALS_USR}"
                        password = "${NEXUS_CREDENTIALS_PSW}"
                    }
                    url "https://somenexusrepo.com/repository/maven-group"
                }
            }
        }
        repositories {
            maven {
                credentials {
                    username = "${NEXUS_CREDENTIALS_USR}"
                    password = "${NEXUS_CREDENTIALS_PSW}"
                }
                url "https://somenexusrepo.com/repository/maven-group"
            }
        }
        // 移除所有非私有仓库
        [buildscript.repositories, repositories].each { repoList ->
            repoList.each { repo ->
                if (repo instanceof MavenArtifactRepository && repo.url.toString() != "https://somenexusrepo.com/repository/maven-group") {
                    repoList.remove(repo)
                }
            }
        }
    }
    

注意事项

请提前确认你的私有Nexus仓库已经同步了com.android.tools.build:gradle:4.1.0以及项目依赖的其他所有组件,否则修改仓库地址后仍然会出现依赖找不到的报错。

内容的提问来源于stack exchange,提问作者Roger Dávila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:09