Android Studio第4部分:调试工具和生产力插件

        Android Studio提供了丰富的内置开发工具,以及更丰富的插件生态系统。本系列的前三篇文章重点介绍如何使用Android Studio 安装和设置以及编码和运行一个简单的移动应用程序。现在,您将熟悉一些更高级的工具:三个内置工具和三个插件,用于调试和提高Android应用程序代码的质量和生产率。

本文介绍了适用于Android Studio的以下工具:

内置调试工具

  • Logcat
  • Debug
  • Lint

用于提高开发人员生产力的插件

  • ADB Idea
  • Codota
  • Lombok Plugin

Android Studio 3.5的新功能

在最新版本的Android Studio中查找所需内容,包括对Kotlin的支持以及对内存管理和UI响应能力的改进。

记录和调试Android应用

有问题的应用程序是失去用户的潜在原因。Logcat和Debug是Android Studio内置的两个工具,可用于识别和修复Android代码中的错误。

记录Android:Logcat

您可能不需要或不希望为每个错误提供完善的调试器。在某些情况下,记录和更正某些变量的值就足够了。Android Studio的Logcat非常适合此任务。

Logcat是一个命令行工具(集成到Android Debug Bridge-ADB中),可转储系统消息日志,可帮助您查找和修复代码中的问题。消息包括有关设备何时引发错误的堆栈跟踪,并记录您有意嵌入android.util.Log该类的消息。Logcat非常有用,它已直接集成到Android Studio中,您可以在其中从“ **视图”**菜单或工具窗口栏访问它。

图1

图1. Logcat窗口显示了带有日期和时间戳的系统消息列表

logcat的窗口分为下拉列表和其他控件随后消息区的一个水平行。从左到右,控件是:

  • 标识已连接设备和模拟器的下拉列表。(参见图1。)
  • 一个下拉列表,用于标识所选设备上已安装的APK软件包。
  • 日志记录级别的下拉列表:
    • 详细:显示所有消息。
    • 调试:显示仅在开发期间有用的调试日志消息,以及下拉列表中较低的消息级别。
    • 信息:显示常规使用的预期日志消息,以及下拉列表中较低的消息级别。
    • 警告:显示尚未出现错误的可能问题,以及下拉列表中较低的消息级别。
    • 错误:显示引起错误的问题-引发异常,以及声明消息级别。
    • 断言:显示开发人员期望永远不会发生的问题。
  • 搜索栏,其中唯一出现的消息是包含您在此控件中键入的文本的消息。
  • 一个复选框,可让您在搜索栏中使用正则表达式。例如,在图1的上下文中,您可以指定SystemClock |。AlarmManager(即消息必须包含两个字)。
  • 用于过滤邮件的下拉列表,包括以下选项:
    • 无过滤器(默认)将导致显示所选设备的所有消息,而不管所选的APK软件包如何。
    • 仅显示所选应用程序显示所选设备上所选APK软件包的消息,这些消息具有适当的日志级别或更低的日志级别。
    • 编辑过滤器配置可让您创建自定义过滤器。

在源代码中,您可以插入对各种android.util.Log方法的调用以记录消息。例如,您可能调用public static int i(String tag, String msg)来记录INFO-level消息或public static int w(String tag, String msg)记录WARN-level消息。

对于这两种方法,传递给标记的字符串都标识消息的来源(例如,调用此日志记录方法的方法),传递给msg的字符串标识所记录的消息。

另外,您可以调用System.outSystem.err的print()和println()方法。调用System.out方法可完成与log.i()调用相同的操作;对System.err方法的调用与log.w()调用完成的功能相同。

图2

图2.在示例应用程序的主要活动的onCreate()方法中记录消息

在图2中,仅显示的消息是针对在模拟Nexus 5X设备上运行的示例应用进程的。此外,这些消息必须包含**“仅显示选定的应用程序”**过滤器onCreate并被其接受。

有关Logcat的更多信息

查看Google的“ 使用Logcat编写和查看日志 ”以了解有关Logcat的更多信息。还要学习android.util.Log课程的文档。

调试Android:调试

对于非常简单的应用程序,使用Logcat记录和更正代码是可以的。对于更复杂的应用程序,这种调试形式可能很乏味。相反,您将需要一些可以调试应用程序的可执行代码的东西。Android Studio的内置调试工具提供了许多功能,包括以下功能:

  • 选择要在其上调试应用程序的设备。
  • 在应用程序代码(Java,Kotlin或C / C ++)中设置断点。
  • 在运行时检查变量并评估表达式。

使用此调试工具之前,需要满足一些先决条件:

  1. 如果您的应用程序包含C / C ++源代码,则需要从SDK Manager 安装LLDB(请参见图3)。幸运的是,本系列的示例应用程序(W2A)不包含C / C ++代码,因此我们可以忽略此先决条件。

    图3

    图3.选中LLDB复选框,然后单击OK以安装LLDB
  2. 您必须在连接的设备上启用调试。但是,如果您使用的是模拟器(本例中使用的是模拟器),则可以忽略此先决条件。默认情况下,在模拟设备上启用调试。

  3. 您必须运行可调试的构建变体。默认情况下,它是为您创建的,因此在许多情况下(包括本示例),您不必担心。

让我们开始一个快速调试会话。

简单的Android调试

假设您在打开示例应用程序(W2A.java)的编辑器窗口的情况下运行Android Studio,那么第一步就是在该public void onCreate(Bundle savedInstanceState)行上设置一个断点。通过突出显示此行并执行以下操作之一来设置断点:

  • 单击行左侧的装订线区域;该行应变成粉红色。
  • 从“ 运行”菜单中选择“切换行断点”
  • 同时按CtrlF8

现在,从“ **运行”**菜单中选择“ 调试”应用程序,或单击工具栏上的相应图标。如果模拟器未运行,则将看到“ **选择部署目标”对话框。我选择了Nexus 5X API 15,**然后单击“ 确定”

在等待模拟设备上线时,单击工具窗口栏上的“ **调试”**按钮以显示“ **调试”**窗口。最终,您应该看到类似于图4的内容。

图4

图4. Debug窗口显示堆栈框架,当前变量及其当前值,以及更多

调试窗口提供了step over, into, and out of a method等图标按钮。图5显示了我们逐步采用一种方法时会发生什么。

图5

图5.您可以step over, into, and out of a method

单击相应的图标按钮,然后从“ 运行”菜单中选择“ 跳过,或按F8键。这使我们onCreate()在逐步执行每个方法调用时可以更深入地研究方法。

onCreate()方法选择带有结束符}的行,然后选择**“运行至光标”**。您会收到有关该应用程序正在运行的通知。解锁设备后,您应该会看到示例应用程序的活动窗口。

图6

图6.单击Debugger选项卡左侧的前三个图标分别以继续,暂停和停止该应用程序

有关调试的更多信息

查看Google的“ 调试您的应用 ”以了解有关在Android Studio中进行调试的更多信息;例如,如何使用各种断点。

使用GAPID进行调试

虽然这里没有介绍,但我建议您检出GAPID:Graphics API Debugger,这是一组调试工具,可让您检查,调整和重播从Android应用程序到图形驱动程序的调用。

用Lint进行代码检查

无论您多么认真地编写它,源代码都可能包含错误,样式问题,并且可能引用由于某种原因而处于非活动状态的资源。短绒是一种工具,可以扫描源代码以查找这些令人讨厌的错误,并报告给开发人员。

Lint是用于Android SDK的内置linter。 您可以使用它来查找问题,例如目标API不支持或不赞成使用的元素和API调用。

要在Android Studio中运行Lint,请从“ **分析”**菜单中选择“ 检查代码… ” 。这样会打开“ **指定检查范围”**对话框。

图7

图7.检查整个项目的设置

从对话框中选择所需的范围(在这种情况下为整个项目),然后单击“ **确定”**开始检查。结果将显示在“ **检查结果”**窗口中,并按类别进行组织。

图8

图8.未显示两个拼写错误

出于其本质,Lint挑选了一些问题,否则可能会使应用程序代码混乱。一旦发现,就很容易修复图8所示的三个Java警告:只需声明androidAnimation private并从两个findViewById()方法调用中删除强制类型转换。

有关Lint的更多信息

查看“ 使用lint check改进代码 ”以了解有关在Android Studio中使用Lint的更多信息,并了解Android SDK的独立Lint工具。

安装和使用Android Studio插件

尽管内置工具有其优点,但许多其他工具也可以作为插件使用。在本节中,我们将研究三个插件,以提高您在Android Studio中的编码效率:

  • ADB Idea
  • Codota
  • Lombok Plugin

Android Studio插件管理器

Android Studio的插件管理器使查找和安装插件非常容易。通过选择激活插件管理器文件 > 设置,然后插件设置对话框:

图9

图9.“设置”对话框显示了所有已安装的插件

接下来,单击“ **浏览存储库…”**以打开“ **浏览存储库”**对话框,其中显示了受支持插件的完整列表。我们将使用此对话框选择第一个插件ADB Idea。

图10

图10.右侧窗格显示了有关所选插件的详细信息

提升您的Android生产力

代码快捷方式:ADB Idea

通过提供对常用ADB命令(例如启动和卸载应用程序)的快速访问,_ADB Idea_加快了Android的日常开发。

在插件的存储库列表中选择“ ADB Idea ”,然后单击“ 安装”按钮。Android Studio继续下载并安装插件。然后,它重新标记“ 安装重新启动Android Studio”。对于每个插件,我必须在单击Restart Android Studio之后重新选择插件,然后再次单击此按钮以重新启动Android Studio。

图11

图11.安装ADB Idea

安装后,Android Studio允许您从其“ **工具”**菜单访问ADB Idea 。选择“ **工具”>“ ADB Idea”,**然后从出现的弹出菜单中选择适当的命令。

图12

图12.从弹出菜单中选择适当的ADB命令

选择ADB Restart App之后,我在事件日志窗口中以及在我的Amazon Kindle设备上重新启动的应用程序中看到以下消息。

图13

图13.每条消息标识应用程序,操作和设备

查找可用的代码:Codota

您可以使用_Codota_插件来访问Codota搜索引擎,该引擎使您可以浏览数百万个公开可用的Java源代码片段,以解决Android编码问题。

图14

图14.安装Codota

在插件的存储库列表中选择Codota,然后单击“ **安装”**按钮。Android Studio下载并安装了插件后,它将重新标记“ 安装”按钮以重新启动Android Studio。重新启动会激活Codota。

重新启动后,您将遇到“ Codota身份验证”对话框。单击链接,然后按照说明接收令牌。然后,将令牌粘贴到上述对话框中,然后单击“执行”

图15

图15.输入身份验证令牌,然后单击OK

借助Android Studio,您可以通过在编辑器窗口中右键单击Java代码并选择“ **获取相关示例”**菜单项来访问Codota,如图16所示。

图16

图16.单击“获取相关示例”

单击此菜单项将导致浏览器显示一个包含相关代码示例的页面。例如,以下页面提供了与findViewById相关的示例:

图17

图17.浏览器为突出显示的findViewById文本提供了相关示例

自动生成Java代码:Lombok

Lombok项目提供了一组注释,可用于代替样板代码,从而节省了您手动编写此代码的时间。

图18

图18.单击安装以安装Lombok插件

插件的存储库列表中选择Lombok插件,然后单击安装。Android Studio下载并安装插件后,它将提示您重新启动Android Studio。重新启动会激活Lombok插件。

用一个简单的例子说明 Lombok的用处。假设我们将以下最小Robot类添加到示例应用程序的W2A.java源文件中:

class Robot
{
   private String name;
}

此类的想法是,我们将存储正在设置动画的机器人的名称以及可能有用的任何其他信息,并将此信息显示为toast弹窗(一条小消息,类似于工具提示)。

我们可能需要花费几分钟时间来向此代码添加构造函数和getter/setter方法。但是,更好的选择是让Lombok为我们添加此样板。步骤如下:

  1. 右键单击Robot
  2. 从弹出菜单中选择“ 重构 ”。
  3. 从下一个弹出菜单中选择“ Lombok ”。
  4. 从下一个弹出菜单中选择Default @Data

现在,您应该观察@lombok.Dataclass Robot标头前面有一个注释。此注释使构造函数,getter / setter方法以及其他样板代码自动生成。您可以通过重复前面的步骤来查看所有的这些样板,但是这次选择Delombok而不是Lombok。您会看到Lombok生成了如下内容:

class Robot
{
    private String name;

    public Robot() {
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean equals(final Object o) {
        if (o == this) return true;
        if (!(o instanceof Robot)) return false;
        final Robot other = (Robot) o;
        if (!other.canEqual((Object) this)) return false;
        final Object this$name = this.getName();
        final Object other$name = other.getName();
        if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
        return true;
    }

    protected boolean canEqual(final Object other) {
        return other instanceof Robot;
    }

    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final Object $name = this.getName();
        result = result * PRIME + ($name == null ? 43 : $name.hashCode());
        return result;
    }

    public String toString() {
        return "Robot(name=" + this.getName() + ")";
    }
}

第四部分的结论

Android Studio是用于开发Android应用程序的绝佳环境(尽管有些漏洞)。在这个简短的系列文章中,我向您展示了如何下载和安装Android Studio,引导您完成了简短的Android应用程序开发教程,向您展示了如何在安卓模拟器上构建和运行应用程序,并向您介绍了许多有用的方法用于Android开发的工具和插件。

还有更多的东西可供您学习。例如,您可能想玩Android Profiler来监视应用程序的性能并发现任何隐藏的性能瓶颈。您可能还需要安装和探索其他插件来提高编码效率

希望您将Android Studio及其内置工具和可扩展插件架构一起使用,以开发Android移动应用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章