转自: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的目录结构就阐述到这里。