我必须为现有的 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 方面的新手,仍在探索,到目前为止我尝试了以下方法:
非常感谢您的帮助,谢谢!
请参阅此文档了解 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
....