1.android.bat
该脚本主要是用于管理AVD(Android Virtual Devices),可以创建、删除AVD。
在ECLIPSE中使用"Run Configuration"->"Target"中的“Manager”按钮就会调用该脚本。
2.mksdcard.exe
该软件是创建一个FAT32格式的磁盘镜像,主要是用于模拟手机SD卡的,在创建AVD中,可以选择该文件作为SD卡。mksdcard [-l label] <size>[K|M] <file>
例如:
mksdcard 100M sdfile;创建一个100M空间的sdfile文件
3.traceview.bat
Traceview是android平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。
- 首先,我们必须在程序当中加入代码,以便生成trace文件,有了这个trace文件我们才可以将其转化为图形。
要添加的代码如下:
Java代码
// start tracing to "/sdcard/zhouqian.trace"
Debug.startMethodTracing("zhouqian");
// ...
// stop tracing
Debug.stopMethodTracing();
// start tracing to "/sdcard/yourActivityTrace.trace"
Debug.startMethodTracing("yourActivityTrace");
// ...
// stop tracing
Debug.stopMethodTracing(); 可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()onStop()中添加Debug.stopMethodTracing()。
在运行我们的程序之前,我们首先要保证我们的AVD是一个带有SD card的AVD,这样才能使trace文件保存到/sdcard/...当中,有关sd 文件的创建请见上一节。
现在可以运行程序,最后退出到桌面状态。
- 我们使用命令adb pull /sdcard/zhouqian.tarce c:/temp,将zhouqian.trace文件复制到c:\temp目录中。
- traceview C:\temp\zhouqian.trace
之后你就可以看到图形了,用于分析性能。
trace文件的格式
trace文件是有两个跟踪文件组成:文件a.data保存跟踪的数据,文件a.key提供从二进标识符到线程和方法名的映射。1.6SDK后将这两个文件合并为一个文件trace。如果有早期的data和key文件,需要在SDK 1.6的traceview中打开,则使用cat mytrace.key mytrace.data > mytrace.trace(LINUX)或copy mytrace.key+mytrace.data mytrace.trace(WINDOWS)。
Data文件格式
Data文件是以扩展名.data的二进制文件。它的结构如下:
* File format:
* header
* record 0
* record 1
* ...
*
* Header format:
* u4 magic 0x574f4c53 ('SLOW')
* u2 version
* u2 offset to data
* u8 start date/time in usec
*
* Record format:
* u1 thread ID
* u4 method ID | method action
* u4 time delta since start, in usec 程序从文件开始解析header字段,并查找“偏移数据”,每次只读9-byte,直到EOF结束。以u8开始表示来表示输出的日期/时间,这样,你可以知道是昨天还是三天以前输出的了。方法动作用2个字节来表示,定义如下:0 - 表示进行
1 - 表示退出
2 - 表示异常退出
3 - (保留)
32位的无符号整数可以表示70分钟以微秒为单位的时长.Key文件格式
Key文件是一个由三部分组成的纯文本文件,每一部分用关键字‘*’作为开始,如果你看到某一行以‘*’开始,则表示这是新部分的开始。文件可能如下:
*version
1
clock=global
*threads
1 main
6 JDWP Handler
5 Async GC
4 Reference Handler
3 Finalizer
2 Signal Handler
*methods
0x080f23f8 java/io/PrintStream write ([BII)V
0x080f25d4 java/io/PrintStream print (Ljava/lang/String;)V
0x080f27f4 java/io/PrintStream println (Ljava/lang/String;)V
0x080da620 java/lang/RuntimeException <init> ()V
[...]
0x080f630c android/os/Debug startMethodTracing ()V
0x080f6350 android/os/Debug startMethodTracing (Ljava/lang/String;Ljava/lang/String;I)V
*end
- 版本部分
第一行是文件版本号,通常是1,第二行clock=global描述所有线程共用的时钟.以后版本可能会用每个独立线程的CPU时钟来表示。- 线程部分
每个线程一行,每行包括两部分:线程ID ,一个table(制表符),线程名。线程名没有限制,到这行结尾都是线程名部分。- 方法部分
每行表示一个方法,一行由四部分组成,用table(制表符)进行分隔:方法ID [TAB]类名[TAB] 方法名[TAB]信号 。无论是方法进入还是退出都会记录在这个列表上,注意:三个TABLE标识符是必须的,它唯一表示了方法.
无论是线程部分还是方法部分都是排序的。
- 如果一个线程存在于作分析图期间,这个线程是不会被发表的。
- 虚拟机上线程ID重用问题,如果一个线程停止后另一个线程开始,它们可能使用了同一个线程ID。
这个工具可以让从跟踪日志中生图形化的方法调用图和堆栈图。工具使用Graphviz Dot组件来生成图形的,所以要运行dmtracedump就必须先安装Graphviz。
<inc-ms> -- Inclusive时间总和(微秒为单位,包括子方法时间)
<exc-ms> -- Exclusive时间总和(微秒为单位,不包括子方法时间)
<numcalls> -- 调用次数
dmtracedump用法:
-d <trace-base-name>
-g <outfile>
-h
-o
-d <trace-base-name>
-t <percent>
使用 Ant 命令:
在默认选项下,Ant命令构建的Package 不包含任何的签署内容.
手动:
zipalign -v 4 source.apk destination.apk
验证校对:
zipalign -c -v 4 application.apk
zipalign命令参数:
•-f:覆盖现有的输出文件
•-v:详细输出
•-ç:确认给定的文件校准