请问:安卓开发中的targetSdkVersion

leetow2006 2019-08-22 10:03:01
我上网查了下targetSdkVersion,说
一个targetSdkVersion的属性值表示创建的Android项目使用哪个API版本,
可是还有个compileSdkVersion,是说编译时用哪个版本的进行编译,
那么如果targetSdkVersion=23,compileSdkVersion=14,那么是不是
就不能编译了(不能向后兼容)?网上对targetSdkVersion这个说得也不是很清楚,
请问targetSdkVersion到底该怎么理解?
...全文
586 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Enzozvif 2019-09-03
  • 打赏
  • 举报
回复
通俗一点 compileSdkVersion,编译版本号,在你用API的时候会给提示你用的API是不是过时了 targetSdkVersion,修改一下会使用不同SDK版本的Android主题
王能 2019-08-23
  • 打赏
  • 举报
回复
targetSdkVersion表示你项目所适配的最高版本,具体影响,举例子吧: 你的targetSdkVersion=22,在22之前是没有动态申请权限的,谷歌出了api23,所有app必须动态申请权限 1.你一直用22,几乎不会有影响,动态申请权限和你无关 2.你改成了23,那么你就要适配api23的要求,需要动态申请权限,否则就会崩溃 targetSdkVersion不会影响编译apk,上面说了它影响的是编译器对代码相关的校验
leetow2006 2019-08-22
  • 打赏
  • 举报
回复
如果说compileSdkVersion>=targetSdkVersion ,但是我在《第一行代码-Android》这本书的第一个例子中,看到compileSdkVersion=4.0,
而targetSdkVersion=4.4.2
请问: 这是为什么?该如何理解?
leetow2006 2019-08-22
  • 打赏
  • 举报
回复
可不可以这样理解:在开发中使用的API,引用的是targetSdkVersion版本,编译后可以在minSdkVersion与targetSdkVersion之间使用,但要求compileSdkVersion>=targetSdkVersion
m-oj 应用层 2019-08-22
  • 打赏
  • 举报
回复
targetSdkVersion是指你这个应用定位的目标sdk版本,也就是说这个应用是适配这个targetSdkVersion版本以下的minSdkVersion以上的android系统,主要是上架googleplay时审核用。但不代表高于targetSdkVersion的系统不能安装,只是高版本的系统安装可能会有问题。 compileSdkVersion是指编译用的版本,写代码时要引用的sdk版本,compileSdkVersion>=targetSdkVersion
leetow2006 2019-08-22
  • 打赏
  • 举报
回复
targetSdkVersion是最高版本,还是创建的Android项目的API版本?
头发还没秃a 2019-08-22
  • 打赏
  • 举报
回复
targetSdkVersion 是最高版本,compileSdkVersion 是编译版本,比如你编译的版本是5.0,但是项目最高版本是9.0,那么代码就需要兼容6.0、7.0、8.0、9.0各版本
leetow2006 2019-08-22
  • 打赏
  • 举报
回复
还有两个个问题:1、targetSdkVersion的属性值表示创建的Android项目使用哪个API版本,是不是?
2、如果targetSdkVersion与compileSdkVersion不同,那么编译出的字节码是按compileSdkVersion版本
来编译的,是不是?但是编写的代码又是按targetSdkVersion的API,是不是?
王能 2019-08-22
  • 打赏
  • 举报
回复
引用 3 楼 leetow2006 的回复:
如果说compileSdkVersion>=targetSdkVersion ,但是我在《第一行代码-Android》这本书的第一个例子中,看到compileSdkVersion=4.0, 而targetSdkVersion=4.4.2 请问: 这是为什么?该如何理解?
这本书没看过,但好多新手看并来着提问,根据他们提问的总结:这本书非常老,用的是eclipse,错误非常多,坑死人不偿命
王能 2019-08-22
  • 打赏
  • 举报
回复
compileSdkVersion就是你编译器(as)识别的版本(通俗的讲:你在写代码时以哪个api进行校验),具体表现在哪: 假设view有个方法“setBackground”,在api10增加的,api20过时,api30删除了。你的targetSdkVersion=30 compileSdkVersion=1,则你打view.setBackground会提示你没有这个方法 =10会正常编译通过 =20编译器会告诉你这个方法过时了 =30编译器会告诉你这个方法被删除了 这就是compileSdkVersion,只是编译器校验你代码的,和运行时关系不大 但如果compileSdkVersion比targetSdkVersion小会出现什么问题呢? 比如compileSdkVersion=10,targetSdkVersion=30,你写了个view.setBackground,会发现编译器完全通过不会报错 但当你运行到api30的手机上时会直接崩溃,为什么会这样呢? 原因很简单,api30已经删除了这个方法。 为什么写代码时没报错呢? 因为编译器一直是以api10进行校验的,在10里面这个是完全正确的 所以尽量相等,大于也勉强可以,但最好不要小于

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧