Android SDK目錄及版本號區(qū)別

今天又有人問Tools涤妒,Build-Tools,Platform-tools有什么區(qū)別硅堆,是干嘛的渐逃?

現(xiàn)在對SDK目錄做一下總結(jié)闡述!

SDK目錄

add-ons

這里面保存著附加庫祖屏,第三方公司為android 平臺開發(fā)的附加功能系統(tǒng)袁勺。比如GoogleMaps畜普,當(dāng)然你如果安裝了OphoneSDK,這里也會有一些類庫在里面钝荡。

docs

這里面是Android SDKAPI參考文檔埠通,所有的API都可以在這里查到逛犹。

extras

該文件夾下存放了Android support v4虽画,v7,v13渗柿,v17包脖岛;

還有g(shù)oogle提供額USB驅(qū)動柴梆、Intel提供的硬件加速等附加工具包,

和market_licensing作為AndroidMarket版權(quán)保護(hù)組件声登,一般發(fā)布付費(fèi)應(yīng)用到電子市場可以用它來反盜版悯嗓。

platforms

是每個平臺的SDK真正的文件,存放了不同版本的android系統(tǒng)铅祸。里面會根據(jù)APILevel劃分的SDK版本合武,這里就以Android2.2來說临梗,進(jìn)入后有 一個android-8的文件夾,android-8進(jìn)入后是Android2.2SDK的主要文件稼跳,其中data保存著一些系 統(tǒng)資源盟庞,images是模擬器映像文件,skins則是Android模擬器的皮膚汤善,templates是工程創(chuàng)建的默認(rèn)模板什猖,android.jar則 是該版本的主要framework文件。

samples

是Android SDK自帶的默認(rèn)示例工程红淡,里面的apidemos強(qiáng)烈推薦初學(xué)者運(yùn)行學(xué) 習(xí)不狮,對于SQLite數(shù)據(jù)庫操作可以查看NotePad這個例子在旱,對于游戲開發(fā)Snake摇零、LunarLander都是不錯的例子,對于Android主 題開發(fā)Home則是androidm5時代的主題設(shè)計(jì)原理桶蝎。

下面重點(diǎn)介紹這3個Wそ觥!?∷浴雾家!

platform-tools

保存著一些Android不同平臺相關(guān)工具铃彰,比如adb绍豁,sqlite3等文件。Fastboot 刷機(jī)工具牙捉。

tools

作為SDK根目錄下的tools文件夾竹揍,這里包含了android 開發(fā)和調(diào)試的工具,比如ddms用于啟動Android調(diào)試工具邪铲,比如logcat芬位、屏幕截圖和文件管理器,而draw9patch則是繪制android平臺的可縮放png圖片的工具带到, 而monkeyrunner則是一個不錯的壓力測試應(yīng)用昧碉,模擬用戶隨機(jī)按鍵,mksdcard則是模擬器SD映像的創(chuàng)建工具,emulator是 Android SDK模擬器主程序被饿,不過從android 1.5開始四康,需要輸入合適的參數(shù)才能啟動模擬器,traceview作為android平臺上重要的調(diào)試工具狭握。hierarchyviewer是一個很強(qiáng)大的對我們的布局文件進(jìn)行分析的工具闪金,可以看到我們的layout是否過度渲染!

build-tools

保存著一些Android平臺相關(guān)通用工具论颅,比如adb哎垦、和aapt、aidl恃疯、dx等文件漏设。

aapt即Android Asset Packaging Tool , 在SDK的build-tools目錄下. 該工具可以查看, 創(chuàng)建, 更新ZIP格式的文檔附件(zip, jar, apk). 也可將資源文件編譯成二進(jìn)制文件.

Adb即android debug bridge 管理模擬器和真機(jī)的萬能工具,ddms 調(diào)試環(huán)境

AIDL即 Android Interface definition language 它是一種android內(nèi)部進(jìn)程通信接口的描述語言今妄,通過它我們可以定義進(jìn)程間的通信接口

Emulator即android 的模擬器

dx:轉(zhuǎn)化.class中間代碼為dvlik中間代碼,所有經(jīng)過java編譯的生成.class文件都需要此工具進(jìn)行轉(zhuǎn)換,最后打包進(jìn)apk文件中.

Dexdump即Android Emulator中可以找到一個名為dexdump的程序愿题,通過dexdump可以查看出apk文件中的dex執(zhí)行情況,粗略分析出原始java代碼是什 么樣的和Dot Net中的Reflector很像蛙奖。

注意:這里會涉及到一個問題潘酗,就是build-tools后邊會有不同的api版本號!

①buildeToolVersion是你構(gòu)建工具的版本雁仲,這個版本號一般是API-LEVEL.0.0仔夺。 例如I/O2014大會上發(fā)布了API20對應(yīng)的build-tool的版本就是20.0.0,在這之間可能有小版本攒砖,例如20.0.1等等缸兔。

②在ecplise的project.properties中可以設(shè)置sdk.buildtools=20.0.0。也可以不設(shè)置吹艇,不設(shè)置的話就是指定最新版本惰蜜。而在android studio中是必須在build.gradle中設(shè)置。

③Android都是向下兼容的受神,你可以用高版本的build-tool去構(gòu)建一個低版本的sdk工程抛猖,例如build-tool的版本為20,去構(gòu)建一個sdk版本為18的工程鼻听!

說到這财著,就不得不提一下,項(xiàng)目中minsdkversion撑碴、compilesdkversion撑教、targetsdkversion的區(qū)別!醉拓!

min伟姐、compile收苏、target版本的區(qū)別

這里參考一下谷歌開發(fā)者的一篇推送文章!講的很詳細(xì)

compileSdkVersion, minSdkVersion 和 targetSdkVersion 的作用:他們分別控制可以使用哪些 API 愤兵,要求的 API 級別是什么倒戏,以及應(yīng)用的兼容模式。

compileSdkVersion

compileSdkVersion 告訴 Gradle 用哪個 Android SDK 版本編譯你的應(yīng)用恐似。使用任何新添加的 API 就需要使用對應(yīng)等級的 Android SDK杜跷。

需要強(qiáng)調(diào)的是修改 compileSdkVersion 不會改變運(yùn)行時的行為。當(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 (大版本號要一致J拧)沥匈。通常,新版的 Support Library 隨著新的系統(tǒng)版本而發(fā)布忘渔,它為系統(tǒng)新增加的 API 和新特性提供兼容性支持高帖。

minSdkVersion

如果 compileSdkVersion 設(shè)置為可用的最新 API,那么minSdkVersion 則是應(yīng)用可以運(yùn)行的最低要求畦粮。minSdkVersion 是 Google Play 商店用來判斷用戶設(shè)備是否可以安裝某個應(yīng)用的標(biāo)志之一散址。

在開發(fā)時 minSdkVersion 也起到一個重要角色:lint 默認(rèn)會在項(xiàng)目中運(yùn)行,它在你使用了高于 minSdkVersion 的 API 時會警告你锈玉,幫你避免調(diào)用不存在的 API 的運(yùn)行時問題爪飘。如果只在較高版本的系統(tǒng)上才使用某些 API义起,通常使用“運(yùn)行時檢查系統(tǒng)版本”的方式解決拉背。

請記住,你所使用的庫默终,如 Support Library 或 Google Play services椅棺,可能有他們自己的 minSdkVersion 犁罩。你的應(yīng)用設(shè)置的 minSdkVersion 必須大于等于這些庫的 minSdkVersion 。例如有三個庫两疚,它們的 minSdkVersion 分別是 4, 7 和 9 床估,那么你的 minSdkVersion 必需至少是 9 才能使用它們。在少數(shù)情況下诱渤,你仍然想用一個比你應(yīng)用的 minSdkVersion 還高的庫(處理所有的邊緣情況丐巫,確保它只在較新的平臺上使用),你可以使用 tools:overrideLibrary 標(biāo)記勺美,但請做徹底的測試递胧!

targetSdkVersion

三個版本號中最有趣的就是 targetSdkVersion 了。 targetSdkVersion 是 Android 提供向前兼容的主要依據(jù)赡茸,在應(yīng)用的 targetSdkVersion 沒有更新之前系統(tǒng)不會應(yīng)用最新的行為變化缎脾。這允許你在適應(yīng)新的行為變化之前就可以使用新的 API (因?yàn)槟阋呀?jīng)更新了 compileSdkVersion 不是嗎?)占卧。

targetSdkVersion 所暗示的許多行為變化都記錄在 VERSION_CODES 文檔中了遗菠,但是所有恐怖的細(xì)節(jié)也都列在每次發(fā)布的平臺亮點(diǎn)中了,在這個 API Level 表中可以方便地找到相應(yīng)的鏈接华蜒。

例如辙纬,《Android 6.0 的變化》中談了 target 為 API 23 時會如何把你的應(yīng)用轉(zhuǎn)換到運(yùn)行時權(quán)限模型上,《Android 4.4 的行為變化》闡述了 target 為 API 19 及以上時使用 set() 和 setRepeating() 設(shè)置 alarm 會有怎樣的行為變化叭喜。

由于某些行為的變化對用戶是非常明顯的(棄用的 menu 按鈕牲平,運(yùn)行時權(quán)限等),所以將 target 更新為最新的 SDK 是所有應(yīng)用都應(yīng)該優(yōu)先處理的事情域滥。但這不意味著你一定要使用所有新引入的功能纵柿,也不意味著你可以不做任何測試就盲目地更新 targetSdkVersion ,請一定在更新 targetSdkVersion 之前做測試启绰!你的用戶會感謝你的昂儒。

Gradle 和 SDK 版本

所以設(shè)置正確的 compileSdkVersion, minSdkVersion 和 targetSdkVersion 很重要。如你所想委可,Gradle 和 Android Studio 都在構(gòu)建系統(tǒng)中集成了它們渊跋。在你的模塊的 build.gradle 文件中(也可以在 Android Studio 的項(xiàng)目結(jié)構(gòu)選項(xiàng)中)設(shè)置:

android { ? ? ?

compileSdkVersion23

buildToolsVersion"23.0.1"

defaultConfig {? ? ? ??

applicationId"com.example.checkyourtargetsdk"

minSdkVersion7

targetSdkVersion23

versionCode1

versionName “1.0” ? ? ?} ??

?}

編譯時用到的 compileSdkVersion 是和構(gòu)建工具版本一起設(shè)置的 Android 設(shè)置之一。其他兩個稍有不同着倾,他們在構(gòu)建變體(build variant)的那里聲明拾酝。defaultConfig 是所有構(gòu)建變體的基礎(chǔ),也是設(shè)置這些默認(rèn)值的地方卡者。你可以想象在一個更復(fù)雜的系統(tǒng)中蒿囤,應(yīng)用的某些版本可能會有不同的 minSdkVersion 。

minSdkVersion 和 targetSdkVersion 與 compileSdkVersion 的另一個不同之處是它們會被包含進(jìn)最終的 APK 文件中崇决,如果你查看生成的 AndroidManifest.xml 文件材诽,你會看到類似下面這樣的標(biāo)簽:

如果你在 manifest 文件中手工設(shè)置底挫,你會發(fā)現(xiàn) Gradle 在構(gòu)建時會忽略它們(盡管其它構(gòu)建系統(tǒng)可能會明確依賴它們)。

綜合來看

如果你按照上面示例那樣配置脸侥,你會發(fā)現(xiàn)這三個值的關(guān)系是:

minSdkVersion <=targetSdkVersion <= compileSdkVersion

這種直覺是合理的建邓,如果 compileSdkVersion 是你的最大值,minSdkVersion 是最小值睁枕,那么最大值必需至少和最小值一樣大且 target 必需在二者之間官边。

理想上,在穩(wěn)定狀態(tài)下三者的關(guān)系應(yīng)該更像這樣:

minSdkVersion(lowest possible)<=targetSdkVersion==compileSdkVersion(latestSDK)

用較低的 minSdkVersion 來覆蓋最大的人群外遇,用最新的 SDK 設(shè)置 target 和 compile 來獲得最好的外觀和行為拒逮。

轉(zhuǎn)載至:http://blog.csdn.net/aiynmimi/article/details/51028499 ?感謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臀规,一起剝皮案震驚了整個濱河市滩援,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塔嬉,老刑警劉巖玩徊,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谨究,居然都是意外死亡恩袱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門胶哲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔塔,“玉大人,你說我怎么就攤上這事鸯屿〕憾郑” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵寄摆,是天一觀的道長谅辣。 經(jīng)常有香客問我,道長婶恼,這世上最難降的妖魔是什么桑阶? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮勾邦,結(jié)果婚禮上蚣录,老公的妹妹穿的比我還像新娘。我一直安慰自己眷篇,他們只是感情好萎河,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般公壤。 火紅的嫁衣襯著肌膚如雪换可。 梳的紋絲不亂的頭發(fā)上椎椰,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天厦幅,我揣著相機(jī)與錄音,去河邊找鬼慨飘。 笑死确憨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓤的。 我是一名探鬼主播休弃,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼圈膏!你這毒婦竟也來了塔猾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤稽坤,失蹤者是張志新(化名)和其女友劉穎丈甸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尿褪,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睦擂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杖玲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顿仇。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖摆马,靈堂內(nèi)的尸體忽然破棺而出臼闻,到底是詐尸還是另有隱情,我是刑警寧澤囤采,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布些阅,位于F島的核電站,受9級特大地震影響斑唬,放射性物質(zhì)發(fā)生泄漏市埋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一恕刘、第九天 我趴在偏房一處隱蔽的房頂上張望缤谎。 院中可真熱鬧,春花似錦褐着、人聲如沸坷澡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽频敛。三九已至项郊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斟赚,已是汗流浹背着降。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拗军,地道東北人任洞。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像发侵,于是被迫代替她去往敵國和親交掏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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