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

MAUI项目dotnet publish如何生成未签名APK及签名/未签名AAB

解决MAUI Android构建同时生成签名/未签名APK和AAB的问题

核心需求回顾

  • 需同时产出4种产物:未签名APK、签名APK、未签名AAB、签名AAB
  • 未签名APK用于MDM客户自行执行zipalign优化后签名
  • 签名AAB用于Play商店分发

可行解决方案

方案1:单次构建生成所有产物

通过添加AndroidSigningUnsignedPackage=true参数保留未签名包,同时修正AndroidPackageFormats参数格式(去掉末尾多余分号),执行以下命令:

dotnet publish "MyApp.sln" -f net7.0-android -c Release \
  -p:AndroidKeyStore=true \
  -p:AndroidSigningKeyStore="$SourceRoot/myapp.keystore" \
  -p:AndroidSigningKeyAlias="MyAppKeyStore" \
  -p:AndroidSigningKeyPass="androidKeyPass" \
  -p:AndroidSigningStorePass="androidStorePass" \
  -p:AndroidPackageFormats="apk;aab" \
  -p:AndroidSigningUnsignedPackage=true \
  -p:OutputPath="androidOutputPath" || exit 1

执行后输出目录会生成:

  • myapp.aab(未签名AAB)
  • myapp-signed.aab(签名AAB)
  • myapp.apk(未签名APK)
  • myapp-signed.apk(签名APK)

方案2:拆分两次构建(更清晰区分产物)

如果希望未签名和签名产物分目录存放,可拆分两次构建:

  1. 构建未签名包(禁用签名,同时生成APK和AAB)
dotnet publish "MyApp.sln" -f net7.0-android -c Release \
  -p:AndroidKeyStore=false \
  -p:AndroidPackageFormats="apk;aab" \
  -p:OutputPath="androidOutputPath/unsigned" || exit 1
  1. 构建签名包(启用签名,同时生成APK和AAB)
dotnet publish "MyApp.sln" -f net7.0-android -c Release \
  -p:AndroidKeyStore=true \
  -p:AndroidSigningKeyStore="$SourceRoot/myapp.keystore" \
  -p:AndroidSigningKeyAlias="MyAppKeyStore" \
  -p:AndroidSigningKeyPass="androidKeyPass" \
  -p:AndroidSigningStorePass="androidStorePass" \
  -p:AndroidPackageFormats="apk;aab" \
  -p:OutputPath="androidOutputPath/signed" || exit 1

执行后unsigned目录存未签名APK/AAB,signed目录存签名版本,便于管理。

关键参数说明

  • AndroidPackageFormats:支持分号分隔多值(apk;aab),之前失败是因为参数末尾多了分号,导致解析错误
  • AndroidSigningUnsignedPackage=true:让构建流程保留未签名的原始包,默认签名后会删除未签名文件
  • 未签名APK可直接用于zipalign优化,命令示例:
zipalign -v 4 myapp.apk myapp-aligned.apk

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:57:07