.NET 6 发布 Android 应用程序

kry*_*a24 2 c# android maui .net-6.0 visual-studio-2022

如何在 VS2022 中发布 Android 应用程序?我从“Android 应用程序(预览)”模板开始。一切在模拟器中运行良好。单击项目上的“发布”时,只会创建一个 *.nupgk。单击“查看存档...”时,会显示解决方案,但唯一的文本是“没有可用的存档版本”,而且我没有看到任何创建存档的选项。

编辑:通过发布我的意思是创建可以安装的 *.apk。我不需要发布到 Google Play 或任何其他商店。

Ger*_*uis 5

更新

我现在已经为每个平台创建了指南,其中包含哪些内容有效、哪些无效以及如何继续在 .NET MAUI 存储库上发布。在这里找到链接:

原答案:

正如评论中指出的,我一直在玩这个,我总是完成所有的事情并创建一些内容,但还没有完全完成。

第一的; 这在当时或从 UI 中写入是不可能的。当然,这将在 .NET MAUI 发布之前进行,但目前您需要命令行,特别是dotnet publish.

您已经发现此命令通常用于创建 nupkg,但为了统一所有内容,它现在也将用于发布您的 .NET MAUI 应用程序。

问题是我们现在有一个可用于各种目标的单一项目:iOS、Android、Windows、MacO,那么我们如何知道dotnet publish应该发布什么?

您需要指定目标框架。对于 Android,这给我们带来了这样的结果:

dotnet publish -f:net6.0-android -c:Release

这应该会生成一个您可以使用的 APK。我还不确定的一件事是如何将密钥库文件添加到组合中并实际对其进行正确签名以便在 Play 商店中使用。

更完整地说,对于 iOS,命令和过程要复杂一些。来自 Windows 的命令看起来更像是这样:

dotnet publish -f:net6.0-ios -c:Release /p:ServerAddress=192.168.1.77 /p:ServerUser=jfversluis /p:TcpPort=58181 /p:ArchiveOnBuild=true /p:_DotNetRootRemoteDirectory=/Users/{your username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/

有几个参数仅在您从 Windows 构建时才需要:/p:ServerAddress={Mac build host IP address} /p:ServerUser={Mac username} /p:TcpPort=58181如果您从未连接到此构建主机,您还应该添加/p:ServerPassword={your password}. 但是,您只需进入 Visual Studio,从那里连接到构建主机一次,您就会知道连接正常并且省略密码参数。有关 Mac 构建主机功能的更多信息请参见此处

但我们还没有到那儿!在该csproj文件中,我们需要添加一小部分来添加RuntimeIdentifier一些内容,以使 IPA 文件的签名正常工作。

<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
    <RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
    <CodesignEntitlement>Entitlements.plist</CodesignEntitlement>
    <CodesignKey>Apple Development: Gerald Versluis (BLABLAID)</CodesignKey>
    <CodesignProvision>VS: WildCard Development</CodesignProvision>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

Entitlements.plist文件还不是默认模板的一部分,因此只需从 Xamarin.Forms 项目中获取一个,它可以是默认模板,或者当然,如果您确实需要它,也可以配置它,但似乎您需要它无论哪种方式。

您需要从 Apple 证书中获取代码签名的值。这也是我还不太清楚的部分。有关代码签名和配置的更多信息请参见此处,这可能会帮助您进一步了解。

对于 iOS 命令,也可以看看这里的背景故事。如此链接所示,您可能还需要LaunchScreen.xibPlatforms/iOS/Resources文件夹中删除该文件,并可能/p:EnableAssemblyILStripping=false在发布命令中包含该标志以解决一些错误。两者均已修复但尚未发布。

免责声明:我还没有向商店发布任何内容,因此这里可能存在空白,请随时根据您的发现添加一些评论。