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:拆分两次构建(更清晰区分产物)
如果希望未签名和签名产物分目录存放,可拆分两次构建:
- 构建未签名包(禁用签名,同时生成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
- 构建签名包(启用签名,同时生成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
相关产品推荐
相关产品推荐

