CircleCI构建Flutter Android项目时缺失flexbox:2.0.1依赖的解决方法
问题描述
CircleCI构建Flutter Android项目时出现依赖解析错误,报错信息:
Execution failed for task ':app:androidDependencies'. > Could not resolve all artifacts for configuration ':app:prodDebugCompileClasspath'. > Could not find com.google.android:flexbox:2.0.1. Required by: project :app
相关配置
android/app/build.gradle 关键代码
android { ... flavorDimensions "default" productFlavors { staging { dimension "default" applicationIdSuffix ".staging" manifestPlaceholders = [appName: "App Staging", isStaging: true, isProduction: false] } prod { dimension "default" applicationIdSuffix "" manifestPlaceholders = [appName: "App", isStaging: false, isProduction: true] } } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0" implementation 'com.google.firebase:firebase-messaging:21.0.0' implementation 'com.polidea.rxandroidble2:rxandroidble:1.11.1' implementation "com.google.android.material:material:1.5.0" implementation 'androidx.window:window:1.0.0' implementation 'androidx.window:window-java:1.0.0' implementation 'com.android.support:multidex:1.0.3' implementation 'com.google.android:flexbox:2.0.1' // 新增的依赖 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2' }
android/build.gradle 仓库配置
allprojects { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } maven { url 'https://maven.google.com' } jcenter() // 已废弃,但仍可用于遗留依赖 } }
背景信息
- Flutter应用集成了Zoom SDK bridge(版本5.16.6)
- 仅CircleCI构建报错,本地构建完全正常
- 执行
./gradlew clean build --refresh-dependencies无法解决问题
CircleCI配置(核心片段)
version: "2.1" orbs: flutter: circleci/flutter@2.0.4 android: circleci/android@2.5.0 macos: circleci/macos@2.5.1 # 其余工作流、命令、任务配置见用户提供内容
解决方案
1. 优化仓库配置优先级
com.google.android:flexbox:2.0.1托管在Google Maven仓库,需确保google()仓库在allprojects.repositories中优先加载,并移除重复/无效配置:
allprojects { repositories { google() // 放在最前面,确保优先解析Google系依赖 mavenCentral() maven { url 'https://jitpack.io' } // 移除重复的maven.google.com,google()已包含该地址 // 移除jcenter(),flexbox不在该仓库,避免干扰解析 } }
2. 验证CircleCI网络与仓库访问权限
- 添加网络连通性测试步骤,确认能访问Google Maven:
run: name: Test Google Maven Access command: curl -I https://maven.google.com/com/google/android/flexbox/2.0.1/flexbox-2.0.1.pom - 若使用公司代理,需在CircleCI环境变量中配置
HTTP_PROXY/HTTPS_PROXY,并在gradle.properties中添加代理配置:systemProp.http.proxyHost=你的代理地址 systemProp.http.proxyPort=你的代理端口 systemProp.https.proxyHost=你的代理地址 systemProp.https.proxyPort=你的代理端口
3. 清理Gradle缓存
CircleCI的缓存可能损坏,强制清理后重新拉取依赖:
# 在build_android命令中添加清理步骤 steps: - setup_env - run: name: Clean Gradle Cache command: rm -rf ~/.gradle/caches - flutter/install_android_gradle_dependencies # 后续步骤不变
也可临时在CircleCI项目设置中禁用Gradle缓存,构建成功后再重新启用。
4. 隔离Zoom SDK的依赖干扰
Zoom SDK可能覆盖了项目的仓库配置,可为flexbox显式指定仓库:
implementation 'com.google.android:flexbox:2.0.1' { repositories { google() } }
5. 升级Gradle与AGP版本
旧版本Gradle/AGP可能存在依赖解析bug,升级到兼容Flutter 3.19.5的版本:
- 更新
android/build.gradle中的AGP版本:dependencies { classpath 'com.android.tools.build:gradle:7.4.2' // 或更高兼容版本 // 其他classpath配置不变 } - 更新
android/gradle/wrapper/gradle-wrapper.properties中的Gradle版本:distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
CI环境依赖解析保障措施
- 显式声明依赖仓库:对每个第三方依赖,在
build.gradle中明确指定所属仓库,避免解析歧义。 - 启用依赖锁定:生成
gradle.lockfile并提交到版本控制,确保CI与本地使用完全一致的依赖版本。 - 添加依赖验证步骤:构建前执行
./gradlew dependencies,将输出保存为构建artifact,便于排查问题。 - 使用官方镜像:确保CircleCI的Android executor镜像包含最新SDK和构建工具,减少环境差异。
内容的提问来源于stack exchange,提问作者nyphur
相关产品推荐
相关产品推荐

