如下在AS的android project下,外部库中的第一个android.jar的版本,也就是 compileSdkVersion
1、CompileSdkVersion
是你SDK
的版本号,也就是API Level
,例如API-19
、API-20
、API-21
等等。
2、buildeToolVersion
是你构建工具的版本,其中包括了打包工具aapt
、dx
等等。这个工具的目录位于..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.bat
、aidl.exe
等等
【platform】是存放不同API-level
版本SDK
目录的地方
【platform-tools】是一些android
平台相关的工具,adb
、fastboot
等
【tools】是指的安卓开发相关的工具,例如android.bat
、ddms.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
低的设备呢?
满满的疑问
首先targetSdkVersion
是android
向前兼容的主要方式,怎么说呢?官方是这样说的:
除非更新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方法来走,保证了程序运行的一致性。也就是向前兼容性。