AndroidSDK工具详解
SDK概述
SDK:(software development kit) 软件开发工具包。一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。
Android SDK提供了你的API函数库和开发工具,建立,测试和调试Android应用程序。
Android SDK目录下有很多文件夹,主要都是干什么的呢?(斜体的表示新版本的sdk找不到该目录,或者该目录下没有内容)
*1. add-ons 这里面保存着附加库,比如Google Maps,当然你如果安装了Ophone SDK,这里也会有一些类库在里面。
2. docs 这里面是Android SDK API参考文档,所有的API都可以在这里查到。*
3. market_licensing(licenses) 作为Android Market版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。
4. platforms 是每个平台的SDK真正的文件,里面会根据API Level划分的SDK版本, 这里就以Android 2.2来说,进入后有一个android-8的文件夹,android-8进入后是Android 2.2 SDK的主要文件,其中ant为ant编译脚本,data保存着一些系统资源,images是模拟器映像文件,fastboot是刷机工具
5. skins则是Android模拟器的皮肤,templates是工程创建的默认模板,android.jar则是该版本的主要framework文件,tools目录里面包含了重要的编译工具,比如aapt、aidl、逆向调试工具dexdump和编译脚本dx。
6. platform-tools 保存着一些Android平台相关通用工具,比如adb、和aapt、aidl、dx等文件,Android123提示,这里和 build-tools文件夹有些重复,主要是从android 2.3开始这些工具被划分为通用了。
7. samples 是Android SDK自带的默认示例工程,里面的apidemos强烈推荐初学者运行学习,对于SQLite数据库操作可以查看NotePad这个例子,对于游戏开发Snake、LunarLander都是不错的例子,对于Android主题开发Home则是android m5时代的主题设计原理。
8. tools 作为SDK根目录下的tools文件夹,这里包含了重要的工具,比如ddms用于启动Android调试工具,比如logcat、屏幕截图和文件管理器,而draw9patch则是绘制android平台的可缩放png图片的工具,sqlite3可以在PC上操作SQLite数据库,而monkeyrunner则是一个不错的压力测试应用,模拟用户随机按键,mksdcard则是模拟器SD映像的创建工具,emulator是android模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器,traceview作为android平台上重要的调试工具。
9. usb_driver 顾名思义,保存着android平台google官方机型的驱动如nexus one、nexus s,同时也有一些老机型驱动的支持,比如说htc dream、htc magic和motorola的droid。
10. 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中是必须在build.gradle中设置。
③Android都是向下兼容的,你可以用高版本的build-tool去构建一个低版本的sdk工程,例如build-tool的版本为20,去构建一个sdk版本为18的工程!
https://developer.android.com/guide/topics/manifest/uses-sdk-element.html 平台版本对应的API级别
lint工具
- sdk 16下layoutopt.bat改名为lint.bat了
什么是lint?
lint是android 16之后提供的新工具,它是一个代码扫描工具,能够帮助我们识别代码结构存在的问题。之前是layouttopt命令。两种形式,一种是命令行工具,另一个集成于Eclipse或者androidstudio中。
lint检查范围主要包括:
布局性能(无用布局、嵌套布局、布局太多)
未使用的资源
不一致的数组大小
国际化问题(硬编码)
图标问题(重复的图标,错误的大小)
manefest文件的错误
lint有什么特点?
- 这是一款使用起来非常简单的布局优化工具。他是android sdk带来的一个工具,自动分析你的布局,发现可能并不需要的布局元素,以降低布局复杂度
1、在as中使用lint
- Android Studio使用Lint进行代码检查 找到Analyze目录下的Inspect Code检查代码选项点击(演示,如图2),还有建议修改的提示
- 可在setting-inspections修改lint提示的级别,如图1
2、在命令行中使用lint
(演示项目位置 F:\eclipse_wp\zhaixiuuser)
- lint指令集
lint –help 显示所有的指令及其含义
lint –help (eg:lint –help “suppress”) 查找指定主题的帮助文档
lint –list 列出所有的问题类别、具体id,及对应的解释 (比如下面的例子类别Usability:Icons 具体id:IconDuplicates)
lint –version 查看lint版本号
lint –exitcode ??如果找到错误,则将退出代码设置为1??
lint –html 将检测出的的报告到处在report file path下,如果存在则覆盖。(eg.lint –html D:\Users\4399-1126\Desktop\report2.htmlF:\eclipse_wp\zhaixiuuser)
lint –show 显示所有的问题及对应的解释
lint –show 显示指定的问题或指定类型下的所有问题的完整解释(eg lint –show Usability:Icons 列出这一类型下的所有问题id及对应的解释lint –show IconDuplicates,IconDuplicatesConfig:指定id )
lint –disable 禁用类别或特定问题的列表,列表用逗号隔开 eg:lint –disable HardcodedText F:\eclipse_wp\zhaixiuuser
lint –enable 启用特定问题的列表。默认检查所有问题,加上这个特别启用的,列表用逗号隔开
lint –check 只检查这里指定的问题,逗号隔开(只检查国际中文字编码的问题:lint –check HardcodedText F:\gitlab\m4399-opreate-sdk2 –html D:\Users\4399-1126\Desktop\report444.html)
lint -w或者lint –noworn 只检查错误,不检查警告
lint -Wall 检查所有的警告,包括那些默认关闭的
lint -Werror 将所有的警告视为错误
lint –config 使用给定的配置文件,以确定是否启用或禁用的问题。如果一个项目包含一个lint.xml文件,则默认就按照该文件去检测,无需用该指令。eg:lint –config D:\Users\4399-1126\Desktop\lint.xml F:\eclipe_wp\zhaixiuuser
lint –quiet 不显示检测过程 (eg:lint –quiet –html D:\Users\4399-1126\Desktop\report3.html F:\eclipse_wp\zhaixiuuser)
lint –fullpath 检测报告显示的文件路径使用全路径
lint –showall 不截取长信息列出可选的位置等等。。(跟lint xxx一样)
–nolines 不输出源代码行
–url filepath=url 用url取代本地html链接。、、
–simplehtml 跟–html一样。。。
–xml 导出xml文件。。
–resources
–sources
–lib
–classpath:。。。。暂时不懂~~
HTML报告
命令行工具也能生成 HTML报告.它有如下优势:
a.每个错误的代码都有更详细的解释,还有提供更多信息属性的超链接
b.能指出错误代码的所在的行数
c.它能直接定位到源码的链接
d.对于图标的错误, 图标本身就显示在报告中,方便对比
lint检查出的一些问题描述
Set android:baselineAligned=”false” on this element for better performance
如果LinearLayout被用于嵌套的layout空间计算,它的android:baselineAligned属性应该设置成false,以加速layout计算
android:baselineAligned=”false”This LinearLayout layout or its RelativeLayout parent is useless;
多余的Linearlayout或者RelativeLayout
删除即可This tag and its children can be replaced by one and a compound drawable
有时候我们可能会用image+textview组合,但其实image是没必要的,textview提供了一个属性来给它设置image
android:drawable=”@drawable/resource”(这个不敢苟同,很多时候确实只设置这个,无法达到预期的布局效果)Use a layout_height of 0dip instead of wrap_content for better performance
当在一个linearlayout布局中为一个控件设置weight属性时,这个组件会默认填充剩余空间
去掉weight属性或者修改wrap_content为0dp
lint检测出的图片相关的问题 (所属类别:Usability:Icons)
IconDuplicatesConfig: Identical bitmaps across various configurations
The ic_launcher.png icon has identical contents in the following configuration folders: drawable-xhdpi, drawable-xxhdpi
两张一模一样的图片放在不同分辨率的drawable文件夹下IconDipSize: Icon density-independent size validation (lint –show IconDipSize)大致意思是
检查不同分辨率的文件夹下所有计算起来大致相同dp大小的图标,这个可以捕获图片放在错误文件夹的错误,或者将图标更改为新的尺寸。但是一些文件夹会被忽略。IconDuplicates: Duplicated icons under different names
一模一样的图标取不同的名字IconMissingDensityFolder: Missing density folder
如果为各个分辨率的屏幕定义指定的分辨率的图标,效果是最好的。IconDensities: Icon densities validation
要在不同分辨率的文件夹下放对应的图片。低分辨率的比较少,不考虑,检测自动忽略低分辨率的情况。如果要加上的话, 设置这个ANDROID_LINT_INCLUDE_LDPI=true
html报告中 Suppressing Warnings and Errors
不对此类问题进行lint检查的几种方式
- With a @SuppressLint annotation in the Java code
(在java代码中增加@SuppressLint标注,如图3) With a tools:ignore attribute in the XML file
(在xml文件中增加tools:ignore属性,如下代码)With ignore flags specified in the build.gradle file, as explained below
(在build.gradle文件中描述)With a lint.xml configuration file in the project
- With a lint.xml configuration file passed to lint via the –config flag
- With the –ignore flag passed to lint.
- With a @SuppressLint annotation in the Java code
欢迎使用Markdown编辑器写博客1111222
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
- Markdown和扩展Markdown简洁的语法
- 代码块高亮