我们希望修复您报告的错误!但是许多错误报告未提供必需的信息。因此,我们将有限的资源集中用于修复具有完整报告的错误。为提高您报告的错误被修复的机率,请花时间认真阅读本文档。
如果您未遵循相关步骤,我们将关闭您报告的错误。如果发生这种情况,只需提供补充信息并重新提交错误报告即可。
另请注意,问题跟踪器不是一个支持论坛。如果您有关于如何使用工具或如何让 Android 应用正常运行的问题,请访问 stackoverflow.com 或若干 Android 开发者支持资源之一。
如何报告错误
确保您使用的是最新版本的工具。这样,我们就不必检查报告的错误是否已修复了。此外,如有可能,请您在 Android Studio 问题跟踪器中搜索类似问题,看看您遇到的问题是不是已经报告过了(通常情况下,您可以使用错误消息作为搜索关键字)。
通过依次选择 Help > Submit Feedback,在 Android Studio 中打开错误报告。要开始重现错误,这是最简单的方法,因为它会使用您的 Android Studio 版本、Java 版本和系统信息填充错误报告,而这些正是我们正确重现问题所需的信息。(否则,请在此处提交您的错误,并手动添加版本信息。)
描述重现问题的准确步骤。如果我们第一次尝试就可以重现问题,修复的机率会大大提高。如果可能的话,请列出代码段(或者,最好注明可用于重现错误的 GitHub 项目)。屏幕截图也有助于说明您观察到的问题。
描述您期望发生的结果以及实际观察到的结果。
选择一个描述性的短语来简要说明错误。令人惊讶的是,提交的错误报告当中有很多都是使用“错误”、“问题”、“异常”、“不工作”这样的概括性短语,这使得我们很难对这些问题进行排序。
对于某些类型的错误,我们还需要其他信息:
Android Studio 错误详细信息
列出下面这些特定于 Android Studio 错误的其他信息。
如果 IDE 挂起
如果 IDE 本身运行非常缓慢或完全停滞,请生成几个线程转储并将它们附加到错误报告中。这些转储告诉我们 IDE 正在忙于执行什么操作(或在等待什么争用资源)。
如果 IDE 运行缓慢但未停滞,还应附加 idea.log
文件(依次选择 Help > Show Log in Finder)。它会告诉我们是否因 IDE 持续将错误记录到日志中而导致它运行缓慢。
如果 IDE 耗尽内存
Android Studio 中的内存问题有时难以重现和报告。为了帮助解决此问题,Android Studio 提供了内存使用情况报告,您可以将此报告发送给 Android Studio 团队,以帮助确定内存问题的来源。
运行内存使用情况报告
要运行内存使用情况报告,请按照下列步骤操作:
在菜单栏中依次点击 Help > Analyze Memory Usage。
Android Studio 将转储相应的堆并提示您重启 IDE。如果重启 IDE,堆转储分析会立即开始。否则,堆转储分析会在您下次运行 Android Studio 时开始。无论哪一种情形,IDE 都会在内存使用情况报告已可供查看时通知您。
点击 Review Report。
在发送报告之前,您可以查看其中包含的所有信息。
查看完毕后,将报告内容复制并粘贴到文件中,并在提交错误时附加该文件。
通过这种方式提交报告信息可确保 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 功能,具体操作步骤如下:
- 点击模拟器面板中的 More 图标
。
在 Extended controls 窗口中,选择左侧的 Bug report。
此时系统会打开一个屏幕,您可以在其中查看错误报告详细信息,例如屏幕截图、AVD 配置信息和错误报告日志。您可以在此处输入重现错误的步骤,也可以先等一下,稍后将其输入到下一步生成的报告中。
等待错误报告完成收集,然后点击 Send to Google。此时将打开一个窗口,供您将错误报告保存在文件夹中,然后打开浏览器以在 Google 问题跟踪器中创建一个报告(该报告填充有必要的模拟器详细信息)。
在该报告中,填写所有剩余的详细信息(如重现错误的步骤),并附加创建错误报告时保存的文件。
否则,您必须手动输入以下详细信息:
- 模拟器版本。在模拟器中,打开 Extended controls,点击 Help,然后点击 About 标签页以查找 Emulator version
- Android SDK 工具版本。依次选择 Tools > SDK Manager,点击 SDK Tools,然后找到 Android SDK Tools
- 主机 CPU 型号。
- 在 Linux 上:打开
/proc/cpuinfo
- 在 Windows 上:右键点击我的电脑,然后选择属性
- 在 Mac 上:点击 Apple 图标,然后点击关于本机
- 在 Linux 上:打开
- 设备名称。在 AVD Manager 中,点击以打开相应设备的 Actions 列中的下拉菜单,然后选择 View Details(或打开
$avdname.avd/config.ini
文件)。查找 hw.device.name 对应的条目。例如:hw.device.name=Nexus 5