- 报告错误
- 如何报告错误
- Android Studio 错误详情
- 如果 IDE 挂起
- 如果 IDE 耗尽内存
- 如果 IDE 崩溃或引发异常
- 生成线程转储
- Instant Run 错误详情
- 我们收集的信息
- 启用记录附加信息
- 报告问题
- 构建工具和 Gradle 错误详情
- Android Emulator 错误详情
报告错误
我们希望修复您遇到的错误!但是许多错误报告未提供必要的信息。因此,我们将有限的资源集中用于修复包含完整报告的错误。为提高您报告的错误得以修复的机率,请花时间认真阅读此文档。
如果您未遵循相关步骤,我们将关闭您报告的错误。 如果出现此情况,只需提供补充信息并重新提交错误报告即可。
另请注意,Issue Tracker 不是一个支持论坛。 如果您有关于如何使用工具或如何让 Android 应用上线的问题,请访问 stackoverflow.com 或 Android 开发者支持资源之一。
如何报告错误
确保您使用的是最新版本工具。我们耗费了大量时间来检查报告的错误是否已修复。如果我们关闭了您的问题,并指明需要阅读此文档,请重新开立一个问题,前提是您可以使用最新版本工具重现此问题。
描述重现问题的准确步骤。 请具体说明。 如果我们第一次尝试就可以重现问题,修复的机率会大大增加。如果可能的话,请列出代码片段(或者,最好注明可用于重现此错误的 GitHub 项目)。屏幕截图也有助于说明您观察到的问题。
描述您期望发生的结果以及实际观察到的结果。
列出版本信息。 对于 Android Studio,您可以在 About 对话框(点击 Help > About)(或者,在 Mac 上,点击 Android Studio > About Android Studio)中查找此信息。您无需突出显示要复制的文本,只需按 Ctrl + C(在 Mac 上,则按 Command + C),然后将它粘贴到错误报告中即可。
如果适用,列出您正在使用的 Java 版本(对于 Android Studio,此信息包含在 About 框中)。
列出您所使用的操作系统。
选择一个概括性的短语来描述错误。 令人惊讶的是,提交的错误报告当中有很多都是使用“错误”、“问题”、“异常”、“不工作”这样的概括性短语。
对于某些类型的错误,我们还需要其他信息:
- Android Studio 错误详情
- Instant Run 错误详情
- Gradle 错误详情
- Emulator 错误详情
再强调一次,清楚说明如何重现错误至关重要。 如果可能的话,分享文件或项目,以帮助重现问题(当然,您不必在错误报告中附加任何专有源代码)。屏幕截图也有助于说明您正讨论的问题。
收集此信息后,在此处提交您的错误。
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 问题,请执行以下步骤:
- 启用 Android Studio 记录有关 Instant Run 会话的附加信息。
- 如果您要在完成上一步之前提交有关您遇到的问题的反馈,请尝试重现问题。
- 遇到 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 采集和发送此信息的权限,请执行以下步骤:
- 打开 Settings 或者 Preferences 对话框。
- 导航至 Build, Execution, Deployment >Instant Run。
- 选中 Log extra info 复选框。 您可以随时停用此选项。
- 点击 OK。
报告问题
启用记录附加信息后,重现您之前遇到的任何 Instant Run 问题。 重现问题后,按照如下步骤立即提交报告:
从菜单栏中选择 Help > Report Instant Run Issue。 此时将出现一个如图 4 所示的对话框。
图 4. 您可以在文本字段中提供额外的详情,检查 Android Studio 将连同您的报告一起发送的日志。在此文本字段中提供一些其他信息,描述您遇到的问题,例如重现问题的步骤或实际行为与您预期行为之间的差异。
- 操作完成后点击 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
- 在 Linux 上:打开
- 设备名称。在 AVD 管理器中,在该设备的操作列中点击打开下拉菜单,然后选择查看详情(或打开
$avdname.avd/config.ini
文件)。查找 hw.device.name 对应的条目。例如:“hw.device.name=Nexus 5”