Gradle构建时间太长 [英] Gradle Build too long

查看:3987
本文介绍了Gradle构建时间太长的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在启用MultiDex之后,Gradle构建现在需要很长时间(从字面上看,它不会在运行1小时后完成构建)。我遵循 https://developer.android.com/studio/build/multidex中给出的步骤.html 网站在应用程序中配置MultiDex。



下面是我的gradle控制台的摘录。

 :app:compileDevelopmentDebugNdk UP-TO-DATE 
:app:compileDevelopmentDebugSources
:app:mergeDevelopmentDebugShaders UP -TO-DATE
:app:compileDevelopmentDebugShaders UP-TO-DATE
:app:generateDevelopmentDebugAssets UP-TO-DATE
:app:mergeDevelopmentDebugAssets UP-TO-DATE
:app: unzipJacocoAgent UP-TO-DATE
:app:transformClassesWithJacocoForDevelopmentDebug UP-TO-DATE
:app:transformClassesWithDexForDevelopmentDebug

上一个任务:app:transformClassesWithDexForDevelopmentDebug 是Gradle控制台停止的地方。任何帮助,将不胜感激。我还需要在前棒棒糖设备中测试应用程序。



编辑



只有当我测试我的应用程序时,棒棒糖测试设备。主测试设备的构建似乎工作正常。搭建Nexus 6P需要8.12秒。但我也想测试棒棒糖前的设备。

编辑2

根据@ Gillis的建议,我附加了我的stacktrace

  10:19:10.558 [DEBUG] [org.gradle.launcher。 daemon.server.Daemon] DaemonExpirationPeriodicCheck运行
10:19:10.558 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]等待获取守护进程地址注册表上的共享锁。
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]锁定已获取。
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]释放对守护进程地址注册表的锁定。
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]等待获取守护进程地址注册表上的共享锁。
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]锁定已获取。
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]释放对守护进程地址注册表的锁定。
10:19:20.555 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] DaemonExpirationPeriodicCheck运行
10:19:20.560 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]等待获取守护进程地址注册表上的共享锁。
10:19:20.560 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]锁定已获取。
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]释放对守护进程地址注册表的锁定。
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]等待获取守护进程地址注册表的共享锁定。
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]锁定已获取。
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]释放对守护进程地址注册表的锁定。

我尝试删除我的 /home/.gradle 文件夹,但仍然没有运气。显然有一个循环获取锁。



另外我也附加了我的jstacktrace

 文件锁定请求侦听器#27 prio = 5 os_prio = 31 tid = 0x00007fb9b2c20800 nid = 0x5d07 runnable [0x0000700001961000] 
java.lang.Thread.State:RUNNABLE
at java。 net.PlainDatagramSocketImpl.receive0(本地方法)
- 锁定< 0x00000006c026d670> (java.net.PlainDatagramSocketImpl)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143)
- locked< 0x00000006c026d670> (java.net.PlainDatagramSocketImpl)
at java.net.DatagramSocket.receive(DatagramSocket.java:812)
- locked< 0x00000006c0bc5df0> (一个java.net.DatagramPacket)
- 锁定< 0x00000006c026d630> (一个java.net.DatagramSocket)
在org.gradle.cache.internal.FileLockCommunicator.receive(FileLockCommunicator.java:60)
在org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler $ 1.doRun (DefaultFileLockContentionHandler.java:67)
at org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler $ 1.run(DefaultFileLockContentionHandler.java:54)
at org.gradle.internal.concurrent.ExecutorPolicy $ CatchAndRecordFailures。 onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl $ 1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java ():1142)
在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)$ b $在java.lang.Thread.run(Thread.java:745)

请参阅此pastebin for com完整日志。

解决方案

非常感谢您的赞赏。我解决了这个问题。显然这个问题是因为(我认为)JaCoCo和我的班级德兴一起闹事,并且发出了锁。我通过删除应用程序的build.gradle中的 testCoverageEnabled = true 行来解决此问题。

如果你们有人遇到过类似的问题。创建两个构建风格(prod和开发),并添加行 testCoverageEnable = true 仅用于开发风格,并将其设置为false否则在哪里。此外,请确保您的开发已将 minSdkVersion 设置为21(棒棒糖),因为您已经完成了针对ART的设计,基本上不会遇到此问题。


Gradle build now takes too long (literally it does not complete building after running for like 1 hour) after enabling MultiDex. I followed the steps given at https://developer.android.com/studio/build/multidex.html site to configure MultiDex in app.

Below is an excerpt from my gradle console.

:app:compileDevelopmentDebugNdk UP-TO-DATE
:app:compileDevelopmentDebugSources
:app:mergeDevelopmentDebugShaders UP-TO-DATE
:app:compileDevelopmentDebugShaders UP-TO-DATE
:app:generateDevelopmentDebugAssets UP-TO-DATE
:app:mergeDevelopmentDebugAssets UP-TO-DATE
:app:unzipJacocoAgent UP-TO-DATE
:app:transformClassesWithJacocoForDevelopmentDebug UP-TO-DATE
:app:transformClassesWithDexForDevelopmentDebug

the last task :app:transformClassesWithDexForDevelopmentDebug is the one where the gradle console stops. Any help would be appreciated. I also need to test the app in pre-lollipop devices.

Edit

The problem only occurs when I test my app in a pre-lollipop test device. Building for main test device seems to work fine. It takes 8.12 seconds while building for Nexus 6P. But I want to test for pre-lollipop devices too.

Edit 2

As per @Gillis's advice I am attaching my stacktrace

10:19:10.558 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] DaemonExpirationPeriodicCheck running
10:19:10.558 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
10:19:10.559 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
10:19:20.555 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] DaemonExpirationPeriodicCheck running
10:19:20.560 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
10:19:20.560 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
10:19:20.561 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.

I have tried removing my /home/.gradle folder too but still no luck. Clearly there is a loop in acquiring the lock.

Also I am attaching my jstacktrace too

"File lock request listener" #27 prio=5 os_prio=31 tid=0x00007fb9b2c20800 nid=0x5d07 runnable [0x0000700001961000]
   java.lang.Thread.State: RUNNABLE
        at java.net.PlainDatagramSocketImpl.receive0(Native Method)
        - locked <0x00000006c026d670> (a java.net.PlainDatagramSocketImpl)
        at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143)
        - locked <0x00000006c026d670> (a java.net.PlainDatagramSocketImpl)
        at java.net.DatagramSocket.receive(DatagramSocket.java:812)
        - locked <0x00000006c0bc5df0> (a java.net.DatagramPacket)
        - locked <0x00000006c026d630> (a java.net.DatagramSocket)
        at org.gradle.cache.internal.FileLockCommunicator.receive(FileLockCommunicator.java:60)
        at org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler$1.doRun(DefaultFileLockContentionHandler.java:67)
        at org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler$1.run(DefaultFileLockContentionHandler.java:54)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
        at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

please refer this pastebin for complete log.

解决方案

Thanks for your much appreciated help. I solved this issue. Apparently the issue was because (I suppose that) the JaCoCo was dexing along with my class dexing and was issuing a locks. I fixed this by removing the testCoverageEnabled=true line in my app's build.gradle.

In case any of you guys run into similar issue. Create two build flavours (prod and development) and add the line testCoverageEnable=true only for development flavor and set it to false else where. Also ensure that your development has the minSdkVersion set to 21 (Lollipop) as the dexing is done for ART and basically you won't be running into this issue.

这篇关于Gradle构建时间太长的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆