我正在写一个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低于要求的API.以后看起来像这样的东西:
@H_419_15@@RequireAndroIDAPI(10)Class ClassA {}@RequireAndroIDAPI(14)Class ClassB {}@RequireAndroIDAPI(18)Class ClassC {}
问题是我找不到lint API的好文档,似乎这是重新发明lint已经支持的功能的轮子(lint已经检查了“NewAPI”问题).
3)最后,我成功编辑了< SDK> /platform-tools/API/API-versions.xml,以便指出每个类所需的API级别,如下所示:
@H_419_15@<API version="1"> ... <class name="package/path/ClassA" since="10"> <extends name="java/lang/Object" /> <method name="<init>()V" /> </class> <class name="package/path/ClassB" since="14"> <extends name="java/lang/Object" /> <method name="<init>()V" /> </class> <class name="package/path/ClassC" since="18"> <extends name="java/lang/Object" /> <method name="<init>()V" /> </class></API>
这导致lint以与AndroID API相同的方式触发NewAPI问题.我喜欢这种类型的解决方案,因为它不会重新发明轮子,并且以这种方式抛出的任何错误将利用Eclipse或AndroID Studio中编写的建议解决方案来处理问题(即Eclipse中的“快速修复”).此解决方案的问题在于它需要编辑随AndroID SDK一起提供的API-versions.xml,这使得该解决方案在释放库时不会非常便携,原因如下:a)API-versions.xml文件不是本地的到项目并改变所有androID项目的lint行为,包括那些不使用库的项目; b)每次从AndroID SDK管理器更新SDK时都会覆盖API-versions.xml,这会覆盖所做的任何更改.
我想知道是否有更简单的解决方案来实现这个“最小API错误/警告”,或者是否有办法编写类似于API-versions.xml的单独文件,可以放在项目目录中,可以通过lint在有问题的项目上运行lint(类似于lint.xml).
感谢您在这个问题的长期描述中与我联系,我提前感谢您的帮助.
解决方法:
无需创建自己的注释,AndroID支持库的@RequiresApi
注释就是您要寻找的.例如:
@H_419_15@@RequiresAPI(Build.VERSION_CODES.LolliPOP)public voID someMethod() {}
此注释告诉lint警告someMethod()是否在可能具有较低API级别的上下文中使用.
请注意,@ TargetAPI是不同的:它用于确保linter只能使用目标API调用带注释的方法,否则会警告您不要使用该方法.因此@TargetAPI可用于静音@RequiresAPI触发的lint警告.
总结以上是内存溢出为你收集整理的Android库的Android API级别注释全部内容,希望文章能够帮你解决Android库的Android API级别注释所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)