轉自:http://blog.csdn.net/itluochen/article/details/52688935java
本文主要介紹一下SDK目錄結構!android
如今對SDK目錄作一下總結闡述!sql
這裏面保存着附加庫,第三方公司爲android 平臺開發的附加功能系統。好比GoogleMaps,固然你若是安裝了OphoneSDK,這裏也會有一些類庫在裏面。數據庫
這裏面是Android SDKAPI參考文檔,全部的API均可以在這裏查到。api
該文件夾下存放了Android support v4,v7,v13,v17包;
還有google提供額USB驅動、Intel提供的硬件加速等附加工具包,
和market_licensing做爲AndroidMarket版權保護組件,通常發佈付費應用到電子市場能夠用它來反盜版。bash
是每一個平臺的SDK真正的文件,存放了不一樣版本的android系統。裏面會根據APILevel劃分的SDK版本,這裏就以Android2.2來講,進入後有 一個android-8的文件夾,android-8進入後是Android2.2SDK的主要文件,其中ant爲ant編譯腳本,data保存着一些系 統資源,images是模擬器映像文件,skins則是Android模擬器的皮膚,templates是工程建立的默認模板,android.jar則 是該版本的主要framework文件,tools目錄裏面包含了重要的編譯工具,好比aapt、aidl、逆向調試工具dexdump和編譯腳本dx。app
是Android SDK自帶的默認示例工程,裏面的apidemos強烈推薦初學者運行學 習,對於SQLite數據庫操做能夠查看NotePad這個例子,對於遊戲開發Snake、LunarLander都是不錯的例子,對於Android主 題開發Home則是androidm5時代的主題設計原理。ide
保存着一些Android平臺相關通用工具,好比adb、和aapt、aidl、dx等文件,這裏和platforms目錄中tools文件夾有些重複,主要是從android2.3開始這些工具被劃分爲通用了。Fastboot 刷機工具。工具
做爲SDK根目錄下的tools文件夾,這裏包含了android 開發和調試的工具,好比ddms用於啓動Android調試工具,好比logcat、屏幕截圖和文件管理器,而draw9patch則是繪製android平臺的可縮放png圖片的工具,sqlite3能夠在PC上操做SQLite數據庫, 而monkeyrunner則是一個不錯的壓力測試應用,模擬用戶隨機按鍵,mksdcard則是模擬器SD映像的建立工具,emulator是 Android SDK模擬器主程序,不過從android 1.5開始,須要輸入合適的參數才能啓動模擬器,traceview做爲android平臺上重要的調試工具。測試
保存着一些Android平臺相關通用工具,好比adb、和aapt、aidl、dx等文件。
aapt即Android Asset Packaging Tool , 在SDK的build-tools目錄下. 該工具能夠查看, 建立, 更新ZIP格式的文檔附件(zip, jar, apk). 也可將資源文件編譯成二進制文件.
Adb 即android debug bridge 管理模擬器和真機的萬能工具,ddms 調試環境
AIDL 即 Android Interface definition language 它是一種android內部進程通訊接口的描述語言,經過它咱們能夠定義進程間的通訊接口
Emulator即android 的模擬器
dx:轉化.class中間代碼爲dvlik中間代碼,全部通過java編譯的生成.class文件都須要此工具進行轉換,最後打包進apk文件中.
Dexdump 即Android Emulator中能夠找到一個名爲dexdump的程序,經過dexdump能夠查看出apk文件中的dex執行狀況,粗略分析出原始java代碼是什 麼樣的和Dot Net中的Reflector很像。
注意:這裏會涉及到一個問題,就是build-tools後邊會有不一樣的api版本號!
①buildeToolVersion是你構建工具的版本,這個版本號通常是API-LEVEL.0.0。 例如I/O2014大會上發佈了API20對應的build-tool的版本就是20.0.0,在這之間可能有小版本,例如20.0.1等等。
②在ecplise的project.properties中能夠設置sdk.buildtools=20.0.0。也能夠不設置,不設置的話就是指定最新版本。而在android studio中是必須在build.gradle中設置。
③Android都是向下兼容的,你能夠用高版本的build-tool去構建一個低版本的sdk工程,例如build-tool的版本爲20,去構建一個sdk版本爲18的工程!
說到這,就不得不提一下,項目中minsdkversion、compilesdkversion、targetsdkversion的區別!!
這裏參考一下谷歌開發者的一篇推送文章!講的很詳細
compileSdkVersion, minSdkVersion 和 targetSdkVersion 的做用:他們分別控制可使用哪些 API ,要求的 API 級別是什麼,以及應用的兼容模式。
compileSdkVersion 告訴 Gradle 用哪一個 Android SDK 版本編譯你的應用。使用任何新添加的 API 就須要使用對應等級的 Android SDK。
須要強調的是修改 compileSdkVersion 不會改變運行時的行爲。當你修改了 compileSdkVersion 的時候,可能會出現新的編譯警告、編譯錯誤,但新的 compileSdkVersion 不會被包含到 APK 中:它純粹只是在編譯的時候使用。(你真的應該修復這些警告,他們的出現必定是有緣由的!)
所以咱們強烈推薦你老是使用最新的 SDK 進行編譯。在現有代碼上使用新的編譯檢查能夠得到不少好處,避免新棄用的 API ,而且爲使用新的 API 作好準備。
注意,若是使用 Support Library ,那麼使用最新發布的 Support Library 就須要使用最新的 SDK 編譯。例如,要使用 23.1.1 版本的 Support Library,compileSdkVersion 就必需至少是 23 (大版本號要一致!)。一般,新版的 Support Library 隨着新的系統版本而發佈,它爲系統新增長的 API 和新特性提供兼容性支持。
若是 compileSdkVersion 設置爲可用的最新 API,那麼 minSdkVersion 則是應用能夠運行的最低要求。minSdkVersion 是 Google Play 商店用來判斷用戶設備是否能夠安裝某個應用的標誌之一。
在開發時 minSdkVersion 也起到一個重要角色:lint 默認會在項目中運行,它在你使用了高於 minSdkVersion 的 API 時會警告你,幫你避免調用不存在的 API 的運行時問題。若是隻在較高版本的系統上才使用某些 API,一般使用「運行時檢查系統版本」的方式解決。
請記住,你所使用的庫,如 Support Library 或 Google Play services,可能有他們本身的 minSdkVersion 。你的應用設置的 minSdkVersion 必須大於等於這些庫的 minSdkVersion 。例若有三個庫,它們的 minSdkVersion 分別是 4, 7 和 9 ,那麼你的 minSdkVersion 必需至少是 9 才能使用它們。在少數狀況下,你仍然想用一個比你應用的 minSdkVersion 還高的庫(處理全部的邊緣狀況,確保它只在較新的平臺上使用),你可使用 tools:overrideLibrary 標記,但請作完全的測試!
三個版本號中最有趣的就是 targetSdkVersion 了。 targetSdkVersion 是 Android 提供向前兼容的主要依據,在應用的 targetSdkVersion 沒有更新以前系統不會應用最新的行爲變化。這容許你在適應新的行爲變化以前就可使用新的 API (由於你已經更新了 compileSdkVersion 不是嗎?)。
targetSdkVersion 所暗示的許多行爲變化都記錄在 VERSION_CODES 文檔中了,可是全部恐怖的細節也都列在每次發佈的平臺亮點中了,在這個 API Level 表中能夠方便地找到相應的連接。
例如,《Android 6.0 的變化》中談了 target 爲 API 23 時會如何把你的應用轉換到運行時權限模型上,《Android 4.4 的行爲變化》闡述了 target 爲 API 19 及以上時使用 set() 和 setRepeating() 設置 alarm 會有怎樣的行爲變化。
因爲某些行爲的變化對用戶是很是明顯的(棄用的 menu 按鈕,運行時權限等),因此將 target 更新爲最新的 SDK 是全部應用都應該優先處理的事情。但這不意味着你必定要使用全部新引入的功能,也不意味着你能夠不作任何測試就盲目地更新 targetSdkVersion ,請必定在更新 targetSdkVersion 以前作測試!你的用戶會感謝你的。
因此設置正確的 compileSdkVersion, minSdkVersion 和 targetSdkVersion 很重要。如你所想,Gradle 和 Android Studio 都在構建系統中集成了它們。在你的模塊的 build.gradle 文件中(也能夠在 Android Studio 的項目結構選項中)設置:
編譯時用到的 compileSdkVersion 是和構建工具版本一塊兒設置的 Android 設置之一。其餘兩個稍有不一樣,他們在構建變體(build variant)的那裏聲明。defaultConfig 是全部構建變體的基礎,也是設置這些默認值的地方。你能夠想象在一個更復雜的系統中,應用的某些版本可能會有不一樣的 minSdkVersion 。
minSdkVersion 和 targetSdkVersion 與 compileSdkVersion 的另外一個不一樣之處是它們會被包含進最終的 APK 文件中,若是你查看生成的 AndroidManifest.xml 文件,你會看到相似下面這樣的標籤:
若是你在 manifest 文件中手工設置,你會發現 Gradle 在構建時會忽略它們(儘管其它構建系統可能會明確依賴它們)。
若是你按照上面示例那樣配置,你會發現這三個值的關係是:
這種直覺是合理的,若是 compileSdkVersion 是你的最大值,minSdkVersion 是最小值,那麼最大值必需至少和最小值同樣大且 target 必需在兩者之間。
理想上,在穩定狀態下三者的關係應該更像這樣:
用較低的 minSdkVersion 來覆蓋最大的人羣,用最新的 SDK 設置 target 和 compile 來得到最好的外觀和行爲。
ok!關於SDK的目錄結構就闡述到這裏。