Android關(guān)于compileSdkVersion熊赖,minSdkVersion與targetSdkVersion詳解
compileSdkVersion:
通俗的講compileSdkVersion為編譯APK所使用的SDk版本(hint:設(shè)置此版本需保證你的SDK中包含此版本)朦蕴,編譯版本對運行時行為不會產(chǎn)生任何影響瓶摆,建議使用最新的編譯版本編譯(避免廢除的API凹蜂,為使用新的API做準備)馍驯。在使用library支持庫時,google提供的系統(tǒng)支持庫(以com.android.support開頭)需要使用相應(yīng)的編譯版本去編譯玛痊,假如編譯版本小于library版本汰瘫,編譯會不通過。通常擂煞,新版的 Support Library 隨著新的系統(tǒng)版本而發(fā)布混弥,它為系統(tǒng)新增加的 API 和新特性提供兼容性支持。另外颈娜,其他從遠程服務(wù)器集成的三方包剑逃,編譯版本需要符合SDK所要求的最低版本。
minSdkVersion:
minSdkVwesion應(yīng)該是比較容易理解的了官辽,APK運行的最低版本(如果你手機的操作系統(tǒng)版本低于該版本蛹磺,將無法安裝此應(yīng)用程序),當你的程序調(diào)用的API大于minSdkVersion時同仆,系統(tǒng)會給出警告萤捆,因為當手機操作系統(tǒng)版本較低的手機安裝此應(yīng)用并且調(diào)用此API時,會調(diào)用不到,通常使用運行時檢查系統(tǒng)版本的方式解決俗或。當然google? SDK向下做了兼容(該API提供的功能將不會展示市怎,或者以其他形式展示),但是為了更好的用戶體驗辛慰,在程序中做處理是非常有必要的区匠,不然低版本的手機可能會以一種相對丑陋的方式展現(xiàn)某種功能,如果你是一個用心做產(chǎn)品的人帅腌,這一點是必須要重點關(guān)注的驰弄。
targetSdkVersion:
targetSdkVersion屬于三個屬性中相對難理解的了,也著實令很多人頭疼速客,下面就來梳理下targetSdkVersion到底是怎么一回事戚篙。
targetSdkVersion決定Android的系統(tǒng)行為,許多人在targetSdkVersion的版本選擇問題上很困惑溺职,假如你的應(yīng)用程序使用較低版本的API就能夠?qū)崿F(xiàn)所有的功能岔擂,(當然我說得是假如,就是后續(xù)也不會引入新的特性浪耘,也不會去拓展其他許多新功能乱灵,這種情況畢竟屬于極少數(shù)的)那你最好選擇能夠選擇的最低版本來作為你的目標版本(使用低版本API的其中一個好處,可以讓更多的Android系統(tǒng)運行的效果保持一致点待,即兼容性更好)阔蛉。當你改變compileSDKVersion的屬性值時不會影響Android系統(tǒng)運行行為弃舒,比如說癞埠,將compileSDKVersion屬性值設(shè)置為25,targetSdkVersion屬性值為23聋呢,開發(fā)的應(yīng)用程序在Android 7.0系統(tǒng)運行苗踪,不會以Android 7.0新增的行為運行,決定Android系統(tǒng)行為的仍然是targetSDKVersion削锰,假如你將應(yīng)用程序在Android5.0系統(tǒng)運行通铲,他將會以Android5.0的特性進行運行(降級處理,后面會具體講解時如何降級的) Android系統(tǒng)平臺的行為變更器贩,只有targetSdkVersion的屬性值被設(shè)置為大于或等于該系統(tǒng)平臺的API版本時颅夺,才會生效。另外targetSdkVersion是一個用于指定應(yīng)用的目標 API 級別的整數(shù)蛹稍。如果未設(shè)置吧黄,其默認值與為 minSdkVersion 指定的值相等。
那么targetSdkVersion是如何起作用的呢唆姐?當應(yīng)用程序在調(diào)用某個API時拗慨,此API在不同的不同的API版本上的表現(xiàn)形式不同,一般都有一個固定的分界線,假如分界線為API19赵抢,滿足API19就會以新的表現(xiàn)形式展現(xiàn)給用戶剧蹂,不滿足的話,就會以舊的形式表現(xiàn)烦却,在SDK中會有這樣一句代碼this.getApplicationInfo().targetSdkVersion(獲取targetsdkversion版本)宠叼,它會用這個版本與19進行比較,最終選擇該使用哪種表現(xiàn)形式其爵。
三個屬性的關(guān)系:minSdkVersion <= targetSdkVersion <= compileSdkVersion
假如你的應(yīng)用程序使用模塊化開發(fā)的話车吹, Android項目的權(quán)限是主module與依賴module權(quán)限的并集,Android項目以主Module的targetSDKVersion為準醋闭。也即是說窄驹,依賴Module targetSDKVersion的設(shè)置是無效的。
Android? SDK版本號與API的對應(yīng)關(guān)系: