报告错误

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

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

另请注意,问题跟踪器不是一个支持论坛。如果您有关于如何使用工具或如何让 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 耗尽内存

如果 IDE 耗尽内存,请执行以下命令,生成堆的直方图:

jmap -histo:live <pid>
    

如果 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