【问题标题】:Android Studio using 100% CPU on an i7 processor for project RebuildAndroid Studio 在 i7 处理器上使用 100% CPU 进行项目重建
【发布时间】:2015-07-10 21:50:29
【问题描述】:

我的 Windows 7 机器有一个四核 i7 处理器。当我重建我的项目时,平均需要 25 秒。当我启动应用程序时,平均需要 36 秒(在应用程序上传到设备之前)。

我的项目的 /src 文件夹中有 588 个文件,其中包括我所有的 java 和 xml 代码。我的 /libs 文件夹中有两个 .so 库,每个 5MB 和 7 个 jars。

请参阅我随附的屏幕截图。正如你所看到的,我的 CPU 一直处于 100% 的最大值。我的 iTunes 音乐暂停,并且在我的 Windows 任务栏的右下角弹出“性能不佳”。就是这么糟糕。

我使用的是 Android Studio 1.2.1.1

大部分时间都花在了 preDex 和 dex 操作上。

这是我到目前为止尝试过的(另外,我还没有一起尝试过):

  1. 添加 gradle.properties -> "org.gradle.daemon=true"
  2. 省电
  3. 模式无效缓存 /
  4. 重启全局 Gradle 设置 -> 离线
  5. work Compiler -> 自动生成项目

还没有任何效果。我无法想象这是一个普遍的问题,对吗?我是不是太无能了,因为这真的比 Eclipse 慢得多?

我想我的问题是:

  1. 这可能是由于我的 jar 或 so 文件的大小造成的吗?
  2. 我接管了一个在 XML 文件中有许多嵌套视图的项目。这会导致问题吗?

我真的很想找救命稻草,所以如果有人有任何信息,尤其是为什么 dex 操作会占用这么多 CPU,那就太棒了。

如果我编辑一个 XML 文件,进行重建,然后启动应用程序,我想这是不言而喻的。如果没有什么可以清理和重建... 当我只是做一个 Make Project 时...平均构建时间是 3 秒。

【问题讨论】:

  • 是的。为什么在我的 i7 四核处理器上编译和构建 588 文件项目需要 38 秒并使用 100% CPU 的开发环境。
  • 如果从 CLI 运行构建需要多长时间?
  • 在 Android Studio 中构建项目比在 Eclipse 中花费的时间要长得多。这是非常不幸的。回到 Eclipse 不是一个选项,因为 Eclipse ADT 插件和 ant 不支持 multidex,所以你不能使用 google play 库。
  • 'gradlew.bat clean' 后跟 'gradlew.bat assembleDebug' 等于 5 秒 + 47 秒
  • 天哪。在下载最新的 Java JDK 和 Android Studio 并让 Android Studio 生成我的第一个基于“空白活动”的应用程序后,我也遇到了同样的问题。它创建它,然后在 2-3 分钟内使用 100% CPU 进行“索引”。还没写一行代码,环境就停滞了!!

标签: java android android-studio


【解决方案1】:

以下是我能够做出的三项改进:

我每次构建项目时都在对我的 JAR 进行预分解,所以我找到了这个解决方案:

dexOptions {
    preDexLibraries = false
}

我使用的是整个 Google Play 服务库:

compile('com.google.android.gms:play-services:+') {
    exclude module: 'support-v4'
}

当我只需要 Google Cloud Messenger 时:

compile('com.google.android.gms:play-services-gcm:+') {
    exclude module: 'support-v4'
}

在 Eclipse 中,我总是会进行重建,然后使用播放按钮启动应用程序。在 Android Studio 中,现在我只是在做一个 Clean 然后使用播放按钮启动应用程序。此外,Android Studio 中的“运行”按钮并非每次都在清理后立即起作用。这导致了似乎是延迟,因为什么都没有发生。所以现在我让 Gradle 控制台保持打开状态,以确保运行按钮正常工作,如果不正常,我只需再次点击它。

我曾经拥有的:

Rebuild: 26 seconds
Launch:  36 seconds
Install: 15 seconds

现在:

Clean:    8 seconds
Launch:  22 seconds
Install: 15 seconds

这是一项重大改进!希望这对其他人有帮助。

【讨论】:

  • 您的 Google Play Services 和 Google Cloud Messenger 的示例是相同的...
  • dexOptions 放在哪里
【解决方案2】:

正如tracker page for this issue 中所述,团队已确定这是问题所在:

--parallel-threads 仅适用于项目并行化。

对于并行运行的 android 任务,我们总是创建为 尽可能多的线程

从页面上看,他们似乎以 1.3 版为目标来解决这个问题(见那里的评论 #13)。

与此同时,帮助我应对 Windows 7 的方法是设置 Android Studio 进程(及其子进程)的 CPU 亲和性,以腾出至少一个内核(如注释 #9 中所建议的那样)页)。

有很多方法可以做到这一点,但您可能想尝试top-voted answer on this superuser question(建议使用Process Lasso),它似乎对我来说足够好用。

【讨论】:

  • 这个问题已经存在2年了。
【解决方案3】:

除了特定于 Gradle 的优化(见下文),我建议您尝试禁用防病毒保护 Gradle 缓存目录和 Android Studio 项目目录。对我来说,这将我的构建时间减少了大约 50%。从 Windows 搜索索引中排除这些相同的目录也会有所帮助。

我在 ~/.gradle/gradle.properties 中使用的 Gradle 优化。

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx6144m <-- Tweak this based on available RAM
org.gradle.caching=true
org.gradle.parallel=true
kotlin.incremental=true

请注意,启用缓存意味着您有时必须在切换分支时显式清除缓存。当我遇到令人费解的构建问题时,我会运行此脚本。

#!/bin/bash

# Clean Android cache
./gradlew cleanBuildCache

# Clean Gradle cache, prompting for each directory
find ~/.gradle/caches -maxdepth 1 -name build-cache* -print -exec rm -rfI {} \;

# Clean Project
./gradlew clean

# Stop Gradle Daemon
./gradlew --stop

【讨论】:

    【解决方案4】:

    说实话,由于 UI 设计器,Android Studio 比 Eclipse 更好。缺点是它使用 gradle 而不是 Ant。 Gradle 也更好但更慢 - 特别是在 Windows 上。它在 Linux 上运行得更好。如果您以前没有使用过 Linux,请不要害怕。 Linux Mint 是一个稳定的操作系统,具有类似于 Windows 的 UI。你很快就到家了。它消耗更少的资源,从而为 gradle 构建留下更多的处理能力。进行开关。你永远不会回去。

    【讨论】:

    • 是的,我正在考虑尝试这样做,但我不确定为什么 gradle 会在 Linux 上使用更少的 CPU?问题是我的 CPU 在 30 秒内从大约 5% 变为 100%,唯一的变化是我正在运行 gradle build
    • 是的,它让 Android 开发几乎无法忍受。到目前为止,我还没有看到任何解决方案。有一个称为“并行性”的功能可以提高性能,但它仍处于试验阶段。此外,如果您有子项目,您可以通过将它们打包为 jar 文件来节省一些编译时间。这只是意味着编译器的工作量更少。
    • 这个答案没有解决这个问题:为软件中的性能问题更改操作系统不是一个现实的答案。其他答案表明问题出在软件本身内部。此外,在“此问题的跟踪页面”的下一个答案中,有些人在 Linux 上报告了相同的问题。
    • 同时,我正在以创纪录的时间编译我的项目。 Dell 4800 Precision 工作站、Linux Mint 17.3、32 GB RAM、Raid 0 中的双三星 840EVO SSD。
    • 更好的 UI 设计师?我不同意,它与 Eclipse 相同,它不是很好。我只在按下按钮之前使用它来检查我的布局是否正确,因为我花了 10 分钟来构建以查看我最近的更改。这是我唯一的用途。
    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 2010-12-11
    • 2016-03-24
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2019-09-06
    • 2017-03-21
    相关资源
    最近更新 更多