我正在创建一个简单的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时,应用程序运行平稳。(为什么?)
发布于 2018-06-20 06:09:54
对于Forms‘3.0 (至少是版本3.0.0.561731)来说,这是一个bug/问题,因为Java名称空间中有一些东西正在被删除,而Xamarin没有生成一个正确的程序保护配置来自动防止问题的发生。
我不确定是哪些实际的Java类和/或字段导致了这个问题,但是您可以这样做来解决这个问题:
在您的Xamarin.Android应用程序项目中创建一个基于文本的配置文件,并为它分配一个构建类型的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.** { *; }从设备/仿真器中删除应用程序,执行干净的所有/重新构建所有程序,然后重新部署应用程序,这将解决问题。
https://stackoverflow.com/questions/50939682
复制相似问题