compileSdkVersion,minSdkVersion,targetSdkVersion 作用和區別

qyf404 7年前發布 | 23K 次閱讀 安卓開發 Android開發 移動開發

Android大家都知道的,版本碎片化比較嚴重,做版本的適配是必須,從而有了下面的這些知識點。

1.compileSdkVersion,minSdkVersion,targetSdkVersion作用和如何選擇關系.

2.Support Library 包的選擇,v4,v7等包到底是干啥的。

3.我們到底該如何選擇這些東西運行項目的時候才能正確運行。

下面我將圍繞這些問題和疑問來給大家一步步講解他們的關系。

一丶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

//這里的M就是level 23也就是6.0的系統

//這里的判斷是如果當前的打包的targetSdkVersion小于23

那么這里就不需要動態申請權限直接可以調取開放的權限

}else{

//否則系統認為你需要動態申請權限

}

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

B.當系統版本等于targetSdkVersion時候

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

C.當系統版本小于targetSdkVersion的時候

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

從這里看出targetSdkVersion的設置主要是當系統版本高于設置的target的時候。

http://www.race604.com/android-targetsdkversion/講targetSdkVersion作用的。

總的來說你的app的表現行為和你是否修改過targetSdkVersion是有關系的。當我們修改他的時候要做足夠的測試。

minSdkVersion<=targetSdkVersion<=compileSdkVersion

minSDKVersion查看創建項目的時候的版本分部圖表確定,然后targetSdkVersion最好和compileSdkVersion一樣。CompileSdk選最新的,因為你更新了

compileSdkVersion 打出來的包就是在compileSdkVersion上打出來的。可以使用最新的api

上面就是講的這個3個sdkVerison的作用了。要是還有不明白的可以留言,我將會盡我所能為大家解答。

二丶buildToolsVersion和這些配置的sdkVesion有什么關系呢。

buildToolsVersion是講的你構建工具的版本號是多少,規則是可以用高的構建工具來構建低版本Sdk的工程。

三丶接下來講講v4,v7,v13的

總體來說這個就是一個libs和我們在github上都的libs一模一樣。由于android版本碎片化太嚴重了。導致的,說一個案例在剛開始的時候android系統是沒有ViewPager的。是后面的系統才出現的。那么以前的系統想用ViewPager該怎么辦呢?好辦和我們項目需要自定義某些特殊的View一樣,沒有的話我們要么自己寫,要么到github上面去找然后引入到我們的項目中。這里從github上導入就是這個意思了。但是為啥叫做v4呢。就是說這個包可以兼容到1.6以后的系統可以使用。所以1.6以下的系統是用不了的。v7包的意思就是可以兼容到2.3以上的系統。另外v7包是依賴v4包的。可以看出v4包的minSdk肯定是等于1.6了。v7包的minSdk就會是2.3。v13包主要是在平板上使用,一般在手機端不會用。

再通過這里我們就會發現一個事情了,我們想要使用v7包我們project,對nimSdk是有要求的我們的minSdk不能比support包的還低吧。

看到了吧。提示我們要使用v7包必須要minSdk在9或以上

這里注意了,就是我們在使用surpport包的時候或者lbs的時候我們的minSdk不能比他的還低。

大家有什么疑問可以關注我公眾號在上面提問,每周都會給大家提供純手打干貨。謝謝大家了。

 

來自:http://www.jianshu.com/p/72d311d72fcb

 

 本文由用戶 qyf404 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!