Android入门-工欲善其事必先利其器 -------- 转载
0.前言:
多了解点东西,总会用得上。本文源于项目中的一个bug,Handler中的Runnable都被卡住不执行,半天没找到卡在什么地方,其实通过DDMS的Threads View,花不了1秒钟就能发现。考虑到大家也可能在这样的问题上卡住,浪费时间,促使我觉得有必要较全面的列举下Android开发过程中涉及到的各种各样的工具,以提高效率。
备注:本文内容基于Android SDK Windows版
1.Android SDK & NDK结构
1.1 Android SDK
Android主要开发工具,目录结构如下(较老版本的SDK有些不同):
“add-ons”:一般第三方厂商的SDK会以add-on的形式添加到Google标准Android SDK中,比如HTC的OpenSense SDK等
“build-tools”:这部分其实属于原来的platform-tools,在较新版本的SDK中被分离开了,其中包含的工具主要用于编译和生成APK。因为新版本Android的特性旧版本的编译打包方式可能不支持,所以Google这里使用了版本控制,例如后来引入的xxhdpi资源,旧版本的aapt就不能识别
“extras”:驱动,support包等杂项都会在这里
“platforms”:存放个版本Android SDK
“platform-tools”:adb等核心开发工具
“samples”:SDK API Demo会存放在这里,不过也有一些API Demo在“extras”中
“sources”:SDK源码,第三方Android系统一般都对不上,做参考用
“system-images”:Android虚拟机镜像
“tools”:包含一些开发中可能使用的工具,但是非必要或者可代替,比如有性能调试的,也有自动化测试的
“AVD Manager”:Android虚拟机管理界面
“SDK Manager”:SDK管理工具,用于更新SDK
1.2 Android NDK
NDK支持开发Android Native Library,以及使用C/C++来开发Android应用
目录结构跟SDK大体上是差不多的,需要一些Linux开发知识来理解,由于平时用的太少了,这里暂时不做介绍。
2. Android打包流程
3. Android Build-Tools & Platform-Tools
3.1 aapt
全称Android Asset Packaging Tool,主要用有三个:
a. 生成R.java文件
b. 配置AndroidManifest.xml
c. 编译资源
aapt的参数很多,功能强大,很多自定义的打包流程都可以通过调整aapt的参数来实现,比如Q立方的分包打包,为了避免修改代码中R.java的import路径,可以指定aapt生成R.java的包名。更多的参数可查看aapt的帮助,打包过程有特殊需求的,应该第一时间先看看aapt支不支持。
3.2 aidl
用于生成aidl接口文件对应的java代码
3.3 dx
用于将class文件转换成dex字节码
3.4 adb
使用频率最高的工具,常用的什么install,uninstall,push,pull等就不多介绍了,这里列举一些其他情况常用的命令:
“adb forward”:映射手机上的端口到本地端口,调试网络应用的时候很有用
“adb shell pm clear”:清除包的所有数据,SD卡自定义路径的数据除外
“adb shell pm enable/disable”:启用或者禁用Android Component或者Android应用,如果想强制停止一个应用程序,杀死所有该应用的进程,并且防止自动启动的话,disable很好使,这个是不会清除数据的
“adb shell am start”:启动一个Activity,可以通过包名类名,也可以通过Action
“adb shell am startservice”:启动一个Service
“adb shell am broadcast”:发送一个广播
“adb shell am force-stop”:杀死一个应用程序及其进程
“adb shell dumpsys”:dump当前系统的状态,十分有用,包含cpuinfo、meminfo、activity stack等等,调试利器,支持的状态如下,每个状态的子命令可以用“adb shell dumpsys xxx -h”查询,例如“adb shell dumpsys activity -h”
“adb shell bugreport”:有时候出了问题,但是没有抓到日志的话,可以用这个命令把日志dump出来,Android会保存一段时间的crash日志
“adb shell screenrecord”:4.4开始支持使用这个命令录制屏幕操作的视频,比普通软件的效果好很多,用来做演示等很有用
3.5 fastboot
bootloader模式下使用的命令,刷机、解锁必备
4. Android SDK-Tools
4.1 ant/build.xml
虽然我们Q立方的打包都是自己写的ant脚本,但是其实Android SDK已经提供一套相当完整的build脚本,我们的脚本中只需要include这个build.xml就能轻松使用,使用Google提供的这个脚本最大的好处就是兼容性好,不会出现什么apkbuilder找不到的问题,so easy
4.2 android.bat
命令行的创建、修改Android虚拟机的工具,还能够用来创建工程
4.3 ddms.bat
DDMS工具,全称Dalvik Debug Monitor Server,是一个集成额Android调试工具,能看到很多系统状态,现在已经被整合到monitor.bat这个工具中,见下方详细介绍
4.4 draw9patch.bat
.9图绘制工具
4.5 etc1tool
用来把png图像转换成ETC1格式的工具,ETC1格式用于OpenGL的材质贴图
4.6 hierarchyviewer.bat
查看和优化Android布局,现在已经被整合到monitor.bat这个工具中
4.7 hprof-conv
转换Android Memory Dump格式到标准格式,以便MAT读取
4.8 jobb.bat
用于创建APK Expansion Files的工具,因为有的Android应用很大,比如游戏,一搞就1、2G,会导致APK文件过大,所以Android提出了APK Expansion Files的概念,就是把大的数据文件和程序本身分开,这样用户可以安装了应用之后再去下载数据文件
4.9 lint.bat
代码静态检查工具
4.10 mksdcard
用来给Android虚拟机创建虚拟SD卡的工具
4.11 traceview.bat
Trace文件查看工具,现在已经被整合到monitor.bat这个工具中
4.12 uiautomatorviewer.bat
UI自动化测试模版生成工具
4.13 monkeyrunner.bat
用于执行monkey脚本
4.14 monitor.bat
主界面如下:
看起来跟DDMS是差不多的,因为这个界面就是DDMS,monitor只是把下面这四个集成在一起了:
DDMS主要的内容在这么几个Tab中:
“Threads”:选择一个进程,然后点击红框里面的按钮,
在Threads View中就可以看到该进程所有的线程的信息:
选择其中一个线程后,在下面的红框里面还能看到该线程当前执行的代码,我截图中的显示当前线程正在等待MessageQueue中的消息,对于调试线程竞争的情况很有帮助
“Heap”:同样的,选择一个进程,然后点击这个按钮,
在Heap View中就能看到当前进程的Java Heap信息,以及一些统计信息,但是最好在3.0以上的手机上使用这个功能,2.X的手机统计上有点bug,不准
对于简易观察某个功能的内存使用状态还是挺方便的,深入的分析最好还是用MAT
“Allocation Tracker”:选择一个进程,然后点击Start Tracking,
系统就会列出所有内存的分配,更NB的是他能够列出这个分配是在什么地方发生的,如下红框就是。早前用这个功能解决过一个桌面滑动卡顿的问题,当时是因为2.X上有点卡,代码上面看不出来什么长时间的操作,后来观察log,发现每次滑动都有GC,于是认为是GC影响了UI线程的绘制,按照这个思路我们就查看滑动过程中的内存分类,发现确实在onDraw的过程中,会new一个Rect,导致GC频繁
“Network Statistics”:用来查看进程的网络流量,例如下面是项目中一次版本更新请求的流量:
RX:接受流量
TX:发送流量
“File Explorer”:这个就不多说了,文件查看器,不支持批量简直就是坑爹
“Emulator Control”:控制模拟器的,用的少,可以模拟GPS、通话什么的
“System Information”:查看当前系统的状态信息,说实话这个功能有点坑,列出的信息太少了,而且使用的过程中容易crash,基本不使用,还是推荐dumpsys命令比较靠谱
Monitor中其他的三个工具,
Hierarchy View,查看和优化布局
Pixel Perfect,检查颜色和布局对不对
Tracer for OpenGL ES,OpenGL绘制trace,主要用来调试UI卡顿问题,不怎么好用,很多机器都支持得不好
5. Android逆向工程
5.1 dex2jar
Dex字节码转换成class文件
5.2 Virtuous Ten Studio
6. 参考
1. http://developer.android.com/index.html,最好每个月都看看这个上面的更新
3. http://elinux.org/Category:Android,和1互相补充