添加新库之后,Android Studio构build速度会变慢吗?

我的应用程序使用旧的架构组件 我想移动到新的Android架构组件 。

为此,我在开始时添加了与房间相关的依赖关系,之后构build正常。

但是当我尝试添加Lyfecycles,LiveData和ViewModel的依赖关系时,如上所述。

应用程序构build过程显着减慢,需要5分钟和更多时间才能构buildapk。

在应用程序的build.gradle中添加了依赖关系之后:

compile "android.arch.lifecycle:runtime:1.0.0-alpha5" compile "android.arch.lifecycle:extensions:1.0.0-alpha5" annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha5" 

此外,我必须启用杰克为Java 8的兼容性,如下所示:

 defaultConfig { ........ jackOptions { enabled true } } 

join所有这些组件之后,构build过程大大减缓。 我尝试通过Help -> Edit custom VM options机选项来改变一些参数的Help -> Edit custom VM options

 -Xmx5120m 

我把它设置到几乎5 GB,但没有为我工作。 我的机器有足够的硬件我相信。 (8 GB内存,Windows 10,1TB硬盘,AMD A8)

我的应用程序使用了许多Google服务,例如Gmail API,Firebase API,还有一些其他库,我耗尽了64K参考限制吗? 但是我已经启用了这里提到的multidexing。

这是因为新的架构组件还是其他? 如何使构build过程更快?

更新:

Budius在下面的答案之一提出了一个脚本,将显示每个构build过程所采取的时间,我在我的应用程序执行它在这里是发现:

 BUILD SUCCESSFUL Total time: 18 mins 28.44 secs Task timings: 480ms :app:mergeDebugResources 2516ms :app:processDebugResources 487725ms :app:transformClassesWithPreJackPackagedLibrariesForDebug 29213ms :app:transformClassesWithPreJackRuntimeLibrariesForDebug 752ms :app:transformResourcesWithMergeJavaResForDebug 556894ms :app:transformJackWithJackForDebug 5184ms :app:transformNativeLibsWithMergeJniLibsForDebug 17524ms :app:packageDebug 

大部分的时间都是由杰克拍摄的。

我尝试了下面的答案由Bryan提出的金丝雀版本是输出build立过程所需的时间:

 BUILD SUCCESSFUL in 6m 11s 42 actionable tasks: 33 executed, 9 up-to-date Task timings: 608ms :app:preDebugBuild 350ms :app:mergeDebugResources 394ms :app:processDebugManifest 2543ms :app:processDebugResources 9410ms :app:javaPreCompileDebug 46585ms :app:compileDebugJavaWithJavac 262ms :app:compileDebugShaders 395ms :app:mergeDebugAssets 5835ms :app:packageInstantRunResourcesDebug 98922ms :app:transformClassesWithDesugarForDebug 334ms :app:transformClassesWithExtractJarsForDebug 7765ms :app:transformClassesWithInstantRunVerifierForDebug 23117ms :app:transformNativeLibsWithMergeJniLibsForDebug 10128ms :app:transformResourcesWithMergeJavaResForDebug 16565ms :app:transformClassesWithInstantRunForDebug 11825ms :app:transformClassesWithInstantRunSlicerForDebug 84703ms :app:transformClassesWithDexBuilderForDebug 17061ms :app:transformDexArchiveWithDexMergerForDebug 1706ms :app:transformDexWithInstantRunDependenciesApkForDebug 9770ms :app:transformDexWithInstantRunSlicesApkForDebug 10571ms :app:packageDebug 1387ms :app:buildInfoGeneratorDebug 

所以我删除了插孔和切换到这个金丝雀版本,build立比以前肯定,但仍然使用缓慢。

Solutions Collecting From Web of "添加新库之后,Android Studio构build速度会变慢吗?"

杰克工具链已被弃用 ,在弃用之前仍处于试验阶段。 虽然生成代码的过程可能会很慢(如@FlorescuGeorgeCătălin所述),但通常不会造成过慢的编译时间。 我怀疑造成生产时间缓慢的原因是杰克工具链; 因为这 是 非常 缓慢的 。

如果你想要Java 8的语言function,我build议你转移到Android Studio 3.0的内置 版本的加那利版本 。

如果这不是一个选项,您可以使用Retrolambda ,其中包括大部分相同的Java 8语言function。

关于你的问题很多是基于这样或那样的假设,那就是“很多”。 但是时间是非常容易测量的东西,而Gradle会将构build过程分成几个更小的任务。 所以我想你最好的行动是衡量每一项任务,而不是比较一下这么长时间的事情。

这是一个脚本,我测量生成时间 ,只是添加它做你的项目的根文件夹,并在您的顶层gradle文件添加apply from: 'time.gradle'

timer.gradle

 import java.util.concurrent.TimeUnit class TimingsListener implements TaskExecutionListener, BuildListener { private long startTime private timings = [] @Override void beforeExecute(Task task) { startTime = System.nanoTime() } @Override void afterExecute(Task task, TaskState taskState) { def ms = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS); timings.add([ms, task.path]) } @Override void buildFinished(BuildResult result) { println "Task timings:" for (timing in timings) { if (timing[0] >= 250) { printf "%7sms %s\n", timing } } } @Override void buildStarted(Gradle gradle) {} @Override void projectsEvaluated(Gradle gradle) {} @Override void projectsLoaded(Gradle gradle) {} @Override void settingsEvaluated(Settings settings) {} } gradle.addListener new TimingsListener() 

由于库有一个注释处理器,他必须生成新的代码到生成的类。 匕首也是一个生成代码的库。 刀切也一样。

你可以find他们到app/build/generated项目文件夹。

你可以在这里查看更多关于注释处理器的信息

也可以从你的硬盘。 SSD可以给你更多的处理能力。

您是否将Gradle设置为Offline Work并尝试将Edit custom VM options为更大的堆大小?

另一个解决scheme是将Android Studio升级到Android Studio 3.0 ,这也增加了构build速度

文件 – >设置 – >(左侧)构build,执行,开发 – >构build工具 – > Gradle

在“全球Gradle设置”下,会出现一个名为“Offline Work”的checkbox。 核实。

你做了吗?

在android {}中的build.gradle中添加以下内容

 dexOptions { incremental true javaMaxHeapSize "4g" } 

在gradle.properties文件中设置以下内容:

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

这是一个远射,但有一个真正的Android设备连接到您的testing机器? 我实际上注意到,如果我的testing设备连接,我的AS运行速度非常缓慢,可能adb出现问题,并且会降低系统速度。

另外,我从我的旧机器升级到16GB的ram i7处理器,事情开始运行得更快。