从零开始--系统深入学习android(理论--开发前准备--开发入门--DDMS调试)

Android SDK 提供大部分的工具来调试你的应用程序。Eclipise中自带JDWP-compliant (JDWP百科: http://baike.baidu.com/view/4056494.htm )调试器允许你单步调试。一个典型的android调试环境是由以下几个部分组成的:

1.adb

adb是作为一个设备和开发系统的中间角色。它提供多种设备管理功能,包括移动和同步文件到模拟器,在设备或模拟器上执行一个UNIX shell ,为连接模拟器和设备提供通讯。

2.Dalvik Debug Monitor Server

DDMS是一个图形化的程序通过adb来和你的设备通讯。DDMS能截图,收集线程和推栈信息,模拟来电和短信等其他一些功能。

3.真机或虚拟设备

你的应用程序必须运行在一个设备或AVD中,这样才能调试它。

4.JDWP debugger

Dalvik虚拟机 支持 运行JDWP协议 ,以 允许 调试器 附加 到虚拟机。每一个应用程序在虚拟机中执行并暴露一个唯一的端口,这个端口可以通过DDMS附加一个调试器。 如果 你 要调试 多个应用程序, 连接 到 每个端口 可能会冗长 ,所以DDMS 提供了 端口转发 的 功能 可以转发 一个特定的 虚拟机的 调试 端口 到8700。  目前大部分IDE都包含JDWP 调试器,当然Eclipse中也有。

 


 

13.4.1 调试环境

下图 展示 了 各种 调试工具 如何 在一个典型的 调试环境 一起 工作 。



 

13.4.2 工具

接下来我们要认识一些工具,并具体介绍一些工具。Android SDK中包含多种工具帮助我们开发android移动平台的应用程序。这些工具被分为两组:SDK工具和平台工具。  SDK 工具是独立于平台的,它不依赖于平台。而平台工具则是依赖于平台的,根据平台版本的不同功能上会有新特性。

SDK 工具

android
让你 管理 的 AVDS , 项目和 SDK的 安装的组件 。
Dalvik Debug Monitor Server (ddms)
让 你 调试 Android应用程序 。
dmtracedump
从 跟踪日志文件 中 生成 的 图形 调用堆栈 图 。这个工具属于调试的范畴
Draw 9-patch
创建android专属的   NinePatch  图形,这个工具非常好用,所见即所得。我们后面详细讲解此工具。
Android模拟器 
你可以 用它来 设计 ,调试 和测试 您的应用程序 。
Hierarchy Viewer ()
让你 调试和 优化 Android应用程序 的 用户界面 。属于调试范畴
hprof-conv
J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profiling,这个工具叫做HPROF。而android SDK中的这个工具是用来转换HPROF 文件,生成一个标准的格式让我们浏览。
layoutopt
让 你 快速分析 应用程序的 布局 , 以 优化 效率 。属于调试范畴
mksdcard
帮助您创建 一个磁盘镜像 ,您可以使用 模拟器 , 模拟 外部存储 卡 (如 SD卡) 。
Monkey
运行你的模拟器 或设备 ,并产生 伪随机 流 的 用户事件 , 比如 点击 ,触摸 或手势 , 以及 一些 系统级事件 。你可以使用Monkey工具来做压力测试。
monkeyrunner
提供 一个API 编写程序 ,用来控制 Android代码 以外 的 Android设备 或 模拟器。
ProGuard
缩小, 优化, 混淆你的代码。
sqlite3
允许你通过Android应用程序访问 SQLite 数据文件。
traceview
提供一个图形化的查看器,用来查看你执行Logs时保存的内容。
zipalign
优化. apk文件。当apk被签名后都会调用此工具用来校准.apk文件  。

平台工具

该平台 工具 通常是 每次 你 安装 一个 新的SDK 平台后更新。 每个 平台工具 的更新都会 兼容 旧平台。通常情况下,我们只使用一个工具那就是Android Debug Bridge ( adb )。这是一款多用途的工具。我们在之前的文章中已经多次提到过它了。

其他平台工具,如aidl,aapt,dexdump和dx通常被称为Android Development Tools (ADT)。我们很少直接使用它们,而是通过Eclipse中的ADT插件自动调用它们。

 


 

13.4.3 使用DDMS

 首先在Eclipse中选择 Window > Open Perspective > Other... > DDMS。  来打开DDMS界面

13.4.3.1 DDMS与调试器如何交互

在Android上, 每 一个 应用程序运行 在 它自己的进程 中 ,并 运行 在 它自己的虚拟 机(VM) 。 每个虚拟机暴露一个唯一的端口用来连接调试器 。

当DDMS启动时,它就会连接到 adb。当一个设备被连接时,一个虚拟机在设备上启动或停止时它会通知DDMS,在DDMS和adb之间创建一个虚拟机的监控服务。一旦虚拟机运行,DDMS

会通过adb检索虚拟机的进程ID(pid),并通过设备上的abd守护进程打开一个连接到虚拟机的调试器。现在DDMS能和虚拟机对话了。

DDMS会 给 每个 设备上 的VM分配 调试端口 。通常情况下,DDMS为第一次VM调试分配8600端口,下一次为8601,等等。当一个调试器连接其中的一个端口,所有的通信 将被转发到 相

关 的 VM 调试。一个调试器只能附加一个端口,但DDMS能处理多个调试器。可以理解为一个管理器,但这只是DDMS其中一个功能而已。默认情况下,DDMS也会监听另一个调试端口

8700。 下面的截图 显示了 在Eclipse中 的 典型 DDMS的 屏幕 。


  图1.  DDMS截图

13.4.3.2 DDMS使用方法

查看一个进程中的堆内存使用

DDMS的 允许你查看 一个进程使用 了多少堆 内存 。 这个 信息可以查询 跟踪 应用程序 在 一定时间 点 的执行 过程 中 堆内存的使用情况 。使用步骤如下:

  1. 在 Devices 选项卡,选择一个你想要查看的进程 。
  2. 点击 Update Heap  按钮打开堆信息
  3. 在右边的 Heap 选项卡, 点击 Cause GC  来调用垃圾回收,收集堆数据。 当 操作完成后, 你会看到 一 组 对象类型 和 为每个 类型 已 分配的内存。读者也可以再次点击   Cause GC  来刷新这个数据。
  4. 点击列表中的一个对象类型,你会看到一个条形图用来显示对象在指定的内存大小分配的数量,单位为字节。

 

跟踪 对象 的 内存分配

DDMS的 提供了一个 功能来跟踪 类和 线程 分配的 对象所占用的内存 。 允许你实时跟踪 在您的应用程序分配的对象 ,当您执行 某些动作时 。 这个 信息可以评估你的程序的性能 。使用步骤如下:

  1. 在 Devices 选项卡,选择一个你想要查看的进程 。
  2. 在 Allocation Tracker 选项卡,点击  Start Tracking  按钮来启动跟踪。此刻,你在此应用上做的任何事情将被跟踪 。
  3. 点击 Get Allocations  会看到一个对象列表,这个列表是当你点击 Start Tracking  后分配的对象。你也可以再次点击 Get Allocations  追加新对象到列表中
  4. 要停止跟踪或者清空数据,请点击  Stop Tracking 按钮 .
  5. 点击列表中一行,你会看到更多信息,例如这个分配对象的方法和行数。

查看使用模拟器和真机上的文件系统

这个功能是非常有用的,我们可以查看,添加,删除某些文件,例如添加一个文件到SD卡中,在模拟器上使用DDMS添加是非常方便的。

  1. 在 Devices 选项卡,选择一个模拟器或真机 ,然后选择一个文件夹。
  2. 从设备上复制文件出来,请在 File Explorer中点击 Pull file  。
  3. 吧文件复制到设备中去,点击 Push file  。

检查 线程信息

使用步骤如下:

1.在 Devices 选项卡, 选择一个你想要查看的进程。

2.点击 Update Threads  按钮。

3.在 Threads 选项卡,  您可以查看 选定 进程 的 线程信息。

启动 方法 分析

方法分析能在某一个角度给我们提供方法测量,例如调用次数,执行时间点, 执行方法所花费的时间。你如果想要更精确的控制,分析被收集的数据,使用Debug.startMethodTracing()  和Debug. stopMethodTracing()方法。

在你开始方法分析之前,请注意以下的限制情况:

  • Android 1.5 设备部支持
  • Android 2.1 和低于2.1的设备必须当前有SD卡并且你的应用必须有写入SD卡的权限 。
  • Android 2.2 和高于2.2的设备不需要SD卡。 trace log 文件会直接以流形式到你的机器设备上。

以下是启动方法分析的步骤:

  1. 在 Devices 选项卡, 选择一个你想要查看的进程 。
  2. 点击 Start Method Profiling  按钮.


  3. 启动你想要分析的方法并互动。
  4. 点击 Stop Method Profiling  按钮。DDMS停止分析并打开Traceview。

模拟器控制

在设备选项卡的下面,有一个模拟器控制(Emulator Control)选项卡这个里面有很多关于模拟实际手机的功能,例如模拟一个来电,模拟发送一个短信,切换网络制式等。DDMS为我们更好的开发android应用提供了很方便的功能。

 


 

13.4.4 读取和写入Logs

Android 日志系统 提供了一个 收集 和查看 系统调试 输出 机制。  Logcat这个工具会转储系统消息的日志,其中包括推栈信息,抛出的错误信息,以及你自己定义的Log信息 ,这些都是实时输出的,就好像原始的System.out.print()。

Log  类

Log是一个日志类,你可以在代码中利用这个类来输入信息到LogCat中。  它有以下几种输出方法:

  • v(String, String)  (verbose详细全部的信息)
  • d(String, String)  (debug调试信息)
  • i(String, String)  (information信息,通知)
  • w(String, String)  (warning警告)
  • e(String, String)  (error错误)

例如:

Log.i("MyActivity", "MyClass.getView() — get item number " + position);

下面是LogCat的截图


下面还有一个Filer栏,可以让我们输入一些信息来过滤掉没用的,只保留我们我们想查看的信息


 

13.4.5 调试和分析用户界面

有时你应用程序的布局会使你的应用程序变慢。Android SDK提供Hierarchy Viewer和 layoutopt  这两个工具来帮助调试你的布局问题。

13.4.5.1 使用Hierarchy Viewer来调试与优化用户界面

运行Hierarchy Viewer并选择一个窗口,步骤如下:

  1. 连接你的设备或启动一个模拟器。

    为了安全Hierarchy Viewer只能连接到使用开发版本的Android系统上的设备。目前发现真机连不了,如果有知道方法的同学请告知,root和debug模式我已经试过了

  2. 安装执行你的应用程序,确保它的用户界面是可见的。
  3. 从我们本地电脑中的  <sdk>/tools/目录下,直接双击启动hierarchyviewer  。这里我发现android1.6的模拟器,启动了并没刷新hierarchyviewer界面,使用2.2就刷新了,如果出现类似问题的朋友请切换其他系统版本试下。请记住在Debug模式下是不能启动此工具的。
  4. 选中列表中的Activity。 现在可以 看看 它 的 视图层次了  。

下面是一张关于启动Hierarchy Viewer后正确显示的截图


   图2.  Hierarchy Viewer的截图

关于View Hierarchy 窗口

当我们点击Load View Hierarchy后会进入另外一个界面,这个界面有4个面板:

Tree View : 左边的这个面板显示一个Tree  View,这是Activity 对象的层次结构图,使用Tree  View能检查单个的View对象,并能看到这个对象与周围View的关系。

底部滑块可以放大的这个面板,或者使用鼠标滚轮放大。并且还能拖动当前View对象生成一张.psd的层次图。

下面还有一个过滤输入栏,可以输入类名或者ID来过滤你想要查看的View。

你还可以在左上角点击  Save As PNG  来保存成一张结构图,在团队合作过程中这是非常有用的 

Save As PNG旁边还有一个  Capture Layers  我们点击它,其实就和刚才上面拖动当前View一样会弹出一个框,保存为.psd文件格式。这种层次图可以让你编辑,隐藏某些层来安排其他人员工作。

Tree Overview: 右上方的一个窗口,用来预览整个树视图 ,当你在 Tree View 点击一个View对象时  这里会给那个View矩形上色。

Properties View: 右边 中间的 右侧面板中显示 “Properties” View , 它会显示 选定的 视图对象 的 属性 列表,你可以在这里检查这个View的属性

Layout View: 右边下方的面板,用来以实际布局的方式来浏览UI。

 

当前Activity的UI改变了,这里是不会自动更新的,你需要再次点击  Load View Hierarchy 按钮来刷新。下面是View Hierarchy 窗口的截图:


图3.  View Hierarchy 窗口

这个工具网络上也有比较多的文章来介绍使用方法,我们这里只需要了解一下就行了,因为在使用此工具的时候还有许多问题,比如不显示指示图标,n/a的情况。


 

13.4.5.2 使用layoutopt优化布局

layoutopt  工具让我们分析定义布局的XML文件,并在View Hierarchy找到效率低的地方。l

用法如下:


它会给你一些英语提示,教你该怎么做,但是请注意,它并不是全能的,在有些地方它依然会出现错误,请不要完全依赖它。

讨论群号213821767 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值