- Android开发:从0到1 (清华开发者书库)
- 赵志荣
- 1219字
- 2020-11-28 16:13:35
4.1 使用DDMS帮助调试程序
DDMS(Dalvik Debug Monitor Service)是Android SDK提供的工具,启动DDMS可以通过Android SDK安装目录 \tools\ddms.bat文件(macOS和Linux为ddms指令)实现;或通过Android Studio菜单选择Tools→Android→Android Device Monitor来实现。
启动后的DDMS如图4-1所示,DDMS提供很多功能,其中最常用的功能是Device(设备列表)、File Explorer(文件浏览器)和LogCat(日志)。
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0061-0054.jpg?sign=1739187891-wmhpT8tLKByVTMvOTFxsDiX24xDKTzdS-0-a0e2712d597a99889e5573378f65bf38)
图4-1 DDMS界面
4.1.1 设备列表
Devices是设备列表窗口,这里可以查看所有模拟器或者运行的进程。在图4-2中,有两个模拟器运行,最左边一列是Android进程名,它是按照应用程序的包命名的;中间一列Online是应用程序的进程号(PID);最右边一列是应用程序端口号。
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0062-0055.jpg?sign=1739187891-7JelJf4JZsj1WX0OSeu8cQ81StWBEKti-0-3753c5a6c12ec5568be2ec18e0c514ef)
图4-2 设备列表窗口
4.1.2 文件浏览器
File Explorer是文件浏览器,如图4-3所示。Android是基于Linux操作系统的移动设备操作系统,因此它会有文件系统,Android的文件系统是在开发阶段需要访问的。通过File Explorer,可以查看Android模拟器(或设备)中的文件,并可以很方便地在Android模拟器(或设备)与计算机之间导入和导出文件。如果在初始DDMS界面(图4-1所示)中没有File Explorer,可以通过菜单peuice→File Explorer打开。
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0063-0056.jpg?sign=1739187891-YdDlqp8AS7sfuMpXksJcukyUsxqyizCk-0-8bf487a4fb58e9a7e8928c41591c6558)
图4-3 文件浏览器
4.1.3 LogCat
在软件开发中,日志输出是非常重要的调试手段。Android SDK平台提供了一个LogCat显示输出的日志信息,图4-4是DDMS中的LogCat。另外,Android Studio也提供了LogCat工具,在Android Studio中启动工程后,可以看到如图4-5所示的界面。
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0064-0057.jpg?sign=1739187891-LiRrxVSXyiEePz7687Gp3qsBAU2aiDci-0-2d72f91d39dc5c2bfe3a3e1604b7805e)
图4-4 DDMS中LogCat
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0064-0058.jpg?sign=1739187891-bhJBZlpwSamnbbJpg8xv2qEy7NTY5Gf3-0-870c93fd82f3b1018d92244300a79767)
图4-5 Android Studio中LogCat
作为优秀的日志管理工具,LogCat能够分级输出调试信息。根据输出信息的“轻重缓急”和“严重程度”, LogCat提供了6个级别的日志输出信息:
❏ Verbose。啰唆模式,最低级别的信息,不加过滤地输出所有调试信息,包括VERBOSE、DEBUG、INFO、WARN、ERROR和ASSERT。程序中使用Log.v()输出。
❏ Debug。调试模式,一些调试信息通过该模式输出,输出信息包括DEBUG、INFO、WARN、ERROR级别。程序中使用Log.d()输出。
❏ Info。信息模式,输出信息包括INFO、WARN、ERROR级别。程序中使用Log.i()输出。
❏ Warn。警告模式,输出信息包括WARN、ERROR级别。程序中使用Log.w()输出。
❏ Error。错误模式,输出信息包括ERROR级别。程序中使用Log.e()输出。
❏ Assert。断言模式,当程序中断言失败抛出异常,输出日志信息。
由于LogCat窗口输出的日志信息很多,还可以选择日志级别过滤显示日志信息,图4-6是通过DDMS启动的LogCat输出的Info信息。
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0065-0059.jpg?sign=1739187891-0ExmveO7eQHOTpZGA7HaQa8eaiSWILbV-0-0fa716252f777542bfcfd984ba179b37)
图4-6 输出Info信息
此外,还可以自定义标签输出。在Hello Android中添加日志输出的代码如下:
public class MainActivity extends AppCompatActivity{ private static String TAG ="HelloAndroid"; ① @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int sum = 0; for(int i = 0; i 10; i++){ sum += i * i; System.out.println("sum :"+ sum); ② Log.i(TAG, "sum ="+ sum); ③ } } }
代码第①行自定义LogCat标签,通过标签可以过滤日志信息,代码第③行指定标签输出Info基本日志信息,Log.i()方法的第一个参数是标签,第二个参数是日志内容。
提示 在Java中,通常用System.out.println()方法输出日志信息,System.out是一个Java输出流类,它可以输出到标准输出设备上。LogCat也兼容了System.out输出,它输出重定向到LogCat输出窗口了。代码第②行是在程序中使用System.out. println()方法输出日志信息,然后建立一个System.out标签,System.out输出级别是Info。
在日志窗口单击按钮弹出日志过滤对话框,如图4-7所示,在Filter Name中输入Hello Android Filter,在by Log Tag中输入HelloAndroid,单击OK按钮,在LogCat输出窗口增加了HelloAndroid标签,如图4-8所示。
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0066-0061.jpg?sign=1739187891-M8iUCL9c3vCNtdUg81oLIERAOr1JkbST-0-3e59d3c6e5030f382a199807544cd258)
图4-7 日志过滤
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0066-0062.jpg?sign=1739187891-e0IIsRxEMMQI0H9Rs056Gn61oEOR0Pnd-0-d92c8c7049a409d7e697d376ed2e17de)
图4-8 HelloAndroid标签日志输出
如果不需要日志过滤,可以单击按钮删除,也可以单击
修改日志过滤。