Google 致力于为黑人社区推动种族平等。查看具体举措

报告错误

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

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

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

如何报告错误

  1. 确保您使用的是最新版本的工具。这样,我们就不必检查报告的错误是否已修复了。此外,如有可能,请您在 Android Studio 问题跟踪器中搜索类似问题,看看您遇到的问题是不是已经报告过了(通常情况下,您可以使用错误消息作为搜索关键字)。

  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 错误详细信息

请附上可演示问题的实际项目或示例项目。这是确保捕获所有所需信息的最佳方式。请务必先移除所有敏感信息,然后再进行分享。

如果您无法分享项目,请注明所用工具的版本(首先尝试使用最新稳定版或最新预览版):

  • Android Gradle 插件版本:依次选择 File > Project Structure,点击 Project,然后找到 Android Gradle 插件版本
  • Gradle 版本:在以上页面中,找到 Gradle 版本
  • Android Studio 版本:依次选择 Help > About,然后找到 Android Studio 的版本号。

此外,请添加以下信息(如适用):

  • 如果某个行为意外地将工具从较低版本更改为当前版本,请注明这两个版本。
  • 如果构建失败并出现错误,请使用 --stacktrace 选项(即 ./gradlew <task> --stacktrace)从命令行运行构建,并向我们提供堆栈轨迹。
  • 如果构建用时超出了预期,请尝试执行以下任一操作:
    • 运行 ./gradlew <task> --scan,然后与我们分享生成的 Gradle 构建扫描
    • 运行 ./gradlew <task> -Pandroid.enableProfileJson=true,然后分享 <root-project>/build/android-profile 目录下生成的 Chrome 跟踪记录文件。

Android 模拟器错误详细信息

要收集模拟器详细信息,最简单的方法是使用“Extended controls”中的 File a bug 功能,具体操作步骤如下:

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

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

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

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

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

  • 模拟器版本。在模拟器中,打开 Extended controls,点击 Help,然后点击 About 标签页以查找 Emulator version
  • Android SDK 工具版本。依次选择 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