android - Android Gradle任务真的很慢

标签 android performance gradle build

请注意,此问题仅在使用OSx el capitan的Macbook pro 2013上的此项目中发生。

这是我的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,这就是它停留大约10分钟而没有内存或CPU使用率的问题:
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秒<---无需下载依赖项即可进行清理

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

编辑:汇编--profile输出:
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

时间数学似乎有点过时:§

最佳答案

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

在我的buildTypes {}中,我有如下内容:

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

getSomething()方法所做的事情花费了很多时间。同样,每种构建类型和 flavor 组合都需要调用它,在这种情况下,总共需要调用15次。
applicationVariants.all { variant ->
    buildConfigField STRING_ARRAY, LOCATION_TRANSLATIONS, "{}"
}

我不确定为什么在诸如clean之类的命令中调用它,但这就是正在发生的情况。

关于android - Android Gradle任务真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34856726/

相关文章:

android - 如何在 Android Studio (3.0.1)/Device File Explorer 中打开一个 sqlite 文件

android - FlutterFire Firebase 实时数据库在 Android 上显示 'Client is offline' 错误,但在 iOS 上运行良好

java - 等待 Swing 完成更新 JProgressBar,然后再继续

algorithm - 为什么我们不能使用 O-Notation 来比较算法?

java - 在循环之前或循环中声明变量之间的区别?

testing - 无法从 Gradle 中的替代测试源集访问 Kotlin 内部成员

javascript - window.location.href 在phonegap应用程序中不起作用

java - Android 速率按钮语法错误

Gradle:在模型 DSL 中使用字符串插值

没有重复类错误的 Android 基础 flavor