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

如何让Flutter使用内部Artifactory而非外部仓库且无需修改SDK文件

问题描述

在企业安全环境中搭建Flutter项目时,所有流量必须通过公司Artifactory路由,无法直接访问Gradle中央插件仓库等外部源。但Flutter SDK自带的\packages\flutter_tools\gradle\settings.gradle.kts配置会强制使用外部仓库:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

该配置会覆盖项目内的仓库设置,导致构建失败,报错示例:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':gradle:compileKotlin'.
> Could not resolve all files for configuration ':gradle:compileClasspath'.
   > Could not resolve com.android.tools.build:gradle:8.7.3.
     Required by:
         project :gradle
      > Could not resolve com.android.tools.build:gradle:8.7.3.
         > Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/8.7.3/gradle-8.7.3.pom'.
            > Could not HEAD 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/8.7.3/gradle-8.7.3.pom'.
               > Got socket exception during request. It might be caused by SSL misconfiguration
                  > Connect to dl.google.com:443 [dl.google.com/142.251.36.206] failed: Connection timed out: getsockopt

目前只能通过修改SDK文件临时解决,但会影响FVM使用,流程复杂。需要找到无需修改SDK文件即可让Flutter指向公司Artifactory的方法。

解决方案

1. 使用Gradle全局初始化脚本

在用户目录的.gradle文件夹(Windows:C:\Users\<用户名>\.gradle,Linux/macOS:~/.gradle)中创建init.gradle.kts文件,通过脚本自动替换所有Gradle项目的仓库配置:

allprojects {
    repositories {
        // 替换为公司Artifactory对应仓库地址
        maven { url = uri("https://your-company-artifactory.com/maven-google") }
        maven { url = uri("https://your-company-artifactory.com/maven-central") }
        // 移除默认外部仓库
        removeIf { it.name == "Google" || it.name == "MavenCentral" }
    }
}

settingsEvaluated {
    dependencyResolutionManagement {
        repositories {
            maven { url = uri("https://your-company-artifactory.com/maven-google") }
            maven { url = uri("https://your-company-artifactory.com/maven-central") }
            removeIf { it.name == "Google" || it.name == "MavenCentral" }
        }
    }
}

该脚本会在所有Gradle项目初始化时自动执行,无需修改SDK或项目文件。

2. 配置Flutter Gradle环境变量

通过环境变量指定自定义的Gradle配置文件,替代SDK自带的设置:

  • Windows命令行:
    set FLUTTER_GRADLE_SETTINGS=C:\path\to\your-custom-settings.gradle.kts
    
  • Linux/macOS终端:
    export FLUTTER_GRADLE_SETTINGS=/path/to/your-custom-settings.gradle.kts
    

自定义your-custom-settings.gradle.kts内容示例:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven { url = uri("https://your-company-artifactory.com/maven-google") }
        maven { url = uri("https://your-company-artifactory.com/maven-central") }
    }
}

Flutter会优先加载该环境变量指向的配置文件。

3. 项目级Gradle属性配置

在项目的android/gradle.properties中添加仓库地址配置:

# 替换为公司Artifactory对应仓库地址
googleRepoUrl=https://your-company-artifactory.com/maven-google
mavenCentralRepoUrl=https://your-company-artifactory.com/maven-central

然后修改项目的android/build.gradle文件,引用上述属性:

buildscript {
    repositories {
        maven { url = uri(gradle.properties.getProperty("googleRepoUrl")) }
        maven { url = uri(gradle.properties.getProperty("mavenCentralRepoUrl")) }
    }
    // 保留其他原有配置
}

allprojects {
    repositories {
        maven { url = uri(gradle.properties.getProperty("googleRepoUrl")) }
        maven { url = uri(gradle.properties.getProperty("mavenCentralRepoUrl")) }
    }
}

这种方法仅修改项目配置,不影响SDK,且适配FVM多版本管理场景。

内容的提问来源于stack exchange,提问作者Kira Resari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:43:18