關(guān)于Android SDK里的compileSdk不跟、minSdk、targetSdk获高、buildTools哈肖、Tools、Platform-tools

本篇文章介紹了Android SDK更新的包里關(guān)于compileSdk念秧、minSdk淤井、targetSdk、buildTools摊趾、Tools币狠、Platform-tools的概念

0 前言

在開發(fā)中經(jīng)常發(fā)現(xiàn)有AS有更新提示,在之前沒有完全弄明白這些SDK砾层,Tools的概念前都不敢輕易去更新漩绵,總擔(dān)心更完就編譯出錯,API不能用==情況肛炮。所以對這幾個概念進(jìn)行深度梳理止吐。

1 參考文章

國外一篇很清楚的關(guān)于compileSdk、minSdk侨糟、targetSdk的文章碍扔,建議看完譯文后再重新看一遍原文
原文:picking-your-compilesdkversion-minsdkversion-targetsdkversion
譯文:如何選擇 compileSdkVersion, minSdkVersion 和 targetSdkVersion
關(guān)于tools的解釋:Android關(guān)于buildToolVersion與CompileSdkVersion的區(qū)別

2 compileSdk、minSdk秕重、targetSdk到概念

以下內(nèi)容摘自譯文

2.1 compileSdkVersion

compileSdkVersion 告訴 Gradle 用哪個 Android SDK 版本編譯你的應(yīng)用不同。使用任何新添加的 API 就需要使用對應(yīng) Level 的 Android SDK。
需要強(qiáng)調(diào)的是 修改 compileSdkVersion 不會改變運行時的行為 溶耘。當(dāng)你修改了 compileSdkVersion 的時候二拐,可能會出現(xiàn)新的編譯警告、編譯錯誤凳兵,但新的 compileSdkVersion 不會被包含到 APK 中:它純粹只是在編譯的時候使用百新。(你真的應(yīng)該修復(fù)這些警告,他們的出現(xiàn)一定是有原因的)
因此我們強(qiáng)烈推薦 總是使用最新的 SDK 進(jìn)行編譯 庐扫。在現(xiàn)有代碼上使用新的編譯檢查可以獲得很多好處吟孙,避免新棄用的 API 澜倦,并且為使用新的 API 做好準(zhǔn)備。
注意杰妓,如果使用 Support Library 藻治,那么使用最新發(fā)布的 Support Library 就需要使用最新的 SDK 編譯。例如巷挥,要使用 23.1.1 版本的 Support Library 桩卵,compileSdkVersion 就必需至少是 23 (大版本號要一致!)倍宾。通常雏节,新版的 Support Library 隨著新的系統(tǒng)版本而發(fā)布,它為系統(tǒng)新增加的 API 和新特性提供兼容性支持高职。

2.2 minSdkVersion

如果 compileSdkVersion 設(shè)置為可用的最新 API钩乍,那么 minSdkVersion 則是應(yīng)用可以運行的最低要求。minSdkVersion 是 Google Play 商店用來判斷用戶設(shè)備是否可以安裝某個應(yīng)用的標(biāo)志之一怔锌。
在開發(fā)時 minSdkVersion 也起到一個重要角色:lint 默認(rèn)會在項目中運行寥粹,它在你使用了高于 minSdkVersion 的 API 時會警告你,幫你避免調(diào)用不存在的 API 的運行時問題埃元。如果只在較高版本的系統(tǒng)上才使用某些 API涝涤,通常使用運行時檢查系統(tǒng)版本的方式解決。
請記住岛杀,你所使用的庫阔拳,如 Support LibraryGoogle Play services,可能有他們自己的 minSdkVersion 类嗤。你的應(yīng)用設(shè)置的 minSdkVersion 必需大于等于這些庫的 minSdkVersion 糊肠。例如有三個庫,它們的 minSdkVersion 分別是 4, 7 和 9 遗锣,那么你的 minSdkVersion 必需至少是 9 才能使用它們货裹。在少數(shù)情況下,你仍然想用一個比你應(yīng)用的 minSdkVersion 還高的庫(處理所有的邊緣情況黄伊,確保它只在較新的平臺上使用),你可以使用 tools:overrideLibrary 標(biāo)記派殷,但請做徹底的測試还最!
當(dāng)你決定使用什么 minSdkVersion 時候,你應(yīng)該參考當(dāng)前的 Android 分布統(tǒng)計毡惜,它顯示了最近 7 天所有訪問 Google Play 的設(shè)備信息拓轻。他們就是你把應(yīng)用發(fā)布到 Google Play 時的潛在用戶。最終這是一個商業(yè)決策問題经伙,取決于為了支持額外 3% 的設(shè)備扶叉,確保最佳體驗而付出的開發(fā)和測試成本是否值得勿锅。
當(dāng)然,如果某個新的 API 是你整個應(yīng)用的關(guān)鍵枣氧,那么確定 minSdkVersion 的值就比較容易了溢十。不過要記得 14 億設(shè)備中的 0.7% 也是個不小的數(shù)字。

2.3 targetSdkVersion

三個版本號中最有趣的就是 targetSdkVersion 了达吞。 targetSdkVersion 是 Android 提供向前兼容的主要依據(jù)张弛,在應(yīng)用的 targetSdkVersion 沒有更新之前系統(tǒng)不會應(yīng)用最新的行為變化。這允許你在適應(yīng)新的行為變化之前就可以使用新的 API (因為你已經(jīng)更新了 compileSdkVersion 不是嗎酪劫?)吞鸭。
targetSdkVersion 所暗示的許多行為變化都記錄在 VERSION_CODES 文檔中了,但是所有恐怖的細(xì)節(jié)也都列在每次發(fā)布的平臺亮點中了覆糟,在這個 API Level 表中可以方便地找到相應(yīng)的鏈接刻剥。
例如,Android 6.0 變化文檔中談了 target 為 API 23 時會如何把你的應(yīng)用轉(zhuǎn)換到運行時權(quán)限模型上滩字,Android 4.4 行為變化闡述了 target 為 API 19 及以上時使用 set()setRepeating() 設(shè)置 alarm 會有怎樣的行為變化造虏。由于某些行為的變化對用戶是非常明顯的(棄用的 menu 按鈕,運行時權(quán)限等)踢械,所以將 target 更新為最新的 SDK 是所有應(yīng)用都應(yīng)該優(yōu)先處理的事情酗电。但這不意味著你一定要使用所有新引入的功能,也不意味著你可以不做任何測試就盲目地更新 targetSdkVersion 内列,請一定在更新 targetSdkVersion 之前做測試撵术!你的用戶會感謝你的。
3 buildTools话瞧、Tools嫩与、Platform-tools
buildTools、Tools交排、Platform-tools這3個東西其實都是開發(fā)工具划滋,即它的版本更新并不會影響運行的APP,只是工具上的升級埃篓。
在 build.gradle 中的 buildToolsVersion 版本號一般是API-LEVEL.0.0处坪,其中API-LEVEL要大于等于compileSdkVersion。
在前面的compileSdkVersion解釋中建議選用最新的SDK Version架专,so同窘,buildToolsVersion也建議選擇最新的版本號。build.gradle中這2個的修改可以讓你體驗最新的API和工具部脚。
至于Tools想邦、Platform-tools這2個東西,直接更新最新吧委刘。Only 工具丧没。

總結(jié)

經(jīng)過上面的深入了解后鹰椒,總結(jié)以下:
當(dāng)AS提示Gradle或者Android SDK更新后,大膽更新吧呕童,先全部下載下來
更新完后漆际,直接將compileSdkVersion、buildToolsVersion修改為最新的版本號拉庵,放心的更改灿椅,該完后如果有廢棄API編譯器還會給你提示。
minSdkVersion 和 targetSdkVersion 要慎重修改钞支。除非核心代碼中會提高minSdkVersion的版本號茫蛹,其他的建議運行時判斷版本號。targetSdkVersion的修改要注意代碼是否適應(yīng)更新后的版本號烁挟,要測試完全婴洼,最典型的例子就是23版本的運行時權(quán)限問題的處理。如果targetSdkVersion提升到了23撼嗓,如果代碼沒有進(jìn)行運行時權(quán)限判斷會直接崩潰柬采。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市且警,隨后出現(xiàn)的幾起案子粉捻,更是在濱河造成了極大的恐慌,老刑警劉巖斑芜,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩刃,死亡現(xiàn)場離奇詭異,居然都是意外死亡杏头,警方通過查閱死者的電腦和手機(jī)盈包,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醇王,“玉大人呢燥,你說我怎么就攤上這事≡⒚洌” “怎么了叛氨?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棘伴。 經(jīng)常有香客問我寞埠,道長,這世上最難降的妖魔是什么排嫌? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任畸裳,我火速辦了婚禮缰犁,結(jié)果婚禮上淳地,老公的妹妹穿的比我還像新娘怖糊。我一直安慰自己,他們只是感情好颇象,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布伍伤。 她就那樣靜靜地躺著,像睡著了一般遣钳。 火紅的嫁衣襯著肌膚如雪扰魂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天蕴茴,我揣著相機(jī)與錄音劝评,去河邊找鬼。 笑死倦淀,一個胖子當(dāng)著我的面吹牛蒋畜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撞叽,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姻成,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愿棋?” 一聲冷哼從身側(cè)響起科展,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糠雨,沒想到半個月后才睹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡见秤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年砂竖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹃答。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡乎澄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出测摔,到底是詐尸還是另有隱情置济,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布锋八,位于F島的核電站浙于,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挟纱。R本人自食惡果不足惜羞酗,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望紊服。 院中可真熱鬧檀轨,春花似錦胸竞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至讹挎,卻和暖如春校赤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筒溃。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工马篮, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怜奖。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓积蔚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烦周。 傳聞我的和親對象是個殘疾皇子尽爆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容