Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.

报告错误

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

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

另请注意,Issue Tracker 不是一个支持论坛。 如果您有关于如何使用工具或如何让 Android 应用上线的问题,请访问 stackoverflow.comAndroid 开发者支持资源之一。

如何报告错误

  1. 确保您使用的是最新版本工具。 我们耗费了大量时间来检查报告的错误是否已修复。 如果我们关闭了您的问题,并指明需要阅读此文档,请重新开立一个问题,前提是您可以使用最新版本工具重现此问题。

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

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

  4. 列出版本信息。 对于 Android Studio,您可以在 About 对话框(点击 Help > About)(或者,在 Mac 上,点击 Android Studio > About Android Studio)中查找此信息。 您无需突出显示要复制的文本,只需按 Ctrl + C(在 Mac 上,则按 Command + C),然后将它粘贴到错误报告中即可。

  5. 如果适用,列出您正在使用的 Java 版本(对于 Android Studio,此信息包含在 About 框中)。

  6. 列出您所使用的操作系统。

  7. 选择一个概括性的短语来描述错误。 令人惊讶的是,提交的错误报告当中有很多都是使用“错误”、“问题”、“异常”、“不工作”这样的概括性短语。

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

再强调一次,清楚说明如何重现错误至关重要。 如果可能的话,分享文件或项目,以帮助重现问题(当然,您不必在错误报告中附加任何专有源代码)。屏幕截图也有助于说明您正讨论的问题。

收集此信息后,在此处提交您的错误

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 支持

Instant Run 错误详情

要报告 Instant Run 问题,请执行以下步骤:

  1. 启用 Android Studio 记录有关 Instant Run 会话的附加信息。
  2. 如果您要在完成上一步之前提交有关您遇到的问题的反馈,请尝试重现问题。
  3. 遇到 Instant Run 问题后立即提交报告。

我们收集的信息

启用 IDE 记录有关 Instant Run 会话的以下信息,有助于 Android Studio 团队更好地了解您遇到的问题,此类信息将仅用于此目的

  • idea.log:当 Android Studio 及其 SDK 工具执行各种操作时,此日志会采集它们的相关详细信息。 您可以自行查看此日志,方法是:选择 Help > Show Log in Explorer(或者,在 Mac 上,选择 Show Log in Finder)。
  • build-info.xml:这是一个中间文件,Android Studio 使用此文件协调运行 Instant Run 功能和 Android Plugin for Gradle。
  • build.log:此日志采集 Gradle 版本号信息。 通过 --info 命令行选项运行 Gradle 并点击 View > Tool Windows > Gradle Console(或在工具窗口栏中点击 Gradle Console ),显示的输出与此类似。
  • Logcat 输出:在应用运行时从目标设备或模拟器采集 Instant Run 运行时事件(即,带 InstantRun 标记的事件)。 如需了解有关 Logcat 输出的更多信息,请阅读通过 Logcat 记录和查看日志
  • profile.log:此日志提供 Gradle 处理每个构建任务的进度概况。
  • TARGET-*:这是一个 Android Studio 以您的目标设备命名的空白文件(例如,TARGET-MOTOROLA-NEXUS6)。

启用记录附加信息

要授予 Android Studio 采集和发送此信息的权限,请执行以下步骤:

  1. 打开 Settings 或者 Preferences 对话框。
  2. 导航至 Build, Execution, Deployment >Instant Run
  3. 选中 Log extra info 复选框。 您可以随时停用此选项。
  4. 点击 OK

报告问题

启用记录附加信息后,重现您之前遇到的任何 Instant Run 问题。 重现问题后,按照如下步骤立即提交报告:

  1. 从菜单栏中选择 Help > Report Instant Run Issue。 此时将出现一个如图 4 所示的对话框。

    图 4. 您可以在文本字段中提供额外的详情,检查 Android Studio 将连同您的报告一起发送的日志。

  2. 在此文本字段中提供一些其他信息,描述您遇到的问题,例如重现问题的步骤或实际行为与您预期行为之间的差异。
  3. 操作完成后点击 OK

构建工具和 Gradle 错误详情

列出项目构建问题或 Gradle 同步问题的以下特定信息:

  • Gradle 版本。 选择 File > Project Structure,点击 Project,然后找到 Gradle version

  • Android 插件版本。 在 Gradle 版本页面上,找到 Android Plugin Version

  • 模块编译 Sdk 版本。 在以上页面的左侧窗格中选择您的模块,并找到 Compile Sdk Version

  • 模块构建工具版本。 在以上页面中,找到 Build Tools Version

  • Android SDK 工具版本。 选择 Tools > Android > SDK Manager,点击 SDK Tools,然后找到 Android SDK Tools

Android Emulator 错误详情

列出 Emulator 错误的以下特定信息:

  • Emulator 版本。 在 Emulator 中,打开 Extended controls,点击 Help,然后点击 About 标签,找到 Emulator version
  • Android SDK 工具版本。 选择 Tools > Android > SDK Manager,点击 SDK Tools,然后找到 Android SDK Tools
  • 主机 CPU 型号。
    • 在 Linux 上:打开 /proc/cpuinfo
    • 在 Windows 上:右键点击我的计算机,选择属性
    • 在 Mac 上:点击 Apple 图标,然后点击关于此 Mac
  • 设备名称。 在 AVD 管理器中,在该设备的操作列中点击打开下拉菜单,然后选择查看详情(或打开 $avdname.avd/config.ini 文件)。 查找 hw.device.name 对应的条目。例如:“hw.device.name=Nexus 5”