如何解决Xamarin Android链接问题

时间:2018-10-24 14:51:03

标签: xamarin.forms xamarin.android

我的Xamarin Forms Android应用程序在Debug中可以正常工作。但是在Release中,将其部署到仿真器或设备时,在显示初始屏幕后将“停止”该应用程序。调试日志显示这些错误,表明找不到类FitWindowsLinearLayout ...

  

10-23 22:24:59.270 14008 14008 E AndroidRuntime:由以下原因引起:   android.view.InflateException:二进制XML文件第14行:二进制XML   文件行#14:错误放大类   android.support.v7.widget.FitWindowsLinearLayout

     

10-23 22:24:59.270 14008 14008 E AndroidRuntime:由以下原因引起:   android.view.InflateException:二进制XML文件第14行:错误   膨胀类android.support.v7.widget.FitWindowsLinearLayout

     

10-23 22:24:59.270 14008 14008 E AndroidRuntime:由以下原因引起:   java.lang.ClassNotFoundException:找不到类   路径上的“ android.support.v7.widget.FitWindowsLinearLayout”   DexPathList [[zip文件   “ /data/app/zeemerix.NflCalcXF-1/base.apk"],nativeLibraryDirectories=[/data/app/zeemerix.NflCalcXF-1/lib/arm,   /data/app/zeemerix.NflCalcXF-1/base.apk!/lib/armeabi-v7a、/system/lib,   / vendor / lib]]

更改链接到“无”可解决问题,但APK很大。 我应该使用“跳过链接程序集”吗?如果是这样,输入什么?

我尝试使用Proguard配置文件,但是当我这样做时,MainPage会显示为空白屏幕,并且调试日志说它找不到Help_ObClick(),后者是MainPage代码后面的事件处理程序。我使用的个人资料是这个...

-dontobfuscate
-keep class android.support.v7.widget.** { *; }
-dontwarn android.support.v7.widget.**
-keep class android.support.v4.widget.Space { *; }
-dontwarn android.support.v4.widget.Space

我的Android选项:

关闭:使用共享运行时 开启:启用Proguard 开启:启用开发人员检测 链接:SDK和用户程序集[将其设置为None可以解决问题]

使用Android版本编译:8.1 最低Android版本:7.0 目标Android版本:8.1

我的设置:

VS社区2017,版本15.7.3 Xamarin 4.10.10.1 Xamarin Android SDK 8.3.3.2 Xamarin表格3.3.0.912540 Xamarin支持库v27.0.2.1

2 个答案:

答案 0 :(得分:0)

my poject screenshot

如果要链接SDK和Assembly,则必须跳过链接.net标准和您使用的任何项目(如我的项目中的customControls) 还有很多其他方法可以做到这一点,但这很容易

答案 1 :(得分:0)

如您所知,链接“无”有效,然后尝试链接“仅Sdk Assembiles” 如果那不起作用,那么您可以进入构建文件夹,复制所有组件的所有名称减去扩展名,然后将其添加到“跳过链接程序集”领域

然后将链接设置为“ SDK和用户程序集”,然后重试。 这将花费很多时间,但随后将这些文件从列表中删除,直到找到导致问题的文件为止。

对我来说,因为仅链接“ SDK组件”才能工作起来要容易得多,所以我可以消除在这里找到的所有SDK组件:

https://docs.microsoft.com/en-us/xamarin/cross-platform/internals/available-assemblies

用户列表要小得多,因此消除过程要快得多...

首先,使用反射的libraires通常是一个问题,因为在compli和标记为删除之前无法轻松识别它们。 以我为例,它是Json.Net,RestSharp等。

我发布的应用程序大小仅为原本的三分之一...