今天又有人問Tools涤妒,Build-Tools,Platform-tools有什么區(qū)別硅堆,是干嘛的渐逃?
現(xiàn)在對SDK目錄做一下總結(jié)闡述!
這里面保存著附加庫祖屏,第三方公司為android 平臺開發(fā)的附加功能系統(tǒng)袁勺。比如GoogleMaps畜普,當(dāng)然你如果安裝了OphoneSDK,這里也會有一些類庫在里面钝荡。
這里面是Android SDKAPI參考文檔埠通,所有的API都可以在這里查到逛犹。
該文件夾下存放了Android support v4虽画,v7,v13渗柿,v17包脖岛;
還有g(shù)oogle提供額USB驅(qū)動柴梆、Intel提供的硬件加速等附加工具包,
和market_licensing作為AndroidMarket版權(quán)保護(hù)組件声登,一般發(fā)布付費(fèi)應(yīng)用到電子市場可以用它來反盜版悯嗓。
是每個平臺的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文件。
是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ì)原理桶蝎。
保存著一些Android不同平臺相關(guān)工具铃彰,比如adb绍豁,sqlite3等文件。Fastboot 刷機(jī)工具牙捉。
作為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是否過度渲染!
保存著一些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 告訴 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 和新特性提供兼容性支持高帖。
如果 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 是 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 之前做測試启绰!你的用戶會感謝你的昂儒。
所以設(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 ?感謝!