前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在低版本SDK调用高版本API?

如何在低版本SDK调用高版本API?

作者头像
吴延宝
发布2018-09-10 15:38:50
4.9K1
发布2018-09-10 15:38:50
举报
文章被收录于专栏:中国Android研究院

随着Android SDK版本不断的迭代更新,在新的SDK上总是会出现让人眼前一亮非常方便好用的API。但是这些新的API呢在低版本的SDK上是没有的,所以当我们的minSdkVersion的版本低于新API所在的版本时,我们直接使用新API在编译时会出现报错。如果只是想解决编译报错的问题呢,Android给我们提供了两种注解的方式避免编译时报错:

  • @SuppressLint
  • @TargetApi

这两种方法又有什么区别呢?

. SupressLint和TargetApi

SupressLint很显然的意思是忽略Lint检查,对于我们使用高版本API来说,可以使用@SuppressLint("NewApi")的方式让Lint在编译时忽略所调用API对版本的要求。而@TargetApi是忽略特定版本的API调用报错。

举个栗子:当你的项目minSdkVersion=9,你想使用API 11的新的方法时。此时,使用@TargetApi(11)@SuppressLint("NewApi")的效果一样,代码都不会报错。但是如果你使用了Api 19才出现的新的方法时,在使用@TargetApi的方法中还是会给你报错,而在另一个方式中依然不会报错。

那这么讲使用@SuppressLint("NewApi")就更好了?

. 正确的使用姿势

当然不是啦!我们要清楚一点,使用上面两种注释的方式只是让lint在编译时不再报错,在低版本的手机系统中,如果直接使用高版本的API肯定会报:“NoSuchMethod”的Crash的。

所以正确的做法应该是在注解的方法中,做版本判断,在低版本中依然使用老的方式处理。版本判断时我们需要判断具体的版本号,比如

代码语言:javascript
复制
 1@TargetApi(9)
 2public void doSomeThing() {
 3    if(Build.VERSION.SDK_INT >= 9) {
 4        // 此时我们正常使用API 9的方法,如果这里误使用了Api 11中的方法,编译时就会报错
 5        // 提醒我们只是引入API 9中的方法
 6    } else {
 7        // TODO 使用老的方式
 8    }
 9}
10
11@SuppressLint("NewApi")
12public void doOthers() {
13    if(Build.VERSION.SDK_INT >= 9) {
14        // 此时我们正常使用API 9的方法,如果这里误使用了Api 11中的方法,编译不会报错
15        // 那么运行在低版本中将会引发Crash的风险
16    } else {
17        // TODO 使用老的方式
18    }
19}

所以,我们推荐使用@TargetApi的方式比较安全。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 南京Android部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • . SupressLint和TargetApi
  • . 正确的使用姿势
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档