![Android开发:从0到1 (清华开发者书库)](https://wfqqreader-1252317822.image.myqcloud.com/cover/572/26943572/b_26943572.jpg)
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=1739211185-mHecsUKH7enj0WZL2Jv350vZhZYKKBgi-0-766e7c5757ab9952b8608de7b1c72e0a)
图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=1739211185-EYCM35BS3bTynay3DwlNrqyAdPDSlSap-0-37c575b4499853080115c74ab1971137)
图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=1739211185-nekgzDSE6mwgtQ7DOeHMICKyMAA28w8B-0-b5a49ed42339421e961bfe438e13304f)
图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=1739211185-UulZDWYxylTJQN0sj1BlurWWbVEGqARc-0-3aab7d1519fd2087d60f9724d1896dc9)
图4-4 DDMS中LogCat
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0064-0058.jpg?sign=1739211185-DPmZhdejsFQsl5XrxDNfkb8en5AaDwns-0-77f72aa0cb004df0763fa7e62044d41a)
图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=1739211185-GrjJzzFvY1smg1TmSWKz0FGX04r7kRIv-0-a9f024bd0346bf7cb4f8f749fb4384fa)
图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=1739211185-I6iHKP3nOdaXsJj3MbSFB7bIHhboVYUy-0-b437d57557cc4037f30ce5f7f7ddb9b0)
图4-7 日志过滤
![](https://epubservercos.yuewen.com/73B1DF/15367246905322506/epubprivate/OEBPS/Images/Figure-0066-0062.jpg?sign=1739211185-YjfwRtBTsiuOCb8WdxTKHqevPE6aGn7d-0-5c1fc54954690f4d5074fe9232b8a66c)
图4-8 HelloAndroid标签日志输出
如果不需要日志过滤,可以单击按钮删除,也可以单击
修改日志过滤。