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,最好每个月都看看这个上面的更新

2. http://source.android.com/

3. http://elinux.org/Category:Android,和1互相补充

posted @ 2014-09-19 14:39  carterzhang  阅读(434)  评论(0编辑  收藏  举报