如何为 android API 级别不一致获取编译时错误而不是 NoSuchMethodError 运行时错误?

Posted

技术标签:

【中文标题】如何为 android API 级别不一致获取编译时错误而不是 NoSuchMethodError 运行时错误?【英文标题】:How to get a compile time error instead of NoSuchMethodError run-time error for android API level inconsistencies? 【发布时间】:2016-07-30 04:04:40 【问题描述】:

我有一个带有android:minSdkVersion="15"android:targetSdkVersion="21" 的Android Xamarin 应用程序。原来,如果我使用 API 15 以上的东西,IDE(xamarin Studio、Visual Studio)和编译过程就会忽略,这在此处不是预期的行为。

例如,有一个来自API 21 的方法Path.addArc(float,float,float,float,float,float),我可以将它与上面的清单设置一起使用,这给了我一个运行时错误NoSuchMethodError

使用API 1 中的重载Path.addArc(RectF,float,float) 有一个简单的解决方法,但我的问题更多是关于如何获得编译时错误或运行时错误。

[更新]

基本上,我想保持API 15(最低android 版本)的向后兼容性,同时将API 21 作为目标android 版本。当我尝试使用API 15 以上的任何方法时,我想获得 IDE 支持。这意味着我需要一个警告,说明我使用的方法在定义的最低 android 版本中不存在,因此请进行运行时版本检查。

有可能吗?

【问题讨论】:

【参考方案1】:

要获得编译时警告,您需要将 Target Framework 设置为您想要支持的最小 SDK。当您尝试使用更高级别的 api 时,这会给您带来错误。打开项目选项对话框。在此对话框中,单击构建 > 常规

你可以在这里https://developer.xamarin.com/guides/android/application_fundamentals/understanding_android_api_levels/#Target_Framework阅读有关 api 级别的信息

如果您只想在保持目标框架不变的情况下出现错误,您可以修改 IDE 首选项以引发编译时错误而不是警告。

【讨论】:

感谢您的链接,您是绝对正确的,要获得编译时错误,您必须将编译 API 级别切换到所需的级别。可能我的问题不清楚,我会改进它,但基本上我想保持 API 15(最低 android 版本)的向后兼容性,同时将 API 21 作为目标 android 版本。当我尝试使用 API 15 以上的任何方法时,我想获得 IDE 支持。这意味着我需要一个警告,说明我正在使用定义的最低 android 版本中不存在的方法,所以请执行运行时版本检查。有可能吗? 更新了答案。您可以更改 Xamarin Studio 中的设置来完成此操作。 甜,这正是我需要的。有趣的是,它用红线标记为错误(我选择了错误),但允许我运行构建(当然还有崩溃)。但无论如何,这已经足以在开发过程中检测出这类问题。

以上是关于如何为 android API 级别不一致获取编译时错误而不是 NoSuchMethodError 运行时错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何为个人 android 项目获取 OpenStreetMaps 或 OpenTilesMaps API?

如何为我的 Android 应用获取 Google Places API 密钥

如何为VS2013中的所有项目设置编译器警告级别?

如何为 google map api v2 设置默认位置和缩放级别?

如何在 React-Native 中获取 Android 版本号? (不是 API 级别编号)

如何为 android 制作更长的 facebook Graph API 会话