Azure Pipeline Build 在 VSBuild@1 任务中失败,显示错误 XA5207:找不到 API 级别 29 的 android.jar。该脚本之前工作正常

问题描述 投票:0回答:1

我必须为现有的 Xamarin 应用程序部署新的 nuget 包(而 .Net Maui 迁移仍在进行中)。无论如何,管道一直工作正常,直到去年 2023 年 12 月。在 VSBuild@1 中,它正在寻找 API 级别 29,该级别在我们的项目中安装得很好。

这是脚本:

variables:  
  NugetVersion: 6.4.0
  BuildConfiguration: Release
  RestoreSolution: src/App.Core.sln
  MONO_VERSION: 6_12_0
  XCODE_VERSION: 13.2.1
  MACOS_VERSION: macOS-11
#Source: https://github.com/actions/runner-images/blob/main/images/macos/macos-11-Readme.md#xamarin
#Update macOS 10.15: https://github.com/actions/runner-images/issues/5583

jobs: 
- job: build_android
  displayName: Build Android Library
  pool:
    vmImage: windows-latest

  steps:
  - task: NuGetToolInstaller@0
    displayName: 'Use NuGet $(NugetVersion)'
    inputs:
      versionSpec: $(NugetVersion)

  - task: NuGetCommand@2
    displayName: 'NuGet restore'
    inputs:
      restoreSolution: $(RestoreSolution)

  - task: VSBuild@1
    displayName: 'Build Droid Project'
    inputs:
      solution: src/App.Droid/App.Droid.csproj      
      msbuildArgs: '/p:JavaSdkDirectory="$(JAVA_HOME_8_X64)"'
      platform: 'AnyCPU'
      configuration: $(BuildConfiguration)

这是错误结果:


Project "D:\a\1\s\src\App.Droid\App.Droid.csproj" on node 1 (default targets).
_CreateStampDirectory:
  Creating directory "obj\Release\monoandroid10.0\stamp\".
_ResolveAndroidTooling:
  Found Java SDK version 1.8.0.
  Found Java SDK version 1.8.0.
_CheckInstantRunCondition:
  Dex Fast Deployment Enabled: False
_ResolveMonoAndroidSdks:
  MonoAndroid Tools: C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\
  Android Platform API level: 29
  TargetFrameworkVersion: v10.0
  Android NDK: C:\Program Files (x86)\Android\android-sdk\ndk\25.2.9519653\
  Android SDK: C:\Program Files (x86)\Android\android-sdk\
  Android SDK Build Tools: C:\Program Files (x86)\Android\android-sdk\build-tools\32.0.0\
  Java SDK: C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\8.0.402-6\x64\
  Application Java class: android.app.Application
_CleanIntermediateIfNeeded:
  Creating "obj\Release\monoandroid10.0\stamp\_CleanIntermediateIfNeeded.stamp" because "AlwaysCreate" was specified.
  Touching "obj\Release\monoandroid10.0\stamp\_CleanIntermediateIfNeeded.stamp".
##[error]C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Tooling.targets(100,5): **Error XA5207: Could not find android.jar for API level 29. This means the Android SDK platform for API level 29 is not installed. Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the Xamarin.Android project to target an API version that is installed. (C:\Program Files (x86)\Android\android-sdk\platforms\android-29\android.jar missing.)**

我的预期结果是它应该构建 Android 项目并生成复制文件和发布工件任务所需的文件,如下所示:

Creating "obj\Release\monoandroid10.0\stamp\_CleanIntermediateIfNeeded.stamp" because "AlwaysCreate" was specified.
Touching "obj\Release\monoandroid10.0\stamp\_CleanIntermediateIfNeeded.stamp".
_ResolveXamarinAndroidTools:
Found Xamarin.Android 13.2.2.0
PrepareForBuild:
Creating directory "bin\Release\monoandroid10.0\".
Project "D:\a\1\s\src\App.Droid\App.Droid.csproj" (1) is building "D:\a\1\s\src\App.Core.Shell\App.Core.Shell.csproj" (2:2) on node 1 (default targets).
PrepareForBuild:
Creating directory "bin\Release\netstandard2.0\".
Creating directory "obj\Release\netstandard2.0\".
Project "D:\a\1\s\src\App.Core.Shell\App.Core.Shell.csproj" (2:2) is building "D:\a\1\s\src\App.Core.Message\App.Core.Message.csproj" (4:3) on node 1 (default targets).
PrepareForBuild:
Creating directory "bin\Release\netstandard2.0\".
Creating directory "obj\Release\netstandard2.0\".
Project "D:\a\1\s\src\App.Core.Message\App.Core.Message.csproj" (4:3) is building "D:\a\1\s\src\App.Forms.UI\App.Forms.UI.csproj" (7:4) on node 1 (default targets).
PrepareForBuild:
Creating directory "bin\Release\netstandard2.0\".
Creating directory "obj\Release\netstandard2.0\".
*

我是 CI/CD 方面的新手,仍在探索,到目前为止我尝试了以下方法:

  • 更改vmImage的版本
  • 添加恢复包任务
  • 使用 XamarinAndroid@1 任务

非常感谢您的帮助,谢谢!

azure-devops xamarin.android yaml pipeline
1个回答
0
投票

请参阅此文档了解 Microsoft 托管的代理软件

目前预装的 Android 版本的 Microsoft-Hosted Agent 不包括 Android 29。

使用windows最新代理时,最旧版本是Android 31。

使用 windows-2019 时,最旧版本是 Android 30。

要解决此问题,我们可以在构建步骤之前添加其他命令来安装 Android 29。

这是示例:

steps:
- script: 'C:\Android\android-sdk\cmdline-tools\latest\bin\sdkmanager "platforms;android-29" '
  displayName: 'Install Android 29 platform'

- script: 'C:\Android\android-sdk\cmdline-tools\latest\bin\sdkmanager "build-tools;29.0.0" '
  displayName: 'Install Android 29 build tool'

- script: 'C:\Android\android-sdk\cmdline-tools\latest\bin\sdkmanager --list_installed'
  displayName: 'Check sdk list'

- task: vsbuild
....
© www.soinside.com 2019 - 2024. All rights reserved.