如何解決android兼容問題

android兼容性設計目標

android是一個不斷更新迭代的系統,而應用是基於android系統開發的,那麼天然就會出現一個問題即不一樣版本應用如何在不一樣的android版本運行?因此能夠概括android系統的設計目標有兩個android

  • 新平臺可以兼容的運行舊應用
  • 舊平臺可以兼容的運行新應用

設計前言

  • 在思考如何實現這兩個問題以前,有個須要提出的問題是apk是如何建立與安裝的?

首先apk的建立,是經過android stuido中指定的android sdk將你寫的代碼編譯打包。這裏的版本須要假設爲compilesdk,其次在apk的安裝運行也須要一個android sdk去解析apk,這裏的sdk,咱們假設爲currentsdkweb

設計方案

從設計前言中,咱們知道有兩個sdk,分別是compilesdkcurrentsdk,如今咱們來實現第一個設計目標即新平臺(帶有currentsdk)如何運行舊應用(帶有compilesdk),很顯然的一個方向是api

if(currentsdk > compilesdk){
    //遇到不兼容問題是應該作的事情
    ...
}

由於最新的sdk在設計的時候在大部分狀況下會包含舊的sdk裏的函數,因此能夠用這樣的方式去處理。可是問題在於遇到不兼容的問題時應該用哪一版本的sdk的函數去運行,這裏就須要另外一個屬性targetsdk來標識,因此能夠這樣設計。但前提須要保證targetsdk <= compilesdksvg

if(currentsdk > targetsdk){
    //遇到不兼容問題是應該作的事情
    ...
}

下面來處理第二個設計目標,即如何在舊平臺(帶有currentsdk)如何運行新應用(帶有compilesdk),若是用上訴的方式即函數

if(currentsdk < compilesdk){
    //遇到不兼容問題是應該作的事情
    ...
}

就會出現問題,由於以前的老版本sdk是不必定能兼容處理compilesdk中的新函數的,因此咱們須要另外在應用中設置一個最小sdk即minsdk來保證小於這個minsdk的應用都不能進行安裝運行。若是你爲了保證最好的兼容性,那麼你付出的代價就是須要在IDE中改寫不少的代碼。這就是android studio中不少關於minsdk的提示的緣由。ui

總結

在android中也是這樣設計的,有三個屬性是解決平臺兼容性問題的,minsdk,targetsdkcompilesdkminsdk在必定程度上解決了舊平臺運行新應用,而targetsdk在必定程度上解決了新平臺運行舊應用。compilesdk僅僅是IDE編譯的sdk版本,他可讓你使用最新的api讓你的代碼更簡潔寫得更舒坦,可是編譯後的.dex文件(相似.class)和不是最新的api編譯出來是同樣的,這個就至關於語法糖的感受。設計