.NET 6 发布 Android 应用程序

.NET 6 publishing Android Application

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

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

更新

我现在已经为每个平台创建了指南,说明什么有效,什么无效,以及如何继续在 .NET MAUI 存储库上发布。在此处找到 link:

原回答:

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

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

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

问题是我们现在有一个可以用于各种目标的单一项目:iOS、Android、Windows、macOs,那么我们如何知道 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 构建主机功能的更多信息是 here

但我们还没有做到!在 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>

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

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

对于 iOS 命令,还可以查看背景故事 here。如本 link 所示,您可能还需要从 Platforms/iOS/Resources 文件夹中删除 LaunchScreen.xib 文件,并可能将 /p:EnableAssemblyILStripping=false 标志包含到发布命令中以解决一些错误.两者都已修复但尚未发布。

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