2016-10-04 29 views
1

MultiDexを有効にした後、Gradleのビルドに時間がかかりすぎる(文字通り1時間の実行後に建物が完成しない)。私はhttps://developer.android.com/studio/build/multidex.htmlサイトで与えられた手順に従って、アプリケーション内でMultiDexを設定しました。Gradle Build too too

以下は、私の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秒かかる。しかし、私はあまりにも前のロリポップデバイスをテストしたい。私もまだ運私/home/.gradleフォルダを削除しようとしている

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. 

私のスタックトレース添付しています

編集2

ギリスのアドバイス@を1として。明らかに、ロックを取得するループがあります。

また、私は完全なログのためthis pastebinを参照してくださいあまりにも

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

を私jstacktraceを添付しています。

+0

のような質問*コンパイルが長すぎます*答えは簡単です...購入PC/Mac – Selvin

+0

iMac(27-inch、Late 2012)3.2 GHz Intel Core i5,8 GB 1600 MHz DDR3、NVIDIA GeForce GTX 675MX 1024 MB –

+0

@Selvinによると、あなたのPCの設定が低い場合は、通常の時間がかかるが、私はその1時間または2分以内に完了する私のデュアルコアでビルドを完了するために時間がかかることはないと仮定します。 – androidXP

答えて

3

ご協力いただきありがとうございます。私はこの問題を解決しました。明らかに問題は、JaCoCoが私のクラスdexingと一緒にdexingしていて、ロックを発行していたからだと思います。私はこれをアプリケーションのbuild.gradleのtestCoverageEnabled=true行を削除して修正しました。

いずれの場合も同様の問題が発生します。 2つのビルドフレーバ(prodとdevelopment)を作成し、開発フレーバにのみtestCoverageEnable=true行を追加し、それ以外の場合はfalseに設定します。また、開発にはminSdkVersionが21(Lollipop)に設定されていることを確認してください.DeingはARTのために行われます。基本的にはこの問題にぶつからないでしょう。

+0

"testCoverageEnable"を削除すると、テストカバレッジレポートを取得できません。 –

+0

複数のフレーバーを作成し、ポストロリポップバージョンのtestCoverageを有効にします。 –

+0

この解決策は私の一日を救った –

0

無効なキャッシュを削除し、チェック「オフライン作業」の作業を設定グローバルのGradleで最後に再起動し、更新した後、あなたのGradleも最新のAndroidのスタジオであることを確認し、この

android { 
     compileSdkVersion 24 
     buildToolsVersion "24.0.0" 

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

それを試して、運がない。 –

+0

'org.gradle.jvmargs = -Xmx4096m -XX:MaxPermSize = 2048m'これは私のgradleプロパティです –

+0

これらがあなたのために動作しない場合は、アンドロイドスタジオをきれいにインストールしてみてください。 –

0

ファーストをお試しください私にとっても試してみてください。 enter image description here

+0

私もそれを試みました。私はgradleバージョン3.1とbuildToolsバージョン2.2を使用しています。私はオフライン作業を有効にしてみました –

+0

それは動作しませんか? – androidXP

+0

平均的なインターネットはありません。だから定期的に私のビルドは12秒以上かかることはありません。 (私が同期してビルドしたことで)。私のインターネットの速度は200Mbpsだと私は思うが、それはフラッシュ内のすべての依存関係をダウンロードするのに十分だと思う。しかし、私はオフラインモードでも試してみました。 –

0

Gradleのタスクの実行性能を向上させるためにいくつかのヒント:

のGradleデーモン あなたが構築するためにデーモンを使用するのGradleを伝える場合は、(私のコンピュータ上のダウン2秒まで)のGradleの起動時間を短縮することができます:

0123:あなたは多くのサブモジュールの依存関係を持つ、非常に複雑なプロジェクトを構築する場合

org.gradle.daemon=true 

パラレルプロジェクト実行 これは本当に大きな違いを生むことができます私たちのホームディレクトリにプロパティファイルで定義されたプロパティは、私たちのプロジェクトディレクトリ内のファイルで定義されたプロパティよりも優先さ

org.gradle.parallel=true 

グローバルgradle.properties

。この背後にある理由は、あなたが起動時間は、メモリの消費量よりも重要である場合には、ビルドサーバー上のGradleデーモンを使用しないようにしたいということです。

別に他に与えられたすべてのGradleの調整から
/Users/~/.gradle/gradle.properties 

like this

0

答え、あなたはまた、グラデーションの処理時間を終了するような何かをすることができます。私の経験ではそれを行い、新鮮なビルドを開始することで問題が解決されます。

0

は、あなたのコンソールでアプリのフォルダに移動して実行します。

./gradlewビルド--debug

これはうまくいかないものをたくさんの情報を提供。 通常、gradleがハングすると、それは取得できない外部依存関係によって引き起こされます。

Androidスタジオでオフラインモードを有効にして、これが本当に問題であるかどうかを確認できます。

+0

あなたの助言のためにちょっと人ありがとう。私はデバッグログとスタックトレースも添付しました。ウェイクロックを取得するループがあるようです。 –