compileSdkVersion、buildToolsVersion,minSdkVersion,targetSdkVersion的区别

如下在AS的android project下,外部库中的第一个android.jar的版本,也就是 compileSdkVersion

image.png

1、CompileSdkVersion是你SDK的版本号,也就是API Level,例如API-19API-20API-21等等。

2、buildeToolVersion是你构建工具的版本,其中包括了打包工具aaptdx等等。这个工具的目录位于..your_sdk_path/build-tools/XX.XX.XX

这个版本号一般是API-LEVEL.0.0。 例如I/O2014大会上发布了API20对应的build-tool的版本就是20.0.0

在这之间可能有小版本,例如20.0.1等等。

3、可以用高版本的build-tool去构建一个低版本的sdk工程,例如build-tool的版本为20,去构建一个sdk版本为18

例如:compileSdkVersion 18

buildToolsVersion "22.0.1"这样也是OK的。

4.其中比较重要的目录包括【build-tools】 【platforms】 【platform-tools】 【tools】

【build-tools】里面是不同版本(例如21.1.1)的build工具,这些工具包括了aapt打包工具dx.bataidl.exe等等

【platform】是存放不同API-level版本SDK目录的地方

【platform-tools】是一些android平台相关的工具,adbfastboot

【tools】是指的安卓开发相关的工具,例如android.batddms.bat(Dalvik debug Monitor Service)draw9patch.bat等等

minSdkVersion,targetSdkVersion

先抛出一个问题:
我们的应用开发的时候android最新版本是6.0,当一年过去之后,7.0发布了,那么我们的应用在7.0手机上是否还能运行?会奔溃吗?

根据我们的实际经验,觉得应该不会奔溃,可能有些功能会有问题,但是具体是那一块呢?又说不太好,这就涉及到了Android的向前兼容的问题了。

我们在创建App的时候经常会设置这几个参数

minSdkVersion

APP支持的最低系统版本

targetSdkVersion

APP所使用这个所设定的版本及该版本前的所有特性。

例如:

需求:app要支持Android SDK 4,并且能够使用手势。

这个时候,就需要将minSdkVersion 设置为4,targetSdkVersion设置为7。因为手势实在Android SDK 7才引入的功能

minSdkVersion :4

targetSdkVersion:7

开发的APP中,要使用手势功能,手势功能在android SDK7的版本才引入的。这个时候,就可以将targetSdkVersion设置为7

targetSdkVersion是这哥三里面最难以理解的一个了,不过也是最有趣的一个。

targetSdkVersion的含义对于我们来说就有点陌生而熟悉了。

什么是目标设备SDK版本?
是和minSdkVersion相对应的上限吗?
如果我运行在比targetSdkVersion高的设备上,会出现什么?
如果是比targetSdkVersion低的设备呢?
满满的疑问

首先targetSdkVersionandroid向前兼容的主要方式,怎么说呢?官方是这样说的:

除非更新targetSdkVersion,否则不改变应用的行为。 这允许您在处理行为更改之前使用新的API(如您更新过的compileSdkVersion

简单的说就是你的应用已经针对这个版本的手机,做了充分的兼容性处理和测试性处理,比如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方法来走,保证了程序运行的一致性。也就是向前兼容性。

你可能感兴趣的:(compileSdkVersion、buildToolsVersion,minSdkVersion,targetSdkVersion的区别)