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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:57