报告错误

我们希望修复您报告的错误!但是许多错误报告未提供必需的信息。因此,我们将有限的资源集中用于修复具有完整报告的错误。为提高您报告的错误得以修复的机率,请花时间认真阅读本文档。

如果您未遵循相关步骤,我们将关闭您报告的错误。如果发生这种情况,只需提供补充信息并重新提交错误报告即可。

另请注意,问题跟踪器不是一个支持论坛。如果您有关于如何使用工具或如何让 Android 应用正常运行的问题,请访问 stackoverflow.com 或若干 Android 开发者支持资源之一。

如何报告错误

  1. 确保您使用的是最新版本的工具。我们耗费了大量时间来检查报告的错误是否已修复。如果我们关闭了您的问题而该问题并未解决,请重新开立一个问题,前提是您可以使用最新版本的工具重现该问题。

  2. 通过依次选择 Help > Submit Feedback,在 Android Studio 中打开错误报告。要开始呈现错误,这是最简单的方法,因为它会使用您的 Android Studio 版本、Java 版本和系统信息填充错误报告,而这些正是我们正确重现问题所需的信息。(否则,请在此处提交您的错误,并手动添加版本信息。)

  3. 描述重现问题的准确步骤。如果我们第一次尝试就可以重现问题,修复的机率会大大提高。如果可能的话,请列出代码段(或者,最好注明可用于重现错误的 GitHub 项目)。屏幕截图也有助于说明您观察到的问题。

  4. 描述您期望发生的结果以及实际观察到的结果。

  5. 选择一个描述性的短语来简要说明错误。令人惊讶的是,提交的错误报告当中有很多都是使用“错误”、“问题”、“异常”、“不工作”这样的概括性短语,这使得我们很难对这些问题进行排序。

  6. 对于某些类型的错误,我们还需要其他信息:

Android Studio 错误详细信息

列出下面这些特定于 Android Studio 错误的其他信息。

如果 IDE 挂起

如果 IDE 本身运行非常缓慢或完全停滞,请生成几个线程转储并将它们附加到错误报告中。这些转储告诉我们 IDE 正在忙于执行什么操作(或在等待什么争用资源)。

如果 IDE 运行缓慢但未停滞,还应附加 idea.log 文件(依次选择 Help > Show Log in Finder)。它会告诉我们是否因 IDE 持续将错误记录到日志中而导致它运行缓慢。

如果 IDE 耗尽内存

Android Studio 中的内存问题有时难以重现和报告。为了帮助解决此问题,Android Studio 提供了内存使用情况报告,您可以将此报告发送给 Android Studio 团队,以帮助确定内存问题的来源。

运行内存使用情况报告

要运行内存使用情况报告,请按照下列步骤操作:

  1. 在菜单栏中依次点击 Help > Analyze Memory Usage

    Android Studio 将转储相应的堆并提示您重启 IDE。如果重启 IDE,堆转储分析会立即开始。否则,堆转储分析会在您下次运行 Android Studio 时开始。无论哪一种情形,IDE 都会在内存使用情况报告准备就绪后立即通知您。

    指示内存使用情况报告已可供查看的通知

  2. 点击 Review Report

    在发送报告之前,您可以查看其中包含的所有信息。

    内存使用情况报告。

  3. 查看完毕后,将报告内容复制并粘贴到文件中,并在提交错误时附加该文件。

    通过这种方式提交报告信息可确保 Android Studio 团队能够在调查您的内存问题时使用问题跟踪器与您沟通。

如果 IDE 崩溃或引发异常

对于其他类型的崩溃事件,请附加 idea.log 文件。依次选择 Help > Show Log in Finder

生成线程转储

线程转储是 JVM 中运行的所有线程的输出,以及每个线程的所有堆栈帧的输出。这样很容易看出 IDE 在忙于执行什么操作。如果每隔几秒钟就生成几个线程转储,就更清楚了。

当您报告 IDE 异常忙碌导致 CPU 超负荷运行或者 IDE 似乎停滞的错误时,线程转储可以准确地找出哪个代码正在执行大量作业,或哪些线程正在争用资源,导致死锁。

JDK 附带一个名为“jstack”的工具,该工具可用于生成线程转储。首先,您需要查找 Android Studio 进程的进程 ID。为此,您可以使用“jps”命令。(jstack 和 jps 均位于 JDK 的 bin 目录中。如果您安装了多个 JDK,则应使用与 Android Studio 配合运行的 JDK 相同的版本,您可以在 Android Studio 的“About”框中查看到底是哪个版本。)

在 Linux 和 Mac 上:

jps -mv | grep studio
    

对于 Windows:

jps -mv | findstr studio
    

例如,这将输出一个很长的代码行,如下所示:

$ jps -mv | grep studio
    37605 -Dfile.encoding=UTF-8 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djna.nosys=true ...
    

左侧的第一个数字(在本例中为 37605)是进程 ID。

然后,您可以生成线程转储,并将其保存到 dump.txt 文件中,运行的命令如下:

jstack -l pid >> dump.txt
    

如果这不起作用,您可以尝试其他一些特定于平台的方式来生成线程转储;有关详细说明,请参阅 IntelliJ 支持

编译工具和 Gradle 错误详细信息

列出下面这些特定于项目编译相关问题或 Gradle 同步问题的信息:

  • Gradle 版本。依次选择 File > Project Structure,点击 Project,然后找到 Gradle version
  • Android 插件版本。在找到 Gradle 版本的页面上,找到 Android Plugin Version
  • 模块编译 Sdk 版本。在以上页面的左侧窗格中选择您的模块,然后找到 Compile Sdk Version
  • 模块编译工具版本。在以上页面中,找到 Build Tools Version
  • Android SDK Tools 版本。依次选择 Tools > SDK Manager,点击 SDK Tools,然后找到 Android SDK Tools

Android Emulator 错误详细信息

要收集模拟器详细信息,最简单的方法是使用扩展控件中的提交错误功能,具体操作步骤如下:

  1. 点击模拟器面板中的 More 图标
  2. Extended controls 窗口中,选择左侧的 Bug Report

    此时将打开一个屏幕,您可以在其中查看错误报告详细信息,如屏幕截图、AVD 配置信息和错误报告日志。您可以在此处输入重现错误的步骤,也可以先等一下,稍后将其输入到下一步生成的报告中。

  3. 等待错误报告完成收集,然后点击 Send to Google。此时将打开一个窗口,供您将错误报告保存在文件夹中,然后打开浏览器以在 Google 问题跟踪器中创建一个报告(该报告填充有必要的模拟器详细信息)。

  4. 在该报告中,填写所有剩余的详细信息(如重现错误的步骤),并附加创建错误报告时保存的文件。

否则,您必须手动输入以下详细信息:

  • 模拟器版本。在模拟器中,打开 Extended controls,点击 Help,然后点击 About 标签以查找 Emulator version
  • Android SDK Tools 版本。依次选择 Tools > SDK Manager,点击 SDK Tools,然后找到 Android SDK Tools
  • 主机 CPU 型号。
    • 在 Linux 上:打开 /proc/cpuinfo
    • 在 Windows 上:右键点击我的电脑,然后选择属性
    • 在 Mac 上:点击 Apple 图标,然后点击关于本机
  • 设备名称。在 AVD Manager 中,点击以打开相应设备的 Actions 列中的下拉菜单,然后选择 View Details(或打开 $avdname.avd/config.ini 文件)。查找 hw.device.name 对应的条目。例如:hw.device.name=Nexus 5