Xamain.Forms(Android)-带签名的APK-版本5.1(API 22)崩溃

时间:2018-06-20 03:18:52

标签: android xamarin xamarin.forms xamarin.android

我正在创建一个简单的android应用,其中包含简单的控件/视图,例如Label, Entry and Buttons

  • 目标框架:Android 8.1
  • 目标Android版本:Android 8.1
  • 最低Android版本:Android 4.4

存档并生成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 时,该应用程序运行平稳。 (为什么?)

1 个答案:

答案 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.** { *; }

从设备/仿真器中删除该应用程序,然后执行“全部清除/全部重建”并重新部署该应用程序,这应该可以解决问题。