【问题标题】:.NET 6 publishing Android Application.NET 6 发布 Android 应用程序
【发布时间】:2022-01-22 23:14:57
【问题描述】:

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

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

【问题讨论】:

  • 如果你有这个想法,我不相信 Visual Studio 有办法将应用程序直接发布到 Google Play 商店。
  • 目前无法通过 UI,只能使用命令行 dotnet publish 我正在编写一些内容来描述如何完成,但尚未完成 :)
  • @RandRandom 不,我只想要 *.apk 或任何可以轻松安装在手机上的东西。这甚至不适用于更广泛的公众。
  • @GeraldVersluis 如果你这样做,请用链接标记我。
  • 哦,如果您实际上不需要去 Play 商店,那么让我添加一个答案

标签: c# android .net-6.0 visual-studio-2022 maui


【解决方案1】:

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

首先;这在当时或从 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。如此链接所示,您可能还需要从 Platforms/iOS/Resources 文件夹中删除 LaunchScreen.xib 文件,并可能在发布命令中包含 /p:EnableAssemblyILStripping=false 标志以解决一些错误。它们都已修复但尚未发布。

免责声明:我尚未向商店发布任何内容,因此此处可能存在空白,请随时添加一些 cmet 与您的发现。

【讨论】:

  • 这回答了原始问题。因为它产生可以安装的 APK。但制作一个真正可用的应用程序似乎还有更多工作要做。我在项目中使用 Microsoft.Azure.Cosmos 包,在发布应用程序时,这只是在创建 APK 的文件夹中创建 DLL。每当应用程序需要此库应用程序时运行 APK 时,应用程序就会崩溃,导致我相信它实际上并未包含在内。你知道如何解决这个问题吗?
  • 不确定你在说什么...你是说安装的插件没有包含在 apk 中?
  • 在我看来就是这样。虽然这只发生在使用您提供的命令发布时。在模拟器中调试时一切正常。
  • 如果不是太麻烦,可以联系我吗?我很想看看我们是否可以修复它和/或我们在这方面是否有需要解决的问题:) gerald.versluis@microsoft.com 谢谢!
  • 我查看后发现我错了。 TLDR;我错过了一条异步语句,并假设我已经将它包含在 try catch 块中。不是编译问题。话虽如此,我仍然遇到无法在调试环境中复制的问题。通过真正晦涩难懂的事情解决。例如,通过安装 Xamarin.Essentials 完全随机解决了 CosmosSDK 的底层问题。这与问题无关,如果您希望我提供堆栈跟踪或其他信息,我不知道您或您的团队是否对此感兴趣,因为我不想向您发送垃圾邮件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多