AndroidStudio:Android應(yīng)用的開發(fā)工具谣光,類似如Eclipse
Gradle:一個構(gòu)建工具;這類的構(gòu)建工具有Ant,android eclipse開發(fā)用到的就是;Maven;
buildToolsVersion:Android構(gòu)建工具的版本恕曲;
compileSdkVersion:編譯版本,運(yùn)行當(dāng)前項(xiàng)目所需要的Android SDK版本渤涌;
compileSdkVersion是告訴gradle用哪個SDK版本來編譯佩谣,和運(yùn)行時要求的版本號沒有關(guān)系;
buildToolsVersion的版本需要大于等于compileSdkVersion实蓬;高版本的buildTools可以構(gòu)建低版本編譯的Android程序茸俭;
這種情況就是說compileSdkVersion>buildToolsVersion,這是不允許的安皱;
targetSdkVersion:是 Android 系統(tǒng)提供前向兼容的主要手段瓣履;在 Android 4.4 (API 19)以后,AlarmManager 的set()和setRepeat()這兩個 API 的行為發(fā)生了變化练俐。在 Android 4.4 以前袖迎,這兩個 API 設(shè)置的都是精確的時間,系統(tǒng)能保證在 API 設(shè)置的時間點(diǎn)上喚醒 Alarm腺晾。因?yàn)槭‰娫?Android 4.4 系統(tǒng)實(shí)現(xiàn)了 AlarmManager 的對齊喚醒燕锥,這兩個 API 設(shè)置喚醒的時間,系統(tǒng)都對待成不精確的時間悯蝉,系統(tǒng)只能保證在你設(shè)置的時間點(diǎn)之后某個時間喚醒归形。
這時,雖然 API 沒有任何變化鼻由,但是實(shí)際上 API 的行為卻發(fā)生了變化暇榴,如果老的 APK 中使用了此 API,并且在應(yīng)用中的行為非常依賴 AlarmManager 在精確的時間喚醒蕉世,例如鬧鐘應(yīng)用蔼紧。如果 Android 系統(tǒng)不能保證兼容,老的 APK 安裝在新的系統(tǒng)上狠轻,就會出現(xiàn)問題奸例。
Android 系統(tǒng)是怎么保證這種兼容性的呢?這時候 targetSdkVersion 就起作用了向楼。APK 在調(diào)用系統(tǒng) AlarmManager 的set()或者setRepeat()的時候查吊,系統(tǒng)首先會查一下調(diào)用的 APK 的 targetSdkVersion 信息谐区,如果小于 19,就還是按照老的行為逻卖,即精確設(shè)置喚醒時間宋列,否者執(zhí)行新的行為。
源碼如: