2016-10-04 5 views
1

Сборка Gradle теперь занимает слишком много времени (буквально она не завершает строительство после запуска в течение 1 часа) после включения MultiDex. Я выполнил шаги, указанные на сайте 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 секунды. Но я тоже хочу протестировать устройства с предварительным леоптипом.

Edit 2

В соответствии с @ советы Джиллиса, я прилагаю мой 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. 

Я попытался удалить свою папку /home/.gradle тоже, но до сих пор не повезло. Ясно, что существует замкнутая петля при приобретении замка.

Также я прилагаю мой jstacktrace слишком

"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) 

см this pastebin для полного журнала.

+0

для вопроса как * Компиляция занимает слишком много времени * Ответ прост ... купить лучше ПК/Mac – Selvin

+0

iMac (27-дюймовый, поздний 2012) 3,2 ГГц Intel Core i5, 8 ГБ 1600 МГц DDR3, NVIDIA GeForce GTX 675MX 1024 MB –

+0

Как @Selvin говорит, что если ваша конфигурация ПК низка, то ее нормальное время занимает, но я предполагаю, что это не так низко, что потребуется час для завершения сборки даже в моем двойном ядре, который завершается в течение 1 или 2 минут. – androidXP

ответ

3

Спасибо за вашу высокую оценку. Я решил эту проблему. По-видимому, проблема заключалась в том, что (я полагаю,) JaCoCo был dexing вместе с моим классом dexing и выпускал замки. Я исправил это, удалив строку testCoverageEnabled=true в файле build.gradle моего приложения.

В случае, если кто-либо из вас столкнется с подобной проблемой. Создайте два стиля сборки (prod и development) и добавьте строку testCoverageEnable=true только для аромата разработки и установите для нее значение false else where. Также убедитесь, что у вашего развития есть minSdkVersion, установленный на 21 (Lollipop), поскольку dexing сделан для ART, и в основном вы не столкнетесь с этой проблемой.

+0

Но если вы удалите «testCoverageEnable», вы не можете получить отчет о покрытии теста, верно? –

+0

создать многократный аромат и включить testCoverage для версий post lollipop. –

+0

это решение спас мой день –

0

Попробуйте

android { 
     compileSdkVersion 24 
     buildToolsVersion "24.0.0" 

     dexOptions { 
      javaMaxHeapSize "4g" 
     } 
     .... 
    } 
+0

Пробовал и не повезло. –

+0

'org.gradle.jvmargs = -Xmx4096m -XX: MaxPermSize = 2048m' это мои свойства градиента –

+0

Если это не работает для вас, попробуйте выполнить чистую установку Android-студии. –

0

Сначала убедитесь, что ваш Gradle является Up-To-Date также Android Studio После обновления удалить недопустимый кэш и перезапустить затем, наконец, в Global Gradle Установка проверки «автономной работы» свою работу для меня тоже попробовать. enter image description here

+0

Я тоже это пробовал. Я использую версию gradle 3.1 и buildTools версии 2.2. Я пробовал работать с автономной работой тоже –

+0

, она не работает? – androidXP

+0

У меня средний, если не быстрый интернет. Поэтому регулярно моя сборка не займет больше 12 секунд. (по построению я имел в виду с синхронизацией). Моя скорость в Интернете составляет 200 Мбит/с, что, по моему мнению, достаточно для загрузки всех зависимостей во флэш-памяти. Но чтобы быть в безопасности, я также пробовал работать в автономном режиме. –

0

Несколько советов, чтобы увеличить Gradle производительность выполнения задачи:

Gradle Daemon Вы можете уменьшить время запуска Gradle в (на моем компьютере до двух секунд), если вы скажете Gradle использовать демон для создания:

org.gradle.daemon=true 

Параллельное выполнение проекта Это действительно может сделать существенную разницу, если вы строите очень сложный проект с большим количеством зависимостей суб-модуля:

org.gradle.parallel=true 

Глобальные gradle.properties

Свойства, определенные в файле свойств в нашем домашнем каталоге, имеют приоритет над свойствами, определенными в файле в нашем каталоге проекта.Смысл этого в том, что вы хотите, чтобы избежать использования демона Gradle на вашу сборку серверах, где время запуска является менее важным, чем потребление памяти:

/Users/~/.gradle/gradle.properties 

like this

0

Помимо всех Gradle ухищрений, приведенной в других ответы, вы также можете сделать что-то вроде завершения процесса градации во времени. По моему опыту это и начало новой сборки решает проблему.

0

перейти в папку приложения в консоли и выполните команду:

./gradlew построить --debug

это дает вам много информации, что идет не так. Обычно, когда зависает град, это вызвано внешней зависимостью, которую невозможно восстановить.

Вы можете попробовать включить автономный режим в студии android, чтобы узнать, действительно ли это проблема.

+0

Эй, спасибо за ваш совет. Я также добавил свой журнал отладки и stacktrace. Кажется, есть цикл в приобретении блокировки следа. –

Смежные вопросы