如何在Linux ARM64环境下用dotnet CLI生成Android APK文件?
问题场景
我在已安装.NET 7 SDK的Linux ARM64(树莓派OS ARM64)环境下,尝试交叉编译目标为net7-android的应用,执行命令:
dotnet publish -f:net7.0-android -c:Release
出现以下错误:
$ dotnet publish -f:net7.0-android -c:Release
MSBuild version 17.5.0+6f08c67f3 for .NET
/home/jmn/.dotnet/sdk-manifests/7.0.100/microsoft.net.sdk.android/WorkloadManifest.targets(3,5): error : Could not resolve SDK "Microsoft.Android.Sdk.net7". Exactly one of the probing messages below indicates why we could not resolve the SDK. Investigate and resolve that message to correctly specify the SDK.
/home/jmn/.dotnet/sdk-manifests/7.0.100/microsoft.net.sdk.android/WorkloadManifest.targets(3,5): error : SDK resolver "Microsoft.DotNet.MSBuildWorkloadSdkResolver" returned null.
/home/jmn/.dotnet/sdk-manifests/7.0.100/microsoft.net.sdk.android/WorkloadManifest.targets(3,5): error : The NuGetSdkResolver did not resolve this SDK because there was no version specified in the project or global.json.
/home/jmn/.dotnet/sdk-manifests/7.0.100/microsoft.net.sdk.android/WorkloadManifest.targets(3,5): error : MSB4276: The default SDK resolver failed to resolve SDK "Microsoft.Android.Sdk.net7" because directory "/home/jmn/.dotnet/sdk/7.0.202/Sdks/Microsoft.Android.Sdk.net7/Sdk" did not exist.
/home/jmn/.dotnet/sdk-manifests/7.0.100/microsoft.net.sdk.android/WorkloadManifest.targets(3,35): error MSB4236: The SDK 'Microsoft.Android.Sdk.net7' specified could not be found.
[/home/jmn/SeaweedFS-GUI/SeaweedFS.Gui/SeaweedFS.Gui.Android/SeaweedFS.Gui.Android.csproj]
解决步骤
1. 安装Android Workload
Linux ARM64环境下,.NET Android workload不会默认安装,需手动执行以下命令安装:
dotnet workload install android --source https://aka.ms/dotnet7-android-workloads-feed
若遇网络问题,可添加--verbose参数查看详细日志排查。
2. 验证Workload安装状态
执行命令确认Android workload是否成功安装:
dotnet workload list
输出中应包含microsoft.net.sdk.android条目。
3. 指定SDK版本(可选)
若仍提示版本未指定,可在项目目录下新建或修改global.json文件,添加版本配置:
{ "sdk": { "version": "7.0.202", "rollForward": "latestMinor" }, "msbuild-sdks": { "Microsoft.Android.Sdk": "33.0.46" } }
版本号需与实际安装的workload版本匹配,可通过dotnet workload list查看对应版本。
4. 清理缓存后重新发布
清理项目缓存后重新执行发布命令:
dotnet clean dotnet publish -f:net7.0-android -c:Release
内容的提问来源于stack exchange,提问作者SuperJMN

