minSdkVersion、compileSdkVersion、targetSdkVersion的区别及选择

参考

Picking your compileSdkVersion, minSdkVersion, and targetSdkVersion

1、minSdkVersion

其实说来话长,我还是长话短说。minSdkVersion表示应用可以运行的最低要求。大白话就是如果手机系统版本对应的SdkVersion低于minSdkVersion就安装不上。

2、compileSdkVersion

compileSdkVersion表示编译应用时使用的SDK的版本,其实也就是告诉开发人员SDK中哪些API能用,哪些API不能用。compileSdkVersion只作用于应用的编译时期,对应用的运行时没有任何影响,因为它根本不会被打包进APK中。新的SDK可能会有一些类、方法、接口的变动,所以如果更新compileSdkVersion有可能会报编译时错误或编译时警告,必须修复错误才能正常编译。比如compileSdkVersion从21更新到23后,由于6.0的SDK移除了HttpClient这个类,所以如果项目中使用到了HttpClient就会报错。Android强烈建议总是使用最新的SDK进行编译,这样就可以避免使用新弃用的API同时为使用新的API做好准备。
compileSdkVersion=21

如上图,compileSdkVersion=21时使用HttpClient是一切正常的。
如果我们把compileSdkVersion更新到23,再来看同一段代码:
这里写图片描述
已经报错。原因就是上面所说了。

3、targetSdkVersion

targetSdkVersion是Android专门用来做各个系统兼容的。这样,在老版本系统上开发的程序在新版本上仍然可以正常运行。比如我们的应用在适配6.0之前targetSdkVersion一直是19,Android6.0的一大更新就是运行时权限,但是我们应用在Android6.0的设备上运行起来各个功能也是很正常的,并没有在需要权限操作的时候让我们去手动获取。这就是targetSdkVersion的作用,向前兼容,只要targetSdkVersion还没有更新到目标设备的值,那么应用运行出来就不会表现出目标设备新的特性。如下图,模拟器是6.0的系统,程序很简单,就是一个简单的打电话的功能,此时targetSdkVersion=19,运行起来看一些,没问题,一切正常。

这里写图片描述

然后我们把targetSdkVersion升级到23(注意:compileSdkVersion应该大于等于targetSdkVersion) ,然后相同代码再运行起来看看。
这里写图片描述

竟然报错了。其实这就是对上面加粗的文字的体现了。targetSdkVersion更新到了23,那么应用运行在6.0的手机上就会被要求有运行时权限获取的功能(展现出目标设备的新特性),但是我们代码里并没有做相应的处理,自然报错crash了。当然,在真实的项目中需要权限的地方肯定不止一处,所以得经过全面的修改和充分的测试才能将更新推送给用户。

4、三者大小比较

综合起来看:
minSdkVersion<=targetSdkVersion<=compileSdkVersion
稳定情况下(推荐):
minSdkVersion<=targetSdkVersion==compileSdkVersion

5、总结

实际开发中:利用较低的minSdkVersion来覆盖尽可能多的设备,利用最新的sdk来设置target和compile来获得最新的外观和功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值