Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Xamarin Targetframeworkversion_Android_Xamarin_Visual Studio 2017 - Fatal编程技术网

Android Xamarin Targetframeworkversion

Android Xamarin Targetframeworkversion,android,xamarin,visual-studio-2017,Android,Xamarin,Visual Studio 2017,我正在尝试制作一个基本的Xamarin.forms(pcl)应用程序(在Visual studio 2017中),我希望以Lolipop(5.0.0,api级别21)为目标 所以我做了一个基本的Xamarin解决方案,并将Android属性全部调整为Android 5.0棒棒糖 使用Android版本“Android 5.0(棒棒糖)”编译 最低安卓目标“安卓5.0(API 21级-棒棒糖)” 目标Android版本“Android 5.0(API级别21-棒棒糖)” 不幸的是,在我的警告列

我正在尝试制作一个基本的Xamarin.forms(pcl)应用程序(在Visual studio 2017中),我希望以Lolipop(5.0.0,api级别21)为目标

所以我做了一个基本的Xamarin解决方案,并将Android属性全部调整为Android 5.0棒棒糖

  • 使用Android版本“Android 5.0(棒棒糖)”编译
  • 最低安卓目标“安卓5.0(API 21级-棒棒糖)”
  • 目标Android版本“Android 5.0(API级别21-棒棒糖)”
不幸的是,在我的警告列表中,我得到了以下信息

严重性代码说明项目文件行抑制状态 警告:Xamarin.Forms.Platform.dll(v7.0)的$(TargetFrameworkVersion)大于项目(v5.0)的$(TargetFrameworkVersion)。您需要为您的项目增加$(TargetFrameworkVersion)。Prolang.Android C:\Projects\Prolang\Prolang\Prolang.Android\Prolang.Android.csproj

如果我在谷歌上搜索这个错误,大多数人会说确实要更新你的android项目以使用最新的Targetframework版本。但在我的例子中,我真的希望只能够调用对level21(也称为android5.0棒棒糖)可用的Api调用。正如在中一样,我希望编译时安全网只使用来自Api级别21的Api调用

对我来说,似乎我必须将我的xamarin.Forms dll降级到一个专门为android棒棒糖设计的版本,因为我现在使用的是一个更高的版本


因此,我应该降级我的xamarin.forms dll以实现这一点并消除错误吗?如果我降级到什么版本,我需要降级,所以我的目标是安卓5.0棒棒糖?这些信息对我来说都很不清楚

Xamarin.Forms
是使用Android的支持库设计的,因此它可以在各种API上运行,而无需开发人员执行任何其他操作

如果您通过
Xamarin.Android
(可能通过表单的依赖服务)使用本机API,那么您必须知道方法调用的API级别

这就是说,由于
Xamarin.Forms
使用
com.android.support.*
库,因此必须使用
com.android.support:design:21.x.x
以及API 21的相关android构建工具的表单版本

现在,您可以查看包的依赖性,您将看到您的选择是Forms'is
1.4

`1.4.0.6336-pre1` to `1.4.4.6449`
注意:
v1.5.x
已移至Android支持库的第22版

IMHO使用Forms的
1.4
将是一个严重的错误,因为它的年代久远,自2015年以来,改进和错误修复堆积如山,您的境况要好得多:

  • 使用最新的表单版本
  • 框架版本设置为最新版本(7.1)
  • 目标Android版本设置为
    Android 5.0(API级别21)
  • 最低Android版本设置为您需要的任何版本
  • 放弃编译时API检查
  • 通过API-21设备和模拟器检查运行时API问题

感谢您已经给出的答案,这意味着我不能拥有编译时安全性,但我应该在运行时实现自己的安全网?“进行编译时API检查”,因为我在理解这一点上有问题bullet@Martijn
对于go
,应放弃打字错误(即不使用)。你在寻找什么类型的运行时“安全网”?i、 e.如果错误使用API22类/方法并在API21设备上运行,则会失败,这就是仿真器和设备测试的全部内容。@Martijn请记住,在这种情况下,您会将应用程序清单中的android:targetSdkVersion设置为21,因此在API 22-26上运行时,您的应用程序仍然像API21构建的应用程序一样运行。好的,是的,它将在运行时失败,而不是在编译时。这是我一开始就想避免的。我会按照你说的方式做,并按照你告诉我的方式设置设置。@Martijn仅供参考,我做过一些项目,他们使用定制的Android硬件,并锁定到一个较旧的API(许多集成条形码设备仅使用API 19),在这些情况下,我会按照上面所述的方式进行设置,从而实现
目标Android版本
(android:targetSdkVersion)设置为19,并且仅在API 19设备/模拟器上进行平台调试和测试。由于“XXXX方法不存在”异常,您将立即发现是否使用了较新的API,如
ApplicationContext.DataDir
而不是
ApplicationContext.ApplicationInfo.DataDir
。-)