android是一個不斷更新迭代的系統,而應用是基於android系統開發的,那麼天然就會出現一個問題即不一樣版本應用如何在不一樣的android版本運行?因此能夠概括android系統的設計目標有兩個android
首先apk的建立,是經過android stuido中指定的android sdk將你寫的代碼編譯打包。這裏的版本須要假設爲
compilesdk
,其次在apk的安裝運行也須要一個android sdk去解析apk,這裏的sdk,咱們假設爲currentsdk
web
從設計前言中,咱們知道有兩個sdk,分別是compilesdk
與currentsdk
,如今咱們來實現第一個設計目標即新平臺(帶有currentsdk
)如何運行舊應用(帶有compilesdk
),很顯然的一個方向是api
if(currentsdk > compilesdk){ //遇到不兼容問題是應該作的事情 ... }
由於最新的sdk在設計的時候在大部分狀況下會包含舊的sdk裏的函數,因此能夠用這樣的方式去處理。可是問題在於遇到不兼容的問題時應該用哪一版本的sdk的函數去運行,這裏就須要另外一個屬性targetsdk
來標識,因此能夠這樣設計。但前提須要保證targetsdk <= compilesdk
svg
if(currentsdk > targetsdk){ //遇到不兼容問題是應該作的事情 ... }
下面來處理第二個設計目標,即如何在舊平臺(帶有currentsdk
)如何運行新應用(帶有compilesdk
),若是用上訴的方式即函數
if(currentsdk < compilesdk){ //遇到不兼容問題是應該作的事情 ... }
就會出現問題,由於以前的老版本sdk是不必定能兼容處理compilesdk中的新函數的,因此咱們須要另外在應用中設置一個最小sdk即minsdk
來保證小於這個minsdk
的應用都不能進行安裝運行。若是你爲了保證最好的兼容性,那麼你付出的代價就是須要在IDE中改寫不少的代碼。這就是android studio中不少關於minsdk的提示的緣由。ui
在android中也是這樣設計的,有三個屬性是解決平臺兼容性問題的,minsdk
,targetsdk
和compilesdk
。minsdk
在必定程度上解決了舊平臺運行新應用,而targetsdk
在必定程度上解決了新平臺運行舊應用。compilesdk
僅僅是IDE編譯的sdk版本,他可讓你使用最新的api讓你的代碼更簡潔寫得更舒坦,可是編譯後的.dex
文件(相似.class
)和不是最新的api編譯出來是同樣的,這個就至關於語法糖的感受。設計