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

Azure DevOps Android构建成功但上传工件失败:未找到工件

Azure DevOps Android流水线报错:未找到工件文件夹

问题根源分析

报错显示找不到D:\a\1\s\app\build\outputs\apk,说明Gradle构建后未生成目标目录,核心原因是Windows环境下Gradle命令执行不兼容,或是路径配置逻辑错误,看似“构建成功”可能只是脚本未捕获Gradle实际执行失败的异常。

修复步骤

1. 修正Windows环境的Gradle调用命令

Windows虚拟机中不能直接用类Unix风格的./gradlew,必须调用Windows批处理文件gradlew.bat,修改构建脚本:

- script: |
    echo "Running Gradle task: assembleDebug"
    java -version
    gradlew.bat clean
    gradlew.bat assembleDebug
  displayName: 'Run Gradle Build'

2. 验证Gradle是否真的生成了APK

在Gradle构建步骤后添加目录检查,确认APK文件是否存在:

- script: |
    echo "Checking build output"
    dir /s /b app\build\outputs\apk\debug
  displayName: 'Verify APK Generation'

如果这一步报错,说明Gradle实际构建失败,需要查看流水线日志排查编译问题(比如依赖缺失、代码语法错误)。

3. 修正文件复制与发布的路径逻辑

当前配置中,CopyFiles任务将app\build\outputs\apk复制到 staging目录后,Publish任务却去$(Build.ArtifactStagingDirectory)\app\build\outputs\apk\debug找文件——这是错误的,复制后文件结构应为$(Build.ArtifactStagingDirectory)\debug,而非嵌套原路径。

修改后的文件处理任务:

- task: CopyFiles@2
  displayName: 'Copy APK to Staging Directory'
  inputs:
    SourceFolder: 'app\build\outputs\apk\debug'
    Contents: '*.apk'
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'apk'
    publishLocation: 'Container'

直接复制debug目录下的APK到 staging目录,再发布整个目录,路径逻辑更清晰。

4. 优化目录结构检查脚本

用更直观的命令查看当前目录和构建产物:

- script: |
    echo "Current working directory: %CD%"
    dir /s /b app\build
  displayName: 'Check Build Directory Structure'

dir /s /b会递归列出所有文件,能快速确认是否生成了APK。

完整修正后的azure-pipelines.yml示例

trigger:
- main

pool:
  vmImage: 'windows-latest'

stages:
  - stage: Build
    displayName: 'Build APK'
    jobs:
      - job: BuildDebug
        displayName: 'Build Debug APK'
        steps:
          - task: JavaToolInstaller@0
            inputs:
              versionSpec: '17'
              jdkArchitectureOption: 'x64'
              jdkSourceOption: 'PreInstalled'
  
          - script: |
              echo "Checking Java version"
              java -version
            displayName: 'Check Java Version'
            
          - script: |
              echo "Running Gradle task: assembleDebug"
              java -version
              gradlew.bat clean
              gradlew.bat assembleDebug
            displayName: 'Run Gradle Build'
            
          - script: |
              echo "Current working directory: %CD%"
              dir /s /b app\build
            displayName: 'Verify Build Output'
            
          - task: CopyFiles@2
            displayName: 'Copy APK to Staging Directory'
            inputs:
              SourceFolder: 'app\build\outputs\apk\debug'
              Contents: '*.apk'
              TargetFolder: '$(Build.ArtifactStagingDirectory)'

          - task: PublishBuildArtifacts@1
            inputs:
              PathtoPublish: '$(Build.ArtifactStagingDirectory)'
              ArtifactName: 'apk'
              publishLocation: 'Container'

内容的提问来源于stack exchange,提问作者Gaurav Bajait

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:33:12