多平台开发:使用最新的 Visual Studio 和旧版本的 Android

Multi-platform development: use recent Visual Studio with older version of Android

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

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

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

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

Android 版本是一个工业软件,非常特定于它所使用的硬件,我们不能指望 Android OS 会更新,所以我们坚持4.2.2 的最小 Android 版本支持。

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

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

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

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

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

目前我认为我们能做的是:

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

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

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

然而,由于我们的目标是 API 级别 4.4 并在 4.2 上使用该应用程序,我们可能会调用一些 4.2 不支持的 API,甚至更糟,API受支持但有问题,因为新的 Xamarin/Mono 运行time 不支持旧的 Android 版本。尤其如此,因为存在警告 XA4216:即使我们可以在较旧的 android 上部署和 运行 因为清单允许,我们无法确保 OS 提供所有必要的单声道 运行 时间使用的功能。 目前警告 XA4216 是针对版本 4.0.3,但我们看到更新 VS2019 并收到 Android 4.2.

警告的那一天即将到来

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

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

的完全兼容性

2) 使用最新的 Xamarin 将我们的构建和开发环境完全更新到 VS2019,并祈祷实施不会在较旧的 OS.

上出现错误

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

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

PS: 我推动了解决方案 2:"Update our build and development environment fully to VS2019 with latest Xamarin and pray that the implementation is not bugged on older OS." 首先在我的 PC 上进行本地测试。 在对我们的应用程序进行必要的更改以便它使用 VS2019 和最新的 Xamarin 构建之后,我部署了我们的 Android 4.2.2 设备进行测试(我花了一整天的时间来修复构建错误...)。我收到以下错误并且应用程序冻结: W/libc ( 9196): protoent* getprotobyname(char const*)(3) 未在 Android.

上实现

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

使用选项 2 并将您的构建和开发环境完全更新到带有最新 Xamarin 的 VS2019!该实现不应出现任何较旧的错误 OS.

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

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