AndroidSDK⽬录及版本号区别
今天⼜有⼈问Tools,Build-Tools,Platform-tools有什么区别,是⼲嘛的?
现在对SDK⽬录做⼀下总结阐述!
SDK⽬录
add-ones
add-ones:⾥⾯保存着⼀些附加的库,第三⽅公司为Android平台开发的附加功能系统。⽐如GoogleMaps 。(⼀开始此包为空)
build-tools
build-tools:编译⼯具⽬录,包含了转化为davlik虚拟机的编译⼯具。当创建Android项⽬(构建项⽬)的时候会⽤到这个包。在创建项⽬的
时候如果没有此包会报错。 (随着SDK版本的迭代,编译⼯具也会有相应新版本,建议使⽤最新的编译⼯具)
包括:
<:把.aidl 接⼝转换成java接⼝
< (逆向调试⼯具) : dump devlik中间代码
<(Android Asset Packaging Tool):编译应⽤程序的资源⽂件(包括l和你的Activities的xml⽂件),⽣成R.java⽂件,这样你就可以从你dx.bat(编译脚本):将.class中间代码转化为dvlik中间代码,所有经过java编译的⽣成.class⽂件都需要此⼯具进⾏转换,最后打包进apk⽂件中.
docs
docs : docs这⾥⾯是Android SDKAPI参考⽂档,所有的API都可以在这⾥查到。
extras
extras:该⽂件下存放了Google提供的USB驱动,Intel提供的硬件加速附件⼯具包。(后期存放了Android Support兼容包,使⽤兼容包
版本时最好与SDK版本保持⼀致)
platforms
platforms:⾥⾯是根据APILevel划分的SDK版本/平台,这个⽂件夹是SDK⾥⾯最重要的⽂件(每个平台的SDK真正的⽂件),这⾥就以
Android6.0为例,进⼊后有⼀个android-23的⽂件夹,android-23进⼊后是Android6.0 SDK的主要⽂件,
其中
data:保存着⼀些系统资源,
skins:Android模拟器的⽪肤,
templates:是⼯程创建的默认模板,
android.jar:是该版本的主要framework⽂件。
有时候我们在导⼊项⽬的时候发现导⼊后没有SDK,就是因为这⾥⾯没有我们导⼊项⽬编译时的SDK 包括android的平台。包含在
android.jar库中。你必须指⼀个平台为你的编译⽬标。
project.properties⾥⾯将target改为platforms⾥⾯有的版本重新编译即可。这⾥⾯有SDK不同的版本,每个版本下⾯⼜有许多⽂件组
成。还有就是如果你再布局中如果编写没有错误,但是视图预览不了,可能是由于你SDK选择的版本有问题。
platform-tools
platform-tools:该⽂件夹下放了Android平台的相关开发和调试⼯具,⽐如、等。platform-tools保存着⼀些通⽤⼯具,⽐如adb、和aapt、aidl、dx等⽂件
注意:这⾥和platforms⽬录中tools⽂件夹有些重复,主要是从android2.3开始这些⼯具被划分为通⽤了。
sources
sources:这个⽂件夹下⾯存放的是Android的源代码。
system-images
system-images:存放的是创建Android虚拟机时的镜像⽂件(已经编译好的镜像⽂件,模拟器可以直接加载)。从android-14开始将模拟器镜像⽂件整理在这⾥(原来放在platforms下)
temp
temp : 临时⽬录
tools
tools:这个⽂件夹下存放了⼤量Android开发、调试的⼯具。包括测试、调试、第三⽅⼯具。模拟器、数据管理⼯具等。⽐如ddms⽤于启动Android调试⼯具,⽐如logcat、屏幕截图和⽂件管理器,⽽dra
w9patch则是绘制android平台的可缩放png图⽚的⼯具,⽽monkeyrunner则是⼀个不错的压⼒测试应⽤,模拟⽤户随机按键,mksdcard则是模拟器SD映像的创建⼯具,emulator是Android SDK 模拟器主程序,不过从android 1.5开始,需要输⼊合适的参数才能启动模拟器,traceview作为android平台上重要的调试⼯具。
:虚拟机管理⼯具,⽤于建⽴和管理虚拟机。
:sdk管理⼯具,⽤于管理、下载sdk、sdk⼯具,能及扩展⼯具
samples
samples:是Android SDK⾃带的默认⽰例⼯程,⾥⾯的apidemos强烈推荐初学者运⾏学习,对于SQLite数据库操作可以查看NotePad 这个例⼦,对于游戏开发Snake、LunarLander都是不错的例⼦,对于Android主题开发Home则是androidm5时代的主题设计原理。
licenses
market_licensing作为AndroidMarket版权保护组件,⼀般发布付费应⽤到电⼦市场可以⽤它来反盗版。
add-ons
这⾥⾯保存着附加库,第三⽅公司为android 平台开发的附加功能系统。⽐如GoogleMaps,当然你如果安装了OphoneSDK,这⾥也会有⼀些类库在⾥⾯。
docs
这⾥⾯是Android SDKAPI参考⽂档,所有的API都可以在这⾥查到。
extras
该⽂件夹下存放了Android support v4,v7,v13,v17包;
还有google提供额USB驱动、Intel提供的硬件加速等附加⼯具包,
和market_licensing作为AndroidMarket版权保护组件,⼀般发布付费应⽤到电⼦市场可以⽤它来反盗版。
platforms
是每个平台的SDK真正的⽂件,存放了不同版本的android系统。⾥⾯会根据APILevel划分的SDK版本,这⾥就以Android2.2来说,进⼊后有 ⼀个android-8的⽂件夹,android-8进⼊后是Android2.2SDK的主要⽂件,其中data保存着⼀些系 统资源,images是模拟器映像⽂件,skins则是Android模拟器的⽪肤,templates是⼯程创建的默认模板,android.jar则 是该版本的主要framework⽂件。
samples
是Android SDK⾃带的默认⽰例⼯程,⾥⾯的apidemos强烈推荐初学者运⾏学 习,对于SQLite数据库操作可以查看NotePad这个例⼦,对于游戏开发Snake、LunarLander都是不错的例⼦,对于Android主 题开发Home则是androidm5时代的主题设计原理。
下⾯重点介绍这3个
platform-tools
保存着⼀些Android不同平台相关⼯具,⽐如adb,sqlite3等⽂件。Fastboot 刷机⼯具。
tools
作为SDK根⽬录下的tools⽂件夹,这⾥包含了android 开发和调试的⼯具,⽐如ddms⽤于启动Android调试⼯具,⽐如logcat、屏幕截图和⽂件管理器,⽽draw9patch则是绘制android平台的可缩放png图⽚的⼯具, ⽽monkeyrunner则是⼀个不错的压⼒测试应⽤,模拟⽤户随机按键,mksdcard则是模拟器SD映像的创建⼯具,emulator是 Android SDK模拟器主程序,不过从android 1.5开始,需要输⼊合适的参数才能启动模拟器,traceview作为android平台上重要的调试⼯具。hierarchyviewer是⼀个很强⼤的对我们的布局⽂件进⾏分析的⼯具,可以看到我们的layout是否过度渲染!
build-tools
保存着⼀些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中是必须在adle中设置。
③Android都是向下兼容的,你可以⽤⾼版本的build-tool去构建⼀个低版本的sdk⼯程,例如build-tool的版本为20,去构建⼀个sdk版本为18的⼯程!
说到这,就不得不提⼀下,项⽬中minsdkversion、compilesdkversion、targetsdkversion的区别!!
min、compile、target版本的区别
这⾥参考⼀下⾕歌开发者的⼀篇推送⽂章!讲的很详细
compileSdkVersion, minSdkVersion 和 targetSdkVersion 的作⽤:他们分别控制可以使⽤哪些 API ,要求的 API 级别是什么,以及应⽤的兼容模式。
compileSdkVersion
compileSdkVersion 告诉 Gradle ⽤哪个 Android SDK 版本编译你的应⽤。使⽤任何新添加的 API 就需要使⽤对应等级的 Android SDK。
需要强调的是修改 compileSdkVersion 不会改变运⾏时的⾏为。当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误,但新的 compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使⽤。(你真的应该修复这些警告,他们的出现⼀定是有原因的!)androidsdk安装步骤
因此我们强烈推荐你总是使⽤最新的 SDK 进⾏编译。在现有代码上使⽤新的编译检查可以获得很多好处,避免新弃⽤的 API ,并且为使⽤新的 API 做好准备。
注意,如果使⽤ Support Library ,那么使⽤最新发布的 Support Library 就需要使⽤最新的 SDK 编译。例如,要使⽤ 23.1.1 版本的Support Library,compileSdkVersion 就必需⾄少是 23 (⼤版本号要⼀致!)。通常,新版的 Support Library 随着新的系统版本⽽发布,它为系统新增加的 API 和新特性
提供兼容性⽀持。
minSdkVersion
如果 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 了。 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 之前做测试!你的⽤户会感谢你的。
Gradle 和 SDK 版本
所以设置正确的 compileSdkVersion, minSdkVersion 和 targetSdkVersion 很重要。如你所想,Gradle 和 Android Studio 都在构建系统中集成了它们。在你的模块的 adle ⽂件中(也可以在 Android Studio 的项⽬结构选项中)设置:
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "ample.checkyourtargetsdk"
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName “1.0”
}
}