Reputation: 1041
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.
Upvotes: 5
Views: 8923
Reputation: 67
You can use the exit(0);
command at the end of your program and it should quit out of this loop
Upvotes: 0
Reputation: 1041
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.
Upvotes: 5
Reputation: 2276
go to your app folder in your console and run:
./gradlew build --debug
this gives you a lot of information what goes wrong. usually when gradle hangs it is caused by an external dependency which cannot be retreived.
You could try enabling offline mode in android studio to see if this is really the issue.
Upvotes: 1
Reputation: 526
Apart from all the gradle tweaks given in other answers, you can also do something like end the gradle process time to time. In my experience doing that and starting a fresh build solves the issue.
Upvotes: 1
Reputation: 3158
A few tips to increase the Gradle task execution performance:
Gradle Daemon You can decrease Gradle’s startup time (on my computer down to two seconds) if you tell Gradle to use a daemon to build:
org.gradle.daemon=true
Parallel Project Execution This can really make a significant difference if you are building a very complex project with many sub-module dependencies:
org.gradle.parallel=true
Global gradle.properties
The properties defined in the property file in our home directory take precedence over the properties defined in the file in our project directory. The reasoning behind this is that you want to avoid using the Gradle daemon on your build servers, where startup time is less important than memory consumption:
/Users/~/.gradle/gradle.properties
Upvotes: 0
Reputation: 1719
First Make sure your gradle is Up-To-Date also android studio After update delete invalid cache and restart then at last in Global Gradle Setting check "Offline Work" its work for me too give it a try.
Upvotes: 0
Reputation: 1809
Try this
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
dexOptions {
javaMaxHeapSize "4g"
}
....
}
Upvotes: 0