小编mad*_*are的帖子

Android库的Android API级别注释

我正在写一个Android库.lbirary中的绝大多数界面都支持Android API级别10或更高级别.但是,某些功能需要更高的API级别.例如,库的一部分需要API 18用于蓝牙低功耗.

为了具体起见,我们假设图书馆产生了三个类ClassA,ClassB并且ClassC.ClassA使用API​​ 10中ClassB提供的功能,使用API​​ 14中ClassC提供的功能并使用API​​ 18中提供的功能.

我希望能够在有人使用我的库中的类而没有项目中所需的API级别时触发lint问题(警告/错误)(除非他们使用适当的注释来抑制警告),类似于已经构建的 - 在lint使用的NewApi问题中.

搜索后,我找到了以下可能的解决方案:

1)此解决方案不符合lint:将库拆分为三个.jar文件,例如lib_10.jar包含使用API​​ 10中可用功能的所有类(示例中为ClassA),lib_14.jar其中包括使用API​​中可用功能的所有类14(示例中为ClassB)lib_18.jar,包括使用API​​ 18中可用功能的所有类(示例中为ClassC).此解决方案允许可移植性,但会使代码库的后续可维护性变得复杂,并且可能还需要一些代码重复.

2)创建我自己的注释(例如,@RequireAndroidApi(API_LEVEL)指示带注释的类/方法/等所需的最低API级别)并使用lint-api.jar(http://tools.android.com/tips/lint-custom-rules)创建自定义lint规则,以检查任何带注释的类/方法/等的使用情况...... API低于要求.以后看起来像这样的东西:

@RequireAndroidApi(10)
Class ClassA {
}

@RequireAndroidApi(14)
Class ClassB {
}

@RequireAndroidApi(18)
Class ClassC {
}
Run Code Online (Sandbox Code Playgroud)

问题是我找不到lint API的好文档,似乎这是重新发明lint已经支持的功能的轮子(lint已经检查了"NewApi"问题).

3)最后,我成功编辑<SDK>/platform-tools/api/api-versions.xml,以指示每个类所需的API级别,如下所示:

<api version="1">
    ...
    <class name="package/path/ClassA" since="10">
        <extends name="java/lang/Object" />
        <method name="&lt;init>()V" />
    </class>
    <class name="package/path/ClassB" since="14">
        <extends name="java/lang/Object" />
        <method …
Run Code Online (Sandbox Code Playgroud)

android android-sdk-tools android-lint

13
推荐指数
1
解决办法
8393
查看次数

标签 统计

android ×1

android-lint ×1

android-sdk-tools ×1