第2节 Android Device Monitor
Android Studio的Android Device Monitor(简称ADM)是我们动态调试安卓程序时重要的帮手。它提供了很多动态调试的工具和调试方法。上一章介绍的log调试,就需要通过ADM的logcat显示调试内容;它还可以查看系统内存的占用情况,可以看到系统CPU的运行情况。
ADM可以在两个地方工作:
- 在Android Studio集成窗口:在Android Studio下方的窗口中,点击
Android Monitor
,就能在Android Studio中显示;在第一个框中,选中我们要调试的设备,第二个框中选中我们要调试的应用,
- ADM单独运行:通过Android Studio的菜单栏启动;
独立运行后,就像这样,
2.1 Logcat功能
Logcat用来查看程序输出的log。我们可以选择log的类型(verbose debug info warning error)来过滤log。
当选择verbose
时,logcat会输出所有类型的log;
当选择debug
时,logcat会输出debug info warning error等类型的log;
当选择info
时,logcat会输出info warning error等类型的log;
当选择warning
时,logcat会输出warning error等类型的log;
当选择error
时,logcat会输出error等类型的log;
有时候log太多,会影响我们的判断,可以自定义过滤器。
- 选择编辑过滤器,
- 指定过滤器的名字,输入log中包含关键字的内容,
以后logcat获取的log,就只有匹配过滤器中关键字的log了。
还有一个非常有用的功能是重启ADB。ADB有时候会因为种种原因而无法与设备相连,这时候通过下图的按钮重启ADB就能解决问题。
2.2 Android Studio中的ADM
在Android Studio集成界面,ADM还提供了方便的设备截屏、设备录像带功能。
设备截屏能将设备上正在显示的内容以截取图片或视频的形式保存到电脑上。
memory
能够实时监测当前被调试的应用内存使用大小,
- `CPU`能够实时监测当前被调试的应用CPU占用大小,
- `Network`能够实时监测当前被调试的应用网络使用情况,
## 2.3 独立运行的ADM
除了logcat,独立运行的ADM提供了更多的调试工具。点击菜单栏的`添加视图`图标,可以为ADM添加上`DDMS`、`Hierarchy View`、`Debug`、`Pixel Perfect`等高级的调试窗口。
`DDMS`是谷歌提供的一个非常全面的调试工具,它能和安卓虚拟机通信,获取最原始的调试数据。
1. 选择要调试的设备和应用;
2. 点击`DDMS`的菜单栏,启动不同的高级调试功能;
`DDMS`有很多高级的调试功能:
* `Debug`功能:连接到`debug`版本的应用,可以使用打断点、逐步跟踪的静态调试方式;
* `heap`功能:监测当前内存的使用,手动发起内存回收,保存内存分配的所有状态到电脑上,用其他高级工具做进一步分析,查找内存泄漏;
* `thread`功能:查看应用所有的线程,获取线程当前的运行信息;
* `UI元素分析`功能:分析显示界面指定窗口的UI元素布局信息,帮助开发者进行界面布局的调试;
* `OpenGL trace`功能:记录应用中OpenGL调用的信息;
以上这些功能都是高级的调试功能,每一个都可以开设单独的专题进行深入的讲解。因为本文针对的同学是刚开始接触调试的新手,所以这里就不详细的介绍用法了。我们将在调试的高级篇章中逐个详细介绍。
# 第3节 ADB工具
ADB-Android Debug Bridge,是安卓系统调试的核心。它将设备与调试用的电脑在软件层次上连接在了一起。第二章介绍的ADM中很多获取设备上信息的功能,其实就是通过ADB得到的。
ADB工具位于`SDK目录\platform-tools\adb`。如果在安装的时候你采用默认目录安装,那么它应该是`c:\Users\用户名\AppData\Local\Android\sdk\platform-tools\adb`
## 3.1 为ADB添加环境变量
为了方便的使用ADB工具,我们最好为它添加一个`环境变量`。这样,我们只要打开`cmd命令行终端`,就能马上使用它了。
1. `我的电脑`点击右键->`属性`->`高级系统设置`->`环境变量`,选中`Path`这一项,进行编辑;
2. 在编辑栏最后输入ADB所在的路径`c:\Users\用户名\AppData\Local\Android\sdk\platform-tools\`;如果该项之前还有别的路径,请用`;`分隔开;
3. 重启电脑->连接上手机->启动`cmd命令行终端`,输入`adb version`,如果得到类似下面的结果,说明ADB已经设置好了;
$adb version
Android Debug Bridge version 1.0.32
Revision eac51f2bb6a8-android
cmd命令行终端
的启动方法:
- 通过
Win+R
启动Windows操作系统的运行
面板; - 在面板中输入
cmd
,启动命令行窗口;
3.2 ADB常用命令
ADB提供了很多使用的命令,这里列出最为常用的几个命令的用法。
3.2.1 adb devices
列出当前连接到电脑上的所有安卓设备
$ adb devices
List of devices attached
192.168.56.101:5555 device
356BCJMDUV48 device
3.2.2 adb logcat
输出安卓设备上的log信息。功能和Android Device Manager中的logcat完全一样。后者实际上就是利用了ADB工具。
清除设备上已有的log,
$ adb logcat -c
开始输出log,
$ adb logcat -v time
logcat的-v
的输出选项,可以控制输出数据的显示格式。它提供brief
process
tag
raw
time
threadtime
long
等参数。大多数情况下,我们使用-v time
这个参数项就好了。
获取帮助,
$ adb logcat -h
其实adb logcat并没有h
命令选项,不过当logcat没有找到正确的命令时,就会输出logcat的帮助信息,供使用者参考。
3.2.3 adb start-server
启动ADB工具,
$ adb start-server
3.2.4 adb kill-server
停止ADB工具,
$ adb start-server
3.2.5 adb shell
从电脑登录到安卓设备上,
$ adb shell
root@vbox86p:/ #
登录到设备上后,就可以直接操作设备了。
3.2.6 adb shell dumpsys
输出设备上所有系统模块的状态信息,这个输出会非常的长,
$ adb shell dumpsys
为了让我们关注我们需要的模块,可以进一步设置要dump的模块名称,例如:
$ ./adb shell dumpsys window
甚至更进一步:
$ ./adb shell dumpsys window windows
这些模块的名称和更进一步的关键字(window windows等等),可以从adb shell dumpsys
返回的结果中找到,它们的表现形式大概如下:
......
WINDOW MANAGER LAST ANR (dumpsys window lastanr)
......
WINDOW MANAGER POLICY STATE (dumpsys window policy)
......
括号中的就是可以使用的dump形式。
3.2.7 adb install
安装应用,
$ adb install -r /Users/User/Desktop/app.apk
5474 KB/s (1182939 bytes in 0.211s)
pkg: /data/local/tmp/app.apk
Success
-r
选项表示强制安装-如果这个应用以前安装过,就把它卸载了重新安装,可以不使用;后面跟的是安装文件在电脑上的位置。
3.2.8 adb uninstall
卸载应用,
$ adb uninstall com.anddle.calculator
Success
uninstall
后面跟的是要卸载的程序的包名字。
3.2.9 adb help
ADB工具还有很多别的功能,可以通过这个命令查询它们的深入的详细的用法。
$ adb help
第4节 Wifi代替数据线调试
我们通常都是使用USB线连接设备和电脑进行的程序调试。
有的程序本身就要使用USB口,例如一个文件浏览器,它可以列出通过USB接口接入的U盘。
在调试这样的应用的时候,USB接口被占用了,但设备也只有一个USB接口,就可以考虑使用WiFi来进行ADB调试了。
通过WiFi代替数据线进行程序调试,利用了ADB工具的adb tcpip
和adb connect
命令。
- 使用USB数据线连接设备和电脑,输入如下命令
adb tcpip 5555 //5555表示指定的端口号码,可以修改成别的不知名端口
- 断开USB线,将电脑的ADB通过IP地址连接到设备上
adb connect 192.168.1.101 //192.168.1.101为android设备在Wifi网络上的IP地址
这样通过命令行就完成了Wifi调试的设置。
不过这里还有一个更简单的方案,使用Android Studio的第三方插件
ADB WIFI
,
Preferences
->Plugins
->Browse repositories...
;- 在搜索栏中输入
ADB WIFI
; - 选择安装
plugin
; - 重启Android Studio就可以了;
以后在要使用Wifi调试的时候,
- 使用USB数据线连接设备和电脑;
Tools
->Android
->ADB WIFI
->ADB USB to WIFI
;- 拔出USB连接线;
此时,就可以像之前使用USB数据线调试那样,通过Wifi对程序进行调试了。
结束
现在,大家对安卓应用调试需要使用的技术有了一个整体的认识,目前这些知识已经能够解决大部分应用需要的调试问题了。
在后面,我们会对调试的高级用法做详细的讲述,例如DDMS各种功能的详细用法。