如何让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
相关产品推荐
相关产品推荐

