如何为 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 密钥
如何为 google map api v2 设置默认位置和缩放级别?