android - 多平台开发 : use recent Visual Studio with older version of Android

标签 android xamarin xamarin.android visual-studio-2019 .net-standard

[更新] 我终于能够使用最新的工具链在 4.2 上部署我们的应用程序。我得到一个错误。原文后见下文。

我们正在寻找一个长期的解决方案,以继续使用最新版本的 Visual Studio(本文发布时为 2019 年),同时继续为旧的 Android 平台(4.4 之前)进行开发。

Xamarin@Microsoft 在 Xamarin.Android 版本 9.2 中放弃了对 4.4 之前的 Android 的支持,但我们不能放弃对我们产品的支持。 到目前为止,我们一直在使用 VS2017 进行特定的 android 开发,但是 VS2019 和 VS2017 开发环境之间的差距越来越大,这增加了我们日常开发的开销。

我们的项目是使用部署在 PC 上的软件的最通用代码库开发的,但此代码的一部分也是可以在特定设备上运行的 Android 应用程序的一部分。 对于作为我们主要 Activity 的 PC 开发,我们希望尽可能能够使用最新的 .NET 标准和最新的工具进行编码。

Android 版本是一个工业软件,非常特定于它所使用的硬件,我们不能指望 Android 操作系统会更新,因此我们坚持使用 4.2.2 的最低 Android 版本支持。

我已经在 SO 和其他论坛上进行了搜索,但没有找到任何“好的”长期解决方案。 有关信息,这里是我发现的与此主题相关的一些有用信息:

https://learn.microsoft.com/en-us/xamarin/android/release-notes/9/9.2

https://learn.microsoft.com/en-us/xamarin/android/app-fundamentals/android-api-levels?tabs=windows

Which .Net Standard version supports which Android versions?

https://github.com/xamarin/xamarin-android/blob/master/Documentation/guides/messages/xa4216.md

https://learn.microsoft.com/en-us/dotnet/standard/net-standard

目前我认为我们可以做的是:

1) 我们代码的公共(public)部分主要使用.NET标准库

2) 直接使用 Xamarin.Android 的程序集很少,通常仅用于 UI 部分。

请注意,这与我们现在正在做的很接近(除了我认为我们可以将更多程序集移植到 .NET Standard)。

然而,由于我们以 API 级别 4.4 为目标并在 4.2 上使用该应用程序,我们可能会调用一些 4.2 中不支持的 API,或者更糟的是,调用支持但有问题的 API,因为新的 Xamarin/Mono 运行时不支持旧的安卓版本。尤其如此,因为存在警告 XA4216:即使我们可以在较旧的 android 上部署和运行(因为 list 允许),我们也无法确保操作系统提供 mono 运行时使用的所有必要功能。 目前警告 XA4216 是针对版本 4.0.3,但我们看到更新 VS2019 并在 Android 4.2 上收到此警告的那一天即将到来。

那么有没有更好的解决方案:

1) 保留旧的 VS2017/旧的 Xamarin.Android 构建环境并阻止我们的日常工作,以继续确保与 Android 4.2 的完全兼容性

2) 使用最新的 Xamarin 将我们的构建和开发环境完全更新到 VS2019,并祈祷该实现不会在旧操作系统上出现错误。

我希望能够使用 2 并确保一切正常,而不必在每次更新 visual studio 时重新测试整个应用程序。 你怎么认为? 为了确保应用程序的稳定性,我们是否坚持使用旧的构建系统(VS2017 + 旧的 Xamarin.Android),或者升级到带有最新 Xamarin 的 VS2019 是否存在“安全”风险?

在此先感谢您就此主题提出任何好的建议。

附言: 我插入了解决方案 2:“使用最新的 Xamarin 将我们的构建和开发环境完全更新到 VS2019,并祈祷该实现不会在旧操作系统上出现问题。”首先在我的电脑上进行本地测试。 在对我们的应用程序进行必要的更改以便它使用 VS2019 和最新的 Xamarin 构建之后,我部署了测试我们的 Android 4.2.2 设备(花了我一整天的时间来修复构建错误......)。我收到以下错误并且应用程序卡住: W/libc (9196): protoent* getprotobyname(char const*)(3) 未在 Android 上实现。

也许祈祷还不够……有什么想法吗?

最佳答案

使用选项 2 并使用最新的 Xamarin 将您的构建和开发环境完全更新到 VS2019!该实现不应导致任何旧操作系统出现错误。

即使它确实添加了错误,也只需在 QA 中测试您的代码。至于生产,您可以在您的应用程序上放置良好的崩溃分析,并且您将能够捕获、报告和修复任何错误。

在大多数情况下,在 Android 上使用 Android 4.4 以下的用户数量不到所有用户的 0.001%。到那时,在您的应用中实现辅助功能就更有意义了,因为这会影响 1000 倍以上的用户。

关于android - 多平台开发 : use recent Visual Studio with older version of Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59467756/

相关文章:

android - 如何获取当前时间

php - 如何将下拉 Spinners <item> 插入 MySQL 数据库

c# - Xamarin iOS 应用程序在启动时崩溃

android - Xamarin Forms 跨平台 BBCode 支持

android - 控件显示在设计器中但不显示在模拟器中

android - 使用可跨越字符串更改阿拉伯语变音符号颜色在某些手机上不起作用

android - PopupWindow 中 webview 上方的按钮在 2 次后响应 onClick

listview - 如何使用 x :Name of items in listView at codebehind?

c# - Xamarin.Forms : Rendering Xamarin. native 对话框中的 Froms 控件 - 忽略 wrap_content

xamarin - 如何使用 FFImageLoading 为派生的 Xamarin BaseAdapter 类中的所有列表项预加载图像