MVVMCross Android 10.0 (Q) SetContentView() 上的 MainActivity 异常崩溃

MVVMCross Android 10.0 (Q) MainActivity exception crash on SetContentView()

我正在帮助的一个大型项目使用 MvvmCross v5.2.1。 当我们以框架 Android 10.0 (API Level 29) (Q) 为目标时,一旦 MainActivityOnCreate() 生命周期函数运行,就会发生异常崩溃第 SetContentView(Resource.Layout.activity_main).

异常的一部分显示为

java.lang.NoSuchFieldException: No field mConstructorArgs in class Landroid/view/LayoutInflater; (declaration of 'android.view.LayoutInflater' appears in /system/framework/framework.jar!classes3.dex)
    at java.lang.Class.getDeclaredField(Native Method)
    at mvvmcross.binding.droid.views.MvxLayoutInflater_PrivateFactoryWrapper2.n_onCreateView(Native Method)
    at mvvmcross.binding.droid.views.MvxLayoutInflater_PrivateFactoryWrapper2.onCreateView(MvxLayoutInflater_PrivateFactoryWrapper2.java:32)
    at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:239)
    at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1069)

这里有更详细的日志 pastebin

它似乎与 MvvmCross repo: and I followed the links to this pull request 上的 Github 问题相同。

这是否意味着任何使用 v6.4.1 之前的#MVVMCross 的人,如果他们想要针对框架 Android 10.0,就必须升级? 有什么解决办法吗?

我在 Twitter 上向 MVVMCross 框架的创建者和维护者提出了这个问题,如您在 this thread 中所见。 我收到以下回复:

You need 6.4.1. No known workarounds maybe except for copying all the necessary code to fix that layout inflater issue.

这意味着针对框架 Android 10.0 及更高版本的唯一解决方案是更新至包版本 6.4.1 或更高版本。这是一个非常困难的过程,因为除其他外,它还需要将解决方案更新到 .NET Core 2.0 Framework。

这是什么意思?截至 2019 年,Android Play 商店仅接受针对框架 8.1 的 APK 文件。因此,到 2020 年 11 月,他们将要求更改为 Android 10.0,届时您还需要更新 nuget 包。

更新:我 wrote an article 也提到了这个问题,以提高人们对这个问题的认识,因为截止日期是 2020 年 11 月,用户必须在此之前将他们的应用程序定位到 Android 10。

更新 2:我 wrote another article 向人们展示如何逐步将他们的应用程序更新到最新的 MVVMCross