Android gradle任务真的很慢

时间:2016-01-18 14:09:23

标签: android performance gradle build

请注意,此问题仅适用于我的Macbook pro 2013与OSx el capitan上的此项目。

这是我的grade.properties配置:

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

我运行了一个简单的命令,例如./gradlew clean --debug,这就是它在没有内存或CPU使用的情况下卡住了10分钟的事情:

11:27:10.337 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  OutputStream: IntermediateStream{rootLocation=/Users/tiagorocha/Documents/git/golivephone/FamilyLiveApp/build/intermediates/transforms/jarMerging/androidTest/vfpt/debug, scopes=[PROJECT, PROJECT_LOCAL_DEPS, SUB_PROJECTS, SUB_PROJECTS_LOCAL_DEPS, EXTERNAL_LIBRARIES], contentTypes=[CLASSES], dependencies=[transformClassesWithJarMergingForVfptDebugAndroidTest]}
11:27:10.339 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager] ADDED TRANSFORM(vfptDebugAndroidTest):
11:27:10.339 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  Name: multidexlist
11:27:10.340 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  Task: transformClassesWithMultidexlistForVfptDebugAndroidTest
11:27:10.340 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  Ref'edStream: IntermediateStream{rootLocation=/Users/tiagorocha/Documents/git/golivephone/FamilyLiveApp/build/intermediates/transforms/jarMerging/androidTest/vfpt/debug, scopes=[PROJECT, PROJECT_LOCAL_DEPS, SUB_PROJECTS, SUB_PROJECTS_LOCAL_DEPS, EXTERNAL_LIBRARIES], contentTypes=[CLASSES], dependencies=[transformClassesWithJarMergingForVfptDebugAndroidTest]}
11:27:10.341 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager] ADDED TRANSFORM(vfptDebugAndroidTest):
11:27:10.341 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  Name: dex
11:27:10.341 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  Task: transformClassesWithDexForVfptDebugAndroidTest
11:27:10.341 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  InputStream: IntermediateStream{rootLocation=/Users/tiagorocha/Documents/git/golivephone/FamilyLiveApp/build/intermediates/transforms/jarMerging/androidTest/vfpt/debug, scopes=[PROJECT, PROJECT_LOCAL_DEPS, SUB_PROJECTS, SUB_PROJECTS_LOCAL_DEPS, EXTERNAL_LIBRARIES], contentTypes=[CLASSES], dependencies=[transformClassesWithJarMergingForVfptDebugAndroidTest]}
11:27:10.342 [DEBUG] [com.android.build.gradle.internal.pipeline.TransformManager]  OutputStream: IntermediateStream{rootLocation=/Users/tiagorocha/Documents/git/golivephone/FamilyLiveApp/build/intermediates/transforms/dex/androidTest/vfpt/debug, scopes=[PROJECT, PROJECT_LOCAL_DEPS, SUB_PROJECTS, SUB_PROJECTS_LOCAL_DEPS, EXTERNAL_LIBRARIES], contentTypes=[DEX], dependencies=[transformClassesWithDexForVfptDebugAndroidTest]}
*---> Takes forever here <---*
11:39:36.144 [QUIET] [system.out] [VersionsPlugin][VersionCode] = 3000500
11:39:36.168 [QUIET] [system.out] [VersionsPlugin][VersionName] = 3.0.5.x
11:39:36.210 [INFO] [org.gradle.configuration.project.BuildScriptProcessor] Evaluating project ':libraries' using empty build file.
11:39:36.212 [DEBUG] [org.gradle.configuration.project.BuildScriptProcessor] Timing: Running the build script took 0.002 secs
11:39:36.212 [INFO] [org.gradle.execution.TaskNameResolvingBuildConfigurationAction] Selected primary task 'clean' from project :
11:39:36.213 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskGraphExecuter] Timing: Creating the DAG took 0.0 secs
11:39:36.214 [INFO] [org.gradle.BuildLogger] All projects evaluated.
11:39:36.214 [INFO] [org.gradle.BuildLogger] Tasks to be executed: [task ':FamilyLiveApp:clean', task ':libraries:DragSortListViewLib:clean', task ':libraries:LicenseManager:clean', task ':libraries:LocationLib:clean', task ':libraries:SC-Lib:clean', task ':libraries:moverlib:clean']
11:39:36.222 [INFO] [org.gradle.execution.taskgraph.ParallelTaskPlanExecutor] Using 6 parallel executor threads
11:39:36.222 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :FamilyLiveApp:clean (Thread[Task worker,5,main]) started.

总时间:13分钟8.357秒&lt; ---清除无依赖性下载

从11:27到11:39它在那里空闲,没有任何内存或CPU使用。我已经尝试了几种不同的设置而没有任何成功。在我的Ubuntu机器中,这一步几乎没有时间,清洁项目时需要10秒钟。我知道macbook pro有点过时了,只有4GB的内存,但是这样闲置仍然没有意义。

编辑:汇编 - 配置输出:

Summary:
Description Duration
Total Build Time     15m14.21s
Startup                 1.912s
Settings and BuildSrc   0.701s
Loading Projects        0.070s
Configuring Projects    4.273s
Task Execution         1m5.99s

Gradle version           2.2.1

时间数学看起来有点偏:§

1 个答案:

答案 0 :(得分:0)

好的,我找到了这个问题的根本原因。

在我的buildTypes {}中我有这样的东西:

applicationVariants.all { variant ->
    buildConfigField STRING_ARRAY, LOCATION_TRANSLATIONS, getSomething()
}

getSomething()方法正在做一些耗费大量时间的事情。此外,还调用了每种构建类型和风味组合,在这种情况下共调用15次。

applicationVariants.all { variant ->
    buildConfigField STRING_ARRAY, LOCATION_TRANSLATIONS, "{}"
}

我不确定为什么在干净的命令中调用它,但这就是发生的事情。