2008年11月24日星期一

设备调式和测试设置

设备调式和测试设置

Android让你设置需许多设置,这些设置会让测试和调试应用程序更容易。进入模拟器的开发设置页的方法:进入菜单“Dev Tools”-->“Development Settings”,系统会打开开发设置页面,里面包含如下的选项:
* Debug app——选中将要调式的应用程序。你不需要设置这个来attach绑定一个编辑器,但是设置这个值两种效果:
(1)如果你调试时长时间暂停在断点上,这个设置会阻止Android抛出异常。
(2)这个设置会使你选择“Wait for Debugger”选项,该选项会暂停应用程序启动直到你的调试器重新联系上。
* Wait for debugger——阻止被选择的应用程序调用直到一个调试器被依附。你能用于在OnCreate()上设置断点,在调试一个活动的启动过程时很重要。当你变更这个选项时任何正在运行的被选择的应用程序将会被终止。为了能选中这个选项,你必须象上一个选项描述的那样选中一个调试应用程序。你能通过在代码里面调用waitForDebugger()来达到同样的目的。
* Immediately destroy activities——告诉系统一旦活动停止就摧毁这个活动(类似Android回收内存)。这有助于测试onSaveInstance(Bundle)/onCreate(android.os.Bundle)代码执行路径,否则强制测试是很困难的。选用这个选项会恰当暴露许多程序问题,这些问题多半是不节约内存。
* Show screen updates——瞬时刷新一个粉红色的矩形框,在正在重画的任何屏幕区域。这个选项非常有利于发现不必要的屏幕重画动作。
* Show CPU usage——在屏幕顶端显示CPU仪表盘,用于显示CPU使用了多少。顶上的红色条显示全部的CPU使用,下面的绿色条显示话费在组合屏幕上的CPU时间。注意:一旦打开你不能关闭这个功能,除非你重新模拟器。
* Show background——当没有活动屏幕可见时显示一个背景屏幕。一般不会发生,但是调试期间可能发生。
这些设置经过模拟器重启后被记住。

顶级调试技巧

快速堆栈转储
为了从模拟器上获得堆栈转储,你可使用adb外壳登录,使用ps命令找到你想要的进程,然后使用kill -3。堆栈跟踪会显示在日志文件中。
在模拟器屏幕显示有用的信息
设备能显示有用的信息,比如CPU使用情况或者高亮显示重画区域。在开发设置窗口中打开或者关闭这些设置,参见“Setting debug and test configurations on the emulator”
从模拟器(dumpstate)中获取系统状态信息
从Dalvik调试监视器服务工具上你能访问dumpstate(转储状态)信息。参见adb主题页的“dumpsys and dumpstate”

从模拟器(dumpsys)中获取状态信息

从Dalvik调试监视器服务工具上你能访问dumpsys(转储系统)信息。参见adb主题页的“dumpsys and dumpstate”

获取无限连接信息

从Dalvik调试监视器服务工具上你能访问无线连接信息。从Device菜单中,选择“Dump radio state”

记录跟踪数据

你能记录活动中的方法调用以及其他跟踪数据,方法是:调用android.os.Debug.startMethodTracing()。参见“Running the Traceview Debugging Program”。

记录无线电数据

默认情况下,无线电信息不记录在系统中,因为数据量很大。但是,通过下面的命令打开无线电数据记录功能。
adb shell
logcat -b radio

运行adb

Android使用一个提供众多能力的工具称为adb,包括移动和同步模拟器文件、转发端口、在模拟器上运行UNIX外壳。详情请参考“Using adb”。

从模拟器中捕获屏幕

DDMS能从模拟器中捕获屏幕截图。

使用调试帮助类

Android提供调试帮助类,比如util.Log,方便调试。


生成和安装Android程序

Android需要定制生成工具,以便能够恰当的生成资源文件和应用程序的其他部分。正因为如此,你必须有一个针对你的应用程序特定的生成环境。

定制的Android编译步骤包括编译XMl和其他资源文件、创建合适的输出格式。一个已编译的应用程序是一个.apk文件,该文件是压缩文件,包含.dex文件、资源文件、原始数据文件以及其他文件。你可以创建一个合适结构的Android项目,从零开始,或者基于已存在的源代码。
Android目前不支持在本地代码级别(C/C++)上的第三方应用程序开发。

推荐开发方式是使用Android插件的Eclipse,提供生成、运行、调试支持。

如果你有其他IDE,Android提供工具来生成、调试应用程序,但是他们没有和IDE整合。


移除一个Android程序


为了移除一个你已经安装到模拟器上的程序,你需要运行adb并删除安装时送到模拟器上的.apk文件。使用adb外壳落入设备的命令外壳,就像相关主题描述的那样,定位到data/app/,然后使用rm your_app.apk移除文件。

Eclipse技巧

在Eclipse中执行任意Java表达式
当Eclipse展厅在一个断点时你能执行任意代码。例如,进入带称为zip的字符串参数的一个函数时,键入android.os.Debug.startMethodTracing()将会启动dmTrace。
打开一个代码执行窗口,选择主菜单下的菜单Window>Show View>Display打开Display窗口,一个简单的文本编辑器。输入您的表达式,突出显示文字,然后点击' J '图标(或按Ctrl + Shift + d )来运行您的代码。这里的代码运行在被选择的线程所在的上下文环境中,被选择的线程指在断点下停止或者处于单步运行点下的线程。(如果你手工挂起线程,你不得不一次运行一步;如果线程处于Object.wait()中就不会起作用。)
If you are currently paused on a breakpoint, you can simply highlight and execute a piece of source code by pressing CTRL + SHIFT + D.
如果你目前暂停于一个断点,你可以简单突出显示一段代码然后按“CTRL + SHIFT + D”执行之。
你能突出显示一段文本,该文本位于同一段范围内,该范围通过按ALT +SHIFT + UP ARROW选择的最大封闭块,或者按DOWN ARROW选择更小块。
这里有几个在Desplay窗口中执行的例子,还提供了执行响应。
Input Response
zip (java.lang.String) /work/device/out/linux-x86-debug/android/app/android_sdk.zip
zip.endsWith(".zip") (boolean) true
zip.endsWith(".jar") (boolean) false
你也能执行任意代码,而不是用剪贴簿来调试。请搜索和“scrapbook”相关的Eclipse文档。

手工运行DDMS

尽管推荐调试方法是使用ADT插件,但是你也可以手工运行DDMS并在8700端口上配置Eclipse。注意:保证你第一次使用DDMS。

加入JUnit测试类

在Eclipse/ADT中,你能加入JUnit测试类到你的程序中。但是,在你的测试适当运行之前,你需要设置一个自定义的JUnit配置。欲知有关怎样设置Junit配置的更多信息,请参见“ I can't run a Junit test class in Eclipse”。

没有评论: