【问题标题】:How to get a compile time error instead of NoSuchMethodError run-time error for android API level inconsistencies?如何为 android API 级别不一致获取编译时错误而不是 NoSuchMethodError 运行时错误?
【发布时间】: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 版本中不存在,因此请进行运行时版本检查。

有可能吗?

【问题讨论】:

    标签: android xamarin compile-time nosuchmethoderror android-api-levels


    【解决方案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 中的设置来完成此操作。
    • 甜,这正是我需要的。有趣的是,它用红线标记为错误(我选择了错误),但允许我运行构建(当然还有崩溃)。但无论如何,这已经足以在开发过程中检测出这类问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多