AzureDevOps构建net6.0-android遇XA5207错误:找不到API31的android.jar
遇到的错误信息:
##[error]/Users/runner/hostedtoolcache/dotnet/packs/Microsoft.Android.Sdk.Darwin/32.0.509/tools/Xamarin.Android.Common.targets(533,2): Error XA5207: Could not find android.jar for API level 31. This means the Android SDK platform for API level 31 is not installed. Either install it in the Android SDK Manager (Tools > Open Android SDK Manager...), or change the Xamarin.Android project to target an API version that is installed. (/Users/runner/Library/Android/sdk/platforms/android-31/android.jar missing.)
以下是针对Azure DevOps macOS-13代理的修复方案:
1. 显式安装Android API 31平台包
即使代理声称已安装Android 31工具,也可能缺少核心的platforms;android-31组件。在流水线中添加一步安装操作:
- 使用Azure DevOps的Android SDK Installer任务,在"SDK Components"中选择
platforms;android-31 - 或者通过Bash任务执行命令:
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platforms;android-31"
2. 验证项目的API版本配置
检查项目csproj文件中的以下配置项,确保与代理已安装的SDK版本匹配:
<TargetFramework>net6.0-android31.0</TargetFramework> <CompileSdkVersion>31</CompileSdkVersion> <TargetAndroidSdkVersion>31</TargetAndroidSdkVersion>
如果代理已安装更高版本的Android SDK(如33),可直接将项目目标API切换到对应版本,避免依赖缺失问题。
3. 强制指定Android SDK路径给构建任务
dotnet构建可能未正确识别代理默认的SDK路径,可在构建前设置环境变量或直接在命令中指定:
- 通过Bash任务设置环境变量:
echo "##vso[task.setvariable variable=ANDROID_SDK_ROOT]/Users/runner/Library/Android/sdk" - 或者在
dotnet build命令中添加参数:dotnet build YourProject.csproj /p:AndroidSdkDirectory=/Users/runner/Library/Android/sdk
4. 修复SDK管理器缓存问题
代理的SDK缓存可能存在损坏,可执行更新命令修复:
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --update
可能的根因
- 代理预装的"Android 31工具"通常仅包含构建工具(build-tools),而非核心的平台包(platforms组件)
- Microsoft.Android.Sdk版本(如32.0.509)与目标API版本存在兼容性偏差,需确保SDK包版本支持指定的API等级
- 流水线任务的环境变量未正确传递,导致dotnet无法定位到Android SDK目录
内容的提问来源于stack exchange,提问作者MobileDev

