有关compileSdkVersion、targetSdkVersion的笔记

来源:互联网 发布:软件开发团队组成 编辑:程序博客网 时间:2024/06/01 10:41

在 Module 的 build.gradle 文件中,有三个有关 SdkVersion 的内容需要定义,分别是:compileSdkVersionminSdkVersiontargetSdkVersion

有关于这三个值的含义,可以先阅读下面这两篇文章:
【1】Android targetSdkVersion 原理
【2】如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion


这里写图片描述


这里写图片描述
其中,最好理解的就是minSdkVersion,这个简单的说就是定义了编译好的的 APK 可以运行的最低的 Android 设备版本号。
根据上图,还需要注意的是,如果只在较高版本的系统上才使用某些 API,通常使用运行时检查系统版本的方式解决。 当在某些系统级别低当设备上使用较高版本的系统才有的 API,则需要在主动在代码中进行判断,当前 APK 运行的设备的系统版本是否高于该 API 所对应的系统版本,否则就不能够直接使用。


这里写图片描述


而对于compileSdkVersiontargetSdkVersion,如果对于其概念还有混淆的话,建议先多度几遍上述文章,尤其是第一篇文章中有关于那个例子的讲解。

这里在根据那个例子详细的说明一下(会尽量使用通俗的话语说明,如有错误,欢迎指正):

在 Android 4.4 (API 19)以后,AlarmManager 的 set() 和 setRepeat() 这两个 API 的行为发生了变化。在 Android 4.4 以前,这两个 API 设置的都是精确的时间,系统能保证在 API 设置的时间点上唤醒 Alarm。因为省电原因 Android 4.4 系统实现了 AlarmManager 的对齐唤醒,这两个 API 设置唤醒的时间,系统都对待成不精确的时间,系统只能保证在你设置的时间点之后某个时间唤醒。

假设一个 APK 设置的 targetSdkVersion 为18,此时有两种情况,compileSdkVersion 设置的为 18 或者 19 ,但是无论是那种情况,当 APK 安装在 Android 4.4 当设备上时,使用 AlarmManagerset() 或者 setRepeat() 都会是使用的精确的时间点,因为Android 4.4 的设备的系统(OS),会为了兼容性,实现两种方案,一个是精确的时间点,另一个对待成不精确的时间,而targetSdkVersion 为18 使用的就是精确的时间点 的方案,这样,就能保证在应用中的行为非常依赖 AlarmManager 在精确的时间唤醒时不会因为是安装在 Android 4.4 的设备上而不精确了。
但是,也有人会注意到compileSdkVersion 设置的为 18 或者 19 的差别,那就是,在编译时,那就是,当 compileSdkVersion 为 18 时,会直接使用 精准当时间点 的方案;而设置为 19 时,会先判断一下 targetSdkVersion 为 18 ,然后通过if-else 来使用 精准当时间点 的方案。

而如果是 targetSdkVersion 为19,则当 APK 安装在 Android 4.4 以下设备时,会因为该设备对应当系统 只实现了 精确的时间点 的方案而 “被迫” 在精确的时间点被唤醒,而如果是安装在 Android 4.4 的设备上,则会 “主动” 对待成不精确的时间,系统只能保证在你设置的时间点之后某个时间唤醒。

阅读全文
0 0
原创粉丝点击