使用minSdkVersion管理Android项目中的"已弃用"警告

Ale*_*ohn 11 java eclipse android lint adt

我讨厌警告.我们的Android项目现在有151个,而且我确信在列表的某个地方有一个实际上警告我们免受潜在的麻烦.

这些警告中的一种是关于不推荐使用的字段和方法.这可能很有用,除了Manifest包含<uses-sdk android:minSdkVersion="10" />,并且这些警告只考虑了targetSDK android-17.

可以轻松地将这些警告静音 - @SuppressWarnings("deprecation")在违规行或整个方法之前添加注释.但这忽略了它的全部要点 - 如果/当我们决定改变时minSdkVersion="11",在10级弃用的API仍然不会出现,并且有人将不得不在我们所有的项目中查看所有注释,以找到必须的代码被重写.

是否有一些解决方案可以根据我的minSdkVersion管理这些警告?


似乎Mark在下面发布了一个有趣的答案,甚至提出了一个受我的问题启发的功能请求,但我不同意minSdkVersion的重要性.他希望看到@TargetApi(NN)基于目标API级别的弃用警告(很可能来自Lint,类似于注释).但我不同意这种方法.

考虑一个打开相机的简单应用程序.它可能想要检查预览帧速率.但是这种方法在API 9中已弃用,现在我们必须检查预览FPS范围.如果我们使用platforms/android-8/android.jar,Java编译器将不会显示弃用警告.

但即使应用程序在支持此类查询的设备上运行,它也不允许我们找到首选的视频分辨率.我们可能会在@TargetApi(11)那里添加注释,以确保应用程序是使用platforms/android-11/android.jar或更高版本构建的.

现在我们已经定位了Honeycomb及更高版本,将为getPreviewFrameRate()显示弃用警告,这正是困扰我的.有一段时间,我想象的应用程序必须支持一些Froyo设备,因此我别无选择,只能设置minSdkVersion=8并使用已弃用的方法.当然,我将在条件块中使用任何高级API,并且已经@TargetApi(NN)到位.幸运的是,对于Donut和更高版本,当检测到对不存在的方法或成员的调用时,类加载器不会崩溃,并且仅仅在if()中包装可疑调用就足够了.

那我该怎么办?添加getPreviewFrameRate()@SuppressWarnings("deprecation")调用来静音警告?改为添加?@SuppressDeprecation(8)

但在某些时候,我将决定与Froyo的向后兼容性不再重要.我设置<uses-sdk android:minSdkVersion="9" />了我的Manifest,但getPreviewFrameRate()的弃用警告仍被抑制......好吧,新方法肯定比现有的注释更好,因为grep -R "@SuppressDeprecation(8)"在Manifest中进行更改后,整个项目更容易.

但我更喜欢这里更紧密的集成:让Lint为我解析Manifest文件.

这会更好吗?

Com*_*are 7

是否有一些解决方案可以根据我的minSdkVersion管理这些警告?

不,因为弃用与此无关android:minSdkVersion.

如果您真的对此感到担心,请将已弃用的内容隔离到自己的方法中,以最大程度地降低注释将掩盖您不了解的未来弃用的几率.

什么不是完全不可能的是@SuppressDeprecation(NN)注释,它将抑制给定构建目标的弃用.这类似于如何@TargetApi(NN)抑制Lint对某一特定的投诉android:minSdkVersion.我已经为此提交了功能请求.


Ale*_*ohn 2

实际上有一个功能请求: https: //code.google.com/p/android/issues/detail? id=41318,于 2012 年 12 月 12 日提交。