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(日志)。
图4-1 DDMS界面
4.1.1 设备列表
Devices是设备列表窗口,这里可以查看所有模拟器或者运行的进程。在图4-2中,有两个模拟器运行,最左边一列是Android进程名,它是按照应用程序的包命名的;中间一列Online是应用程序的进程号(PID);最右边一列是应用程序端口号。
图4-2 设备列表窗口
4.1.2 文件浏览器
File Explorer是文件浏览器,如图4-3所示。Android是基于Linux操作系统的移动设备操作系统,因此它会有文件系统,Android的文件系统是在开发阶段需要访问的。通过File Explorer,可以查看Android模拟器(或设备)中的文件,并可以很方便地在Android模拟器(或设备)与计算机之间导入和导出文件。如果在初始DDMS界面(图4-1所示)中没有File Explorer,可以通过菜单peuice→File Explorer打开。
图4-3 文件浏览器
4.1.3 LogCat
在软件开发中,日志输出是非常重要的调试手段。Android SDK平台提供了一个LogCat显示输出的日志信息,图4-4是DDMS中的LogCat。另外,Android Studio也提供了LogCat工具,在Android Studio中启动工程后,可以看到如图4-5所示的界面。
图4-4 DDMS中LogCat
图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信息。
图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所示。
图4-7 日志过滤
图4-8 HelloAndroid标签日志输出
如果不需要日志过滤,可以单击按钮删除,也可以单击修改日志过滤。