我正在创建一个简单的android应用,其中包含简单的控件/视图,例如Label, Entry and Buttons
存档并生成APK文件后,我已将其成功安装到MEmu模拟器(Android版本:5.1)中。但是当我尝试打开它时,应用程序崩溃了。
这是我从设备日志工具中得到的错误:
System.NullReferenceException: Object reference not set to an instance of an object
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.InternalSetPage (Xamarin.Forms.Page page) [0x0006f] in <99988d4ab8d144898ef5bc7586876d75>:0
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.SetMainPage () [0x0000c] in <99988d4ab8d144898ef5bc7586876d75>:0
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication (Xamarin.Forms.Application application) [0x0026f] in <99988d4ab8d144898ef5bc7586876d75>:0
at SampleApp.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x00028] in <eaa39f9ef27d400ebfed424165f990c2>:0
at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x0000f] in <818821ea7e204c78a45bc29cdc69e744>:0
at (wrapper dynamic-method) System.Object.fe8f1617-954f-4716-901a-433b7f8b44bf(intptr,intptr,intptr)
我怀疑这是Xamarin.Forms.Platform.Android.FormsAppCompatActivity
问题。因为当我将MainActivity父类更改为Xamarin.Forms.Platform.Android.FormsApplicationActivity
时,它运行没有错误。
但是如何在不切换到FormsApplicationActivity
的情况下解决此错误?
编辑:当我在“包装属性”中禁用 ProGuard 时,该应用程序运行平稳。 (为什么?)
答案 0 :(得分:1)
这是Forms 3.0(至少为3.0.0.561731
版)的错误/问题,因为Java android.support.v7.widget
名称空间中有某些东西已被剥离,并且Xamarin无法生成适当的proguard配置来自动解决问题。
我不确定是哪个实际的Java类和/或字段导致了此问题,但是您可以通过以下方法解决此问题:
在Xamarin.Android
应用程序项目中创建基于proguard配置的基于文本的文件,并将其分配为ProguardConfiguration
的构建类型,即:
<ItemGroup>
<ProguardConfiguration Include="Proguard.txt" />
</ItemGroup>
并包括以下内容:
# Proguard issue in Forms' version 3.0.0.561731
# MonoDroid: System.NullReferenceException: Object reference not set to an instance of an object
# MonoDroid: at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.InternalSetPage (Xamarin.Forms.Page page) [0x0006f] in <09e4bdebfa024bfd9231e2318fd7c3d7>:0
# MonoDroid: at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.SetMainPage () [0x0000c] in <09e4bdebfa024bfd9231e2318fd7c3d7>:0
-keep public class android.support.v7.widget.** { *; }
从设备/仿真器中删除该应用程序,然后执行“全部清除/全部重建”并重新部署该应用程序,这应该可以解决问题。