【问题标题】:SDK version required annotationSDK版本需要注解
【发布时间】:2012-12-28 08:43:25
【问题描述】:

我正在通过反射调用一个函数,该函数自 froyo 以来就可用。如何标记此调用需要 froyo?

有注释@TargetApi(Build.VERSION_CODES.FROYO) 但这只是防止警告我想在此版本不匹配时生成警告。

如果SDK站点没有办法,是否可以编写这样的注释?我不熟悉。

【问题讨论】:

标签: android annotations compiler-warnings


【解决方案1】:

注释只是元数据,需要工具来实际处理它们,没有 lint 检查来做你想做的相反的事情:根据http://tools.android.com/tips/lint-checks 表明某事需要特定的 API。

如果您提供 API,最好在函数的 Javadoc 中记录要求,以便调用者知道该特定调用需要 Froyo。在函数中,如果不满足此先决条件或以其他方式处理它,您可能应该抛出异常。

如果您要创建库,另一种选择是将该项目的 minSdk 版本设置为 8 或更高版本。

您也可以编写自己的 lint 规则,我猜它会进行自定义检查。有关编写 lint 规则的更多详细信息,请参见:http://tools.android.com/tips/lint-custom-rules。缺点是您的 api 用户必须执行一些自定义设置才能激活规则。

【讨论】:

  • 你可能是对的,但是 lint 是如何知道一个函数从版本 x 开始可用的呢?
  • 你得去挖掘 lint 的源代码,也许是 Android SDK 被注释了,我没有检查。
  • 我检查了 lint 源代码...Lint 有这个类 android.googlesource.com/platform/sdk/+/tools_r21.1/lint/libs/… 从 $ANDROID_HOME/platform-tools/api/api-versions.xml 加载 API 版本
  • +1 用于挖掘它。这很高兴知道,但不是我真正想要的。如果没有人有更好的主意,我会接受你的回答。
  • 也许您可以描述您正在尝试做的更多事情。正如您现在所制定的那样,如果没有自定义注释和注释处理器,就无法重用现有的 lint 检查或其他类型的检查,这只是它在 Java 中的工作方式;)
【解决方案2】:

我完全忘了提到这一点,但这个注解 @RequiresApi 实际上是早在 2016 年在 Support Lib v24 中引入的,after raising a bugreport

【讨论】:

    猜你喜欢
    • 2022-06-12
    • 2019-10-10
    • 2022-07-15
    • 2022-11-07
    • 2019-05-05
    • 2019-08-03
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多