Azure DevOps构建Flutter AAB失败:Gradle未生成.aab文件求助
解决Azure DevOps构建Flutter AAB失败问题
问题核心
构建时提示找不到生成的AAB文件,本质是带Flavor的Flutter项目构建后,AAB的输出路径和流水线默认查找路径不一致,且未将生成的文件同步到流水线 artifacts 目录。
修复步骤
1. 补充依赖安装步骤
在Flutter构建前确保依赖已完整安装,添加flutter pub get步骤:
- task: Hey24sheep.flutter.flutter-command.FlutterCommand@0 displayName: 'Flutter Pub Get' inputs: command: 'pub' arguments: 'get' projectDirectory: '$(PROJECT_DIRECTORY)'
2. 定位并复制AAB文件
带Flavor的项目构建后,AAB默认生成路径为$(PROJECT_DIRECTORY)/build/app/outputs/bundle/googlePlayRelease/(其中googlePlay是你的Flavor名称)。添加复制和发布步骤,将文件同步到流水线 artifacts:
- task: CopyFiles@2 displayName: 'Copy AAB to Artifacts' inputs: SourceFolder: '$(PROJECT_DIRECTORY)/build/app/outputs/bundle/googlePlayRelease' Contents: '*.aab' TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: 'Publish AAB Artifact' inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'AndroidAAB' publishLocation: 'Container'
3. 验证Flavor配置一致性
确保yaml中buildFlavor: 'googlePlay'与Android项目android/app/build.gradle中的Flavor定义完全一致,示例gradle配置片段:
flavorDimensions "environment" productFlavors { googlePlay { dimension "environment" // 其他自定义配置 } }
完整修改后的YAML
name: $(Rev:r) trigger: - pipelines/production - pipelines/demo pool: vmImage: 'windows-latest' variables: PROJECT_DIRECTORY: "src/Flutter/Naadel" FLUTTER_VERSION: 3.19.2 stages: - stage: 'Build_Android' displayName: Build_Android_Version jobs: - job: Build displayName: BuildingAndroid steps: - task: JavaToolInstaller@0 inputs: versionSpec: '11' jdkArchitectureOption: 'x64' jdkSourceOption: 'PreInstalled' - task: Hey24sheep.flutter.flutter-install.FlutterInstall@0 displayName: 'Flutter installing' inputs: mode: 'auto' channel: 'stable' version: 'custom' customVersion: '$(FLUTTER_VERSION)' - task: Hey24sheep.flutter.flutter-command.FlutterCommand@0 displayName: 'Flutter Pub Get' inputs: command: 'pub' arguments: 'get' projectDirectory: '$(PROJECT_DIRECTORY)' - task: Hey24sheep.flutter.flutter-build.FlutterBuild@0 inputs: target: "aab" buildFlavor: 'googlePlay' projectDirectory: "$(PROJECT_DIRECTORY)" entryPoint: "lib/main.dart" iosCodesign: false buildNumber: "$(Build.BuildNumber)" - task: CopyFiles@2 displayName: 'Copy AAB to Artifacts' inputs: SourceFolder: '$(PROJECT_DIRECTORY)/build/app/outputs/bundle/googlePlayRelease' Contents: '*.aab' TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: 'Publish AAB Artifact' inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'AndroidAAB' publishLocation: 'Container'
额外检查点
- .gitignore排除build文件夹是正常操作,无需上传到仓库,流水线会在构建时自动生成该目录。
- 若构建仍失败,可在FlutterBuild步骤添加
arguments: '--verbose'参数,查看详细日志定位具体错误。
内容的提问来源于stack exchange,提问作者Anwar Sh
相关产品推荐
相关产品推荐

