java - Android Studio 在 i7 处理器上使用 100% CPU 进行项目重建

标签 java android android-studio

我的 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 文件中有许多嵌套 View 的项目。这会导致问题吗?

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

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

enter image description here

最佳答案

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

我每次构建项目时都在对我的 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

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

关于java - Android Studio 在 i7 处理器上使用 100% CPU 进行项目重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350847/

相关文章:

android - 已更新为Canary 3.0,并且运行时Gradle执行失败

android - Logcat只产生FA日志

javascript - ScrollView 中的动态 View

Android 转换为序数格式

Java Hadoop FileSystem 对象到 File 对象

java - 无法从迭代自然数的线程中打印所有数字

java - 如何使电话号码可点击以在Android的短信服务中使用?

java - 安卓工作室 : Project successfully compiled but can't access Google Play Services on device

java - 许多主机通过 jdbc 连接到 teradata

java - 如何洗牌一个集合?