报告错误

请按照本页上的步骤完成错误报告。修复错误的资源有限,因此具有完整信息的错误将被优先考虑。不完整的错误报告将被关闭。如果发生这种情况,请使用其他信息重新提交您的错误。

为了帮助确保您没有报告已修复的错误,请确保您使用的是最新版本的工具。您也可以在 Android Studio 问题跟踪器 上搜索类似问题,查看您遇到的问题是否已报告。

如何报告错误

要报告错误,请按照以下步骤操作

  1. 要从 Android Studio 打开错误报告,请选择 帮助 > 提交反馈

    这是启动错误的最简单方法,因为它会使用您的 Android Studio 版本、Kotlin 或 Java 版本以及系统信息填充错误报告,这些信息是正确重现问题所必需的。

    您也可以 在此处提交您的错误 并自己添加版本信息。

  2. 附上诊断报告,以便我们调试您的问题。要生成诊断报告 zip 文件,请点击 帮助 > 收集日志和诊断数据

  3. 描述重现问题的准确步骤。提交尽可能多的信息,包括代码片段、可用于重现错误的 GitHub 项目,以及您观察到的截图或录制内容。

  4. 详细描述问题。说明您预期的结果以及您实际观察到的结果。

  5. 为错误报告选择一个描述性标题。使用更具描述性的标题可以更轻松地按问题进行分类。

对于某些错误,我们需要额外的信息,如以下部分所述

Android Studio 错误的详细信息

要报告特定于 Android Studio 的错误,请包括本节中描述的额外信息。

如果 IDE 挂起

如果 IDE 本身看起来非常迟钝或完全冻结,请 生成几个线程转储,如本页面所述,并将它们附加到错误报告中。线程转储显示了 IDE 导致其变慢的操作。

如果 IDE 迟钝但没有冻结,请将 idea.log 文件附加到您的错误报告中。要附加文件,请选择 帮助 > 收集日志和诊断数据帮助 > 在文件中显示日志(在 macOS 上为 帮助 > 在查找器中显示日志)。此文件显示 IDE 是否将错误抛出到日志中。

使用 CPU 配置文件诊断缓慢

如果您在 Android Studio 中遇到迟钝问题,CPU 配置文件有时可以帮助诊断问题。

按照以下步骤使用 Android Studio 性能测试插件捕获 CPU 配置文件

  1. 安装插件。

    • 在 Android Studio 中,在插件市场中搜索“性能测试”。
    • 或者,您可以从 插件网站 下载与 Android Studio 兼容的版本。
  2. 创建 CPU 配置文件。

    1. 当 Android Studio 似乎很迟钝时,选择 开始 CPU 使用情况分析
    2. 重复几个存在延迟问题的操作(代码完成、键入并等待突出显示赶上等等)。
    3. 点击 停止 CPU 使用情况分析
  3. 共享配置文件。

    将出现一个气泡,提供 CPU 快照文件名,其格式为 snapshot-NNN。在您的错误报告中共享该快照文件。

如果 IDE 内存不足

Android Studio 中的内存问题有时难以重现和报告。为了帮助解决此问题,Android Studio 包含一个内存使用报告,您可以将其发送给 Android Studio 团队,以帮助确定内存问题的根源。

运行内存使用报告

要运行内存使用报告,请按照以下步骤操作

  1. 从菜单栏中点击 帮助 > 分析内存使用情况

    Android Studio 转储堆并提示您重新启动 IDE。如果您重新启动 IDE,堆转储分析将立即开始。否则,堆转储分析将在您下次运行 Android Studio 时开始。无论哪种情况,IDE 都会在内存使用报告准备好进行审查时通知您,如图 1 所示。

    Notification indicating that a memory usage report is ready to
     review
    图 1. 内存使用报告通知。
  2. 点击 查看报告

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

    A memory usage report.
    图 2. 内存使用报告分析。
  3. 完成审查后,将报告内容复制到一个文件中,并在您 提交错误 时将该文件附加。

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

如果 IDE 崩溃或抛出异常

对于其他类型的崩溃,请附加通过选择 帮助 > 收集日志和诊断数据帮助 > 在文件中显示日志(在 macOS 上为 帮助 > 在查找器中显示日志)找到的 idea.log 文件。

生成线程转储

线程转储是 JVM 中运行的所有线程的打印输出。对于每个线程,它包括所有堆栈帧的打印输出。这使得查看 IDE 忙于做什么变得容易,尤其是在您在几秒钟内生成几个线程转储时。

当您报告 IDE 非常忙,CPU 被占用或 IDE 似乎已冻结的错误时,线程转储可以精确地指出哪个代码正在执行大量工作,或者哪些线程正在争夺资源并导致死锁。

JDK 附带了一个名为 jstack 的工具,可用于生成线程转储。首先,找到 Android Studio 进程的进程 ID (PID)。为此,请使用 jps 命令

在 Linux 或 macOS 上

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 的错误,请附加一个真实或示例项目以演示问题,以帮助确保捕获所有必要的信息。在共享之前,请删除任何敏感信息。

如果您无法共享项目,请说明您使用的工具版本。(在报告错误之前,尝试使用最新的稳定版或预览版)。要查找您的工具版本,请执行以下操作

  • Android Gradle 插件版本

    1. 选择 文件 > 项目结构
    2. 点击 项目
    3. 找到 Android Gradle 插件版本
  • Gradle 版本

    1. 选择 文件 > 项目结构
    2. 点击 项目
    3. 找到 Gradle 版本
  • Android Studio 版本

    1. 选择 帮助 > 关于
    2. 找到 Android Studio 版本

此外,请在适用情况下包含以下信息

  • 如果行为从早期版本到当前版本意外发生变化,请指示这两个版本。
  • 如果构建失败并出现错误,请使用 --stacktrace 选项(如 ./gradlew <task> --stacktrace)从命令行运行构建,并在您的错误报告中提供堆栈跟踪。
  • 如果构建花费的时间超过预期,请尝试以下方法之一
    • 运行 ./gradlew <task> --scan 并在您的错误报告中共享生成的 Gradle 构建扫描
    • 运行 ./gradlew <task> -Pandroid.enableProfileJson=true 并在您的错误报告中共享 Chrome-trace 文件,这些文件在 <root-project>/build/android-profile 目录下生成。

Android 模拟器错误的详细信息

按照以下步骤使用模拟器的扩展控件来收集信息并提交错误

  1. 在模拟器面板中,点击 更多
  2. 扩展控件 窗口中,选择 错误报告

    这将打开一个屏幕,其中包含错误报告详细信息,例如截图、AVD 配置信息和错误报告日志。您可以在此处输入重现步骤,或者等待并在下一步生成的报告中输入。

  3. 等待错误报告完成收集,然后点击 发送到 Google

    将打开一个窗口供您将错误报告保存到文件夹中。您的浏览器也将打开以在 Google 问题跟踪器中创建一个报告,其中包含已填写的必要模拟器详细信息。

  4. 在报告中,完成任何剩余的详细信息,例如重现错误的步骤,并附加创建错误报告时保存的文件。

否则,手动输入以下详细信息

  • 模拟器版本

    1. 在模拟器中,打开 扩展控件
    2. 点击 帮助
    3. 点击 关于 选项卡以查找 模拟器版本
  • Android SDK 工具版本

    1. 选择 工具 > SDK 管理器
    2. 点击 SDK 工具
    3. 找到 Android SDK 工具
  • 主机 CPU 模型

    • 在 Linux 上:打开 /proc/cpuinfo
    • 在 Windows 上:右键点击 我的电脑 并选择 属性
    • 在 macOS 上:选择 Apple 图标并点击 关于本机
  • 设备名称

    1. AVD 管理器 中,点击打开设备 操作 列中的菜单。
    2. 选择 查看详细信息(或打开 $avdname.avd/config.ini 文件)。
    3. 查找 hw.device.name 的条目。例如:hw.device.name=Nexus 5