android {  compileSdkVersion 23  buildToolsVersion “23.0.1”  defaultConfig {    applicationId “com.example.checkyourtargetsdk"    minSdkVersion 15    targetSdkVersion 23    versionCode 1    versionName “1.0”  }

以上是Android工程里名称为app的module的build.gradle文件其中的内容,涉及到的概念如下

minSdkVersion

我们的app能够运行的最小版本,如果选择15,那么就是Android 4.0.3 以及以上的设备才能运行我们app,如果小于这个版本,那么抱歉运行不了,我们不支持。这是应用程序支持api的下限。这也是应用商店判断这个应用是否能运行在设备上的一个依据之一。

compileSdkVersion

一句话总结,是编译环境下的SDK版本
例如指定的是23,编译环境使用的API就是6.0版本,注意改变编译版本号,本质上改变不了我们程序的运行,虽然可能会报错误❌或者警告⚠️,但compileSdkVersion 只会在编译期间起作用,因为环境是compileSdkVersion这个版本的SDK,所以你可以用一些这个版本的API,但是只是IDE给你的便利性帮助而已,帮助你检测代码,避免使用一些弃用的API。就算你用个低版本的compileSdkVersion,你依然可以那么写,但是可能会报错,报警告,但是你强制打包,其实也是没有问题的。IDE只是个工具,他的环境也只是工具的环境,不代表你应用运行时的表现。所以建议有两个可供选择。

  • 指定compileSdkVersion为最新的,这样我们可以使用到最新SDK的API方法和机制。
  • compileSdkVersion与targetSdkVersion保持一致.

另外注意如果我们使用了比如V4,V7包,有没有发现必须和compileSdkVersion的版本相匹配,比如我们compileSdkVersion = 26,那么V4,v7的版本也要相应的是26.xx.xx,首位的26必须一致,后两位没有要求,就是说明编译所依赖的SDK和依赖包必须是统一版本,不然两个不兼容,编译会通不过。同时也是为了使用该版本的新特性。

targetSdkVersion

简单的说就是你的应用已经针对这个版本的手机,做了充分的兼容性处理和测试性处理,比如 if(Build.VERSION.SDK_INT >= 23) { ... } ,这样针对不同的SDK版本做不同的处理,这就说明我们不能随便的改变targetSdkVersion得值,我们必须做好充足的兼容性处理和测试处理才行。

在 Android 4.4 (API 19)以后,AlarmManager 的 set() 和 setRepeat() 这两个 API 的行为发生了变化。在 Android 4.4 以前,这两个 API 设置的都是精确的时间,系统能保证在 API 设置的时间点上唤醒 Alarm。因为省电原因 Android 4.4 系统实现了 AlarmManager 的对齐唤醒,这两个 API 设置唤醒的时间,系统都对待成不精确的时间,系统只能保证在你设置的时间点之后某个时间唤醒。虽然api的名字没有改变,但是功能结果已经发生改变,我们设置targetSdkVersion为16,Android4.4之前,那么我们在Android4.4之后运行会出现什么呢?难道就不能用了吗?不准确了吗?
当然不是,系统通过targetSdkVersion来保证Android的向前兼容性,在Android4.4之后的设备上,系统会判断你的targetSdkVersion是否小于19,如果小于的话,那就按照19之前的api方法,如果大于等于19,那么就按照之后的api方法来走,保证了程序运行的一致性。也就是向前兼容性。

但是还有一个问题:

Android 6.0新增加了动态权限申请,我们的targetSdkVersion是5.0,如果我们运行在Android 6.0的设备上怎么办?
因为我们这个可以向前兼容,向后不行啊,如果你的代码里处理了Android 6.0的动态权限处理,那么可以的,如果没呢?你想啥呢大哥?更新应用处理呗~~

targetSdkVersion 的大部分更新变化都会记录在VERSION_CODES,所有的细节也会在每个版本的平台亮点写明。

targetSdkVersion保证的是api的一致性。
所以一般minSdkVersion 不随意更改targetSdkVersion,更改targetSdkVersion必须做好兼容。

总结

一般设置为minSdkVersion

更多相关文章

  1. Android发展史(Android各版本特性-知识篇)
  2. Mac版Android(安卓)studio中使用lambda表达式设置jdk版本问题
  3. gradle 配置文件 build.gradle 属性详解
  4. android ATD configeration
  5. android framework 低电量关机处理流程 浅析
  6. Android修改user版本默认关闭开发者选项模式,eng版本默认打开开
  7. eclipse中运行android工程启动失败的问题
  8. Android版本和API Level对应关系
  9. Android(安卓)隐藏ActionBar

随机推荐

  1. Android移动应用基础学习——第四章数据
  2. TextView总是显示跑马灯效果
  3. android 横竖屏切换问题解决方案
  4. 关于Google Android,第一印象
  5. 新手android 开发 错误集锦(持续更新中)
  6. android 取现在时间和以前的时间做差 求
  7. android HorizontalScrollView讲解
  8. Android(安卓)APK多个ICON入口
  9. android 按键
  10. Android(安卓)本地代码中的LIKELY和UNLIK