1、build.gradle里面的几个版本说明
- compileSdkVersion
compileSdkVersion表示当前项目的编译版本,即你想让AndroidStudio以什么SDK版本去编译你的项目,因此在你编写代码调用系统提供的相关api时, 都是基于该版本的api的。例如 compileSdkVersion 25,当你查看系统api源码时,查看的就是 api level为25的系统源码。
系统名称 |
Android版本 |
api版本 |
发布时间 |
Android Q |
Android10.0 |
29 |
2019年 |
Android Pie |
Android9.0
扫描二维码关注公众号,回复:
9984772 查看本文章
|
28 |
2018年 |
Android Oreo |
Android8.0 |
26 |
2017年 |
Android Nougat |
Android7.0 |
24 |
2016年8 |
Android Marshmallow |
Android6.0 |
23 |
2015年10月 |
- buildToolsVersion
buildToolsVersion则是指构建工具的SDK版本,也就是AndroidStudio中设置的Android SDK版本,buildToolsVersion要高于compileSdkVersion版本,这个很好理解,如果编译版本高于AndroidStudio的SDK版本,那AndroidStudio怎么给项目编译呢?
- minSdkVersion
minSdkVersion表示当前项目支持的最低安卓系统版本。
- targetSdkVersion
targetSdkVersion的意思是当前app的目标sdk版本,可以理解为当前app在这个版本是比较稳定的,针对这个版本所开发的,因此通常targetSdkVersion和compileSdkVersion 的值是相同的,targetSdkVersion是安卓提供的向前兼容的主要手段。例如targetSdkVersion 25,它的作用就是当targetSdkVersion为25的app运行在系统版本号高于25的手机系统中,app所执行的旧版本api在高版本可能不一样了,但是安卓为了兼容,在系统层会读取当前应用的targetSdkVersion,通过与运行系统api比大小,当targetSdkVersion版本号低于当前版本就会执行旧版本的api,不会导致由于系统的原因而让app运行失常。
因此,当我们在开发过程中如果需要用到高版本的api但是我们又不想去改动项目中的代码时可以把compileSdkVersion版本调到新版本,targetSdkVersion保持不变就可以,编译版本让你可以调用高版本的api,但是在高版本运行旧的api时,由于targetSdkVersion的作用而正常运行。
2、有关Android Build类的简介
Build 下有很多重要的变量及两个重要的内部类VERSION和VERSION_CODES。
// Build类的作用主要是获取系统信息
Build.BOARD // 主板
Build.BRAND // Android系统定制商
Build.CPU_ABI // cpu指令集
Build.DEVICE // 设备参数
Build.DISPLAY // 显示屏参数
Build.FINGERPRINT // 硬件名称
Build.HOST //
Build.ID // 修订版本列表
Build.MANUFACTURER // 硬件制造商
Build.MODEL // 版本
Build.PRODUCT // 手机制造商
Build.TAGS // 描述build的标签
Build.TIME //时间
Build.TYPE // builder类型
Build.USER //用户
// Build.VERSION
Build.VERSION.CODENAME // 当前开发代号
Build.VERSION.INCREMENTAL // 源码控制版本号
Build.VERSION.RELEASE // 版本字符串
Build.VERSION.SDK // 版本号
Build.VERSION.SDK_INT // 高版本api替换了Build.VERSION.SDK
// Build.VERSION_CODES
该类都是一些常亮,存放的是各个Android系统的api level
Build.VERSION_CODES.M = 23
..............
3、代码中有关version的判断
通常我们在写代码的时候,也需要考虑系统版本的兼容性,例如高版本的系统具有的api,低版本是没有的或者说是另外的api,那么我们如何做版本的兼容性呢?
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1){
}else{
}