compileSdkVersion,minSdkVersion,targetSdkVersion 的區別和比較

compileSdkVersion,miniSdkVersion,targetSdkVersion的作用 :

1.compileSdkVersion:這個主要是我們編譯app時候用的sdk版本,就我們在AndroidStudio上面點擊運行時候的編譯時候的環境。記住這個只是在編譯時候選擇的版本,不涉及到運行時候的行爲。由於androidStudio有預編譯的功能所以會提示一些警告,提前瞭解新的sdk api。修改compileSdkVersion並不會影響我們的我們生成的app在手機先的行爲。例如在android6.0之前的系統是不需要動態申請權限的,在6.0之後的系統需要動態申請權限。這個和你的compileSdkVersion的版本選擇是完全沒有任何關係的。也就是說你app運行時需不需要動態申請權限和你complieSdk是否設置的6.0,沒有半毛錢關係,記住compileSDK只是關係到你編譯出來的包。不是運行的表現行爲。所以修改compileSdkVersion是不會改變你app在手機上運行的表現行爲的。但是我們一般情況,也是最理想的情況就是把compileSdkVersion設置到最高,因爲使用新的編譯檢查可以獲得很多好處,可以避免棄用的API,並且爲使用新的API做好準備。

2.minSdkVersion:這個就是程序運行的最低的要求的Sdk,就是給說如果我設置的minSdkVersion是15的話那麼如果你係統低於這個SdkVersion是安裝不上的。還有一個好處就是。例如你設置miniSdk是3.0的話,你寫的方法只有在4.0後纔有的方法,這個時候就會提示你在3.0的時候是沒有這個方法的。
Studio會給你這樣的提示。說但前的最低版本level是15這個方法是在23上纔有的。

我們得這樣做:

if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.M) {
        requestPermissions(newString[]{""},REQUEST_CODE_ASK_CALL_PHONE);
         }else{
               //不需要申請權限直接調用我們需要處理的方法。
        }

3.targetSdkVersion:targetSdk:主要是提供向前兼容的作用,什麼意思呢?手機系統4.0的,或者 5.0或者更高,但是編譯包的時候用的compileSdk是6.0,但是表現形式得按照targetSdk。1.提供向下兼容。2.確定app的表現行爲。3.這允許你在適應新的行爲變化之前就可以使用新的 API (因爲你已經更新了 compileSdkVersion 打出來的包就是在compileSdkVersion上打出來的)。

A.當系統版本高於targetSdkVersion時候:
假設我們的targetSdkVersion是22(就是5.0)不需要動態申請權限,但是我們的系統是6.0的。現在程序運行到了需要某個需要權限的地方了。此時想想我們的手機該怎麼辦。
系統邏輯是這樣的。這不代碼系統源碼,只是說處理邏輯。

finalint sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
          if(sdkVersion<Build.VERSION_CODES.M){
                //這裏的M就是level 23也就是6.0的系統
                 //這裏的判斷是如果當前的打包的targetSdkVersion小於23
                 那麼這裏就不需要動態申請權限直接可以調取開放的權限
          }else{
          //否則系統認爲你需要動態申請權限
          }

注意這裏是系統處理。不需要你顯式的寫這些代碼。是系統內部的代碼和自動處理。所以targetSdkVersion是確定表現形式的。並且也做到了向下兼容。

B.當系統版本等於targetSdkVersion時候
當安裝app的時候targetSdkVersion剛好等需系統的level,這個時候Andorid平臺會認爲這個程序在此版本上已經經過了充分的測試。不必爲此程序開啓兼容性檢查判斷的工作了。也就是說,如果targetSdkVersion與目標設備的API版本相同時,運行效率可能會高一些。

C.當系統版本小於targetSdkVersion的時候
還是舉栗子把:targetSdkVersion=23的時候,但是系統版本是22很明顯你代碼裏面做了動態權限分配。但是系統版本不支持。怎麼辦呢?我們minSdk不就是處理這個情況的嗎?

從這裏看出targetSdkVersion的設置主要是當系統版本高於設置的target的時候。
總的來說你的app的表現行爲和你是否修改過targetSdkVersion是有關係的。當我們修改targetSdkVersion的時候必須要做完整的測試。

minSdkVersion<=targetSdkVersion<=compileSdkVersion

minSDKVersion查看創建項目的時候的版本分部圖表確定,然後targetSdkVersion最好和compileSdkVersion一樣。CompileSdk選最新的,因爲你更新了 compileSdkVersion 打出來的包就是在compileSdkVersion上打出來的。可以使用最新的api。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章