Android中的 targetsdkversioin

简介: 对于Android初学开发者来说,可能会好奇 targetsdkversioin这个配置是用来干嘛的。也有很多一两年开发经验的 Android码农会在面试中被问到这个问题。

对于Android初学开发者来说,

可能会好奇 targetsdkversioin这个配置是用来干嘛的。
也有很多一两年开发经验的 Android码农会在面试中被问到这个问题。

Api Level是个什么东西?

Android的api在版本间变化可能非常大,
有时候一个 api在低版本支持,到了高版本就被删除了。
可以在 develop网站上看到 api level对应的 Android版本,
xxx.jpg

举个例子,Activity.getActionBar()
xxxx.jpg

可以看到 api level 11,也就是说3.0之前是没有这个api的,
3.0之前的机器运行不了用了这个api的app。

targetsdkversioin

以上面 getActionBar()的例子来说,
我们的app现在可以指定 targetsdkversioin = 11,
这意味着安装时会通知系统,开发者已经在 3.0系统上测试过没问题,
如果安装的系统 api level高于11,则会开启兼容模式来运行app。

就像 Android 6.0引入的动态权限申请,
如果你把 targetsdkversioin定位比6.0低的 api level的话,
其实是不需要动态去申请权限,
在app安装时,系统会以兼容模式默认开启这些权限。

然而问题在于,
设定 targetsdkversioin = 21(比如5.0对应的 api level 21),
意味着向系统表明我们只在 5.0系统测试过,
如果是运行在6.0的机器而用户手动关掉所需要的权限的话,
我们的应用是会崩溃的,系统并不会帮我们处理掉兼容性的问题。

@TargetApi

和 targetsdkversioin相对应的还有 @TargetApi这个注解,
还是以上  getActionBar()为例子来说明

如果我们预期app可以运行在 api level < 11的机器上,
而因为UI设计或者其他原因,非要用 getActionBar()方法的时候,
@TargetApi就有作用了

对于这种情况,
通常会在代码中用 Build.VERSION.SDK_INIT 来判断,比如下面的代码,

if(Build.VERSION.SDK_INIT > 10) {
    ....
    goWithActionBar();
} else {
    ....
}

@TargetApi(11)
public void goWithActionBar(){
    ....
}

这意味着 goWithActionBar()这个方法是在 api level以上可以使用的,
不加这个注解的话,编译系统会提示兼容性错误而导致编译不过,
因此 @TargetApi主要是用来抑制编译时的兼容性问题的。

更多Android进阶技术,面试资料系统整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。

相关文章
|
Android开发
android target unknown and state offline解决办法
没有错,将adb的版本升级一下就好了! 下载地址为:http://files.cnblogs.com/files/hujunzheng/adb1.0.32.zip
960 0
|
开发工具 Android开发
Unable to resolve target &#39;android-i&#39;
 导入旧版本的安卓开发程序时,会提示 Unable to resolve target 'android-i'  错误,而且有些文件会提示import java.* cannot resolved,这是旧版本的安卓sdk和现在的的不一致造成的。 方法是:修改工程project.properties中的target=17改为当前版本,如target=18即可 如何查看当前sdk版
1075 0
|
XML API Android开发
out/target/common/obj/PACKAGING/public_api.txt android.view.KeyEvent.KEYCODE_has changed value from
编译出错: out/target/common/obj/PACKAGING/public_api.txt:22549: error 17: Field android.
1334 0
|
8月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1486 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1055 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1138 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
895 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡

热门文章

最新文章