Flutter AppCenter构建失败:java.net.URISyntaxException异常求助
Flutter AppCenter构建失败:URISyntaxException 问题解决
问题场景
配置Flutter应用的AppCenter构建后,运行构建时失败,报错核心信息为java.net.URISyntaxException: Illegal character in opaque part。本地Android Studio可正常运行该应用。
错误日志
FAILURE: Build failed with an exception. Where: Settings file '/Users/runner/work/1/s/android/settings.gradle' line: 11 What went wrong: A problem occurred evaluating settings 'android'. > java.net.URISyntaxException: Illegal character in opaque part at index 2: C:\Users\...\Flutter\sdk\flutter_windows_2.8.1-stable\flutter\packages\flutter_tools\gradle\app_plugin_loader.gradle BUILD FAILED in 14s Error: /Users/runner/work/1/s/android/gradlew failed with return code: 1 at ChildProcess.<anonymous> (/Users/runner/work/_tasks/Gradle_8d8eebd8-2b94-4c97-85af-839254cc6da4/1.128.0/node_modules/vsts-task-lib/toolrunner.js:569:30) at emitTwo (events.js:106:13) at ChildProcess.emit (events.js:191:7) at maybeClose (internal/child_process.js:920:16) at Socket.<anonymous> (internal/child_process.js:351:11) at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) at Pipe._handle.close [as _onclose] (net.js:509:12) ##[error]Error: /Users/runner/work/1/s/android/gradlew failed with return code: 1
相关代码片段
settings.gradle:
include ':app' def localPropertiesFile = new File(rootProject.projectDir, "local.properties") def properties = new Properties() assert localPropertiesFile.exists() localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" apply from: "$flutterSdkPath\packages\flutter_tools\gradle\app_plugin_loader.gradle"
local.properties:
sdk.dir=C:\Users\..\AppData\Local\Android\sdk flutter.sdk=C:\Users\..\Flutter\sdk\flutter_windows_2.8.1-stable\flutter flutter.buildMode=debug flutter.versionName=1.0.0 flutter.versionCode=1
原因分析
- 路径分隔符跨平台不兼容:
local.properties中使用了Windows风格的反斜杠\,但AppCenter构建环境为macOS/Linux(从日志中的/Users/runner可判断),这类系统仅支持正斜杠/作为路径分隔符,反斜杠会被识别为非法字符。 - Groovy字符串转义问题:
settings.gradle中拼接路径时用了\,在Groovy语法里反斜杠是转义字符,实际解析后会导致路径格式错误,触发URISyntaxException。 - 本地与构建环境差异:
本地Android Studio运行在Windows环境,支持反斜杠路径,因此无问题;但AppCenter的构建 runner 是类Unix系统,路径规则不同导致报错。
解决方案
1. 修正路径分隔符
将local.properties中的反斜杠\替换为正斜杠/,确保跨平台兼容:
sdk.dir=C:/Users/../AppData/Local/Android/sdk flutter.sdk=C:/Users/../Flutter/sdk/flutter_windows_2.8.1-stable/flutter flutter.buildMode=debug flutter.versionName=1.0.0 flutter.versionCode=1
2. 修复settings.gradle的路径拼接
把settings.gradle中的反斜杠\改为正斜杠/:
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
3. 优化版本控制(推荐)
local.properties是本地环境配置文件,不应提交到Git仓库。检查项目的.gitignore是否包含local.properties,AppCenter会自动在构建环境中配置Flutter和Android SDK路径,无需手动指定。
内容的提问来源于stack exchange,提问作者Ramachandra Reddy Avula
相关产品推荐
相关产品推荐

