web-dev-qa-db-ja.com

Gradleビルドはマルチプロジェクト構造で本当に遅い

およそ140のプロジェクト/ライブラリを含むマルチプロジェクト設定でGradleを使用してビルドする場合、ビルド時間は1時間22分かかりました。そして、私は--parallelを使用していました。そして、私たちのANTビルドは、並行ビルドなしで20分もかかりません。

これがまさに私がやったことです。

./gradlew clean
./gradlew build --parallel

私は少しテストを行いましたが、デクシングに最も時間がかかっているようです。 gradleプロセスが既にデクシングしたものを再利用する方法はありますか?ライブラリがすでに構築されている場合は、すでにデクスされたライブラリを再利用する必要があります。

オプション--no-rebuildを見ましたが、そのオプションで実行すると、次のように表示されます

File '/path/to/project/build/libs/project.aar' specified for property 'bundle' does not exist.

ファイルのパスとプロジェクト名を一般的なものに置き換えました。

Gradle 1.9-rc-3の使用


追加情報(2014年1月15日):

preDexDebugpreDexReleaseは、各プロジェクトで非常に長い時間を要しました。他のどのタスクよりもはるかに長い。


進捗状況(2014年1月15日):

さて、とりあえず、preDexLibraries = falseをすべてのbuild.gradleファイルに入れました。ただし、そのエントリを配置できる集中化された場所を知りたいのですが、他のすべてのbuild.gradleファイルに影響します。

ただし、現在dexReleaseおよびdexDebugには長い時間がかかります。ビルドでdexDebugまたはdexReleaseのみを実行し、他の方法をスキップするように指示する方法はありますか?


進捗状況(2014年1月15日):

assembleDebugの使用は成功しました。しかし、それはまだそれがすでにdextedライブラリを再利用していないようです。デクシングはまだ永遠にかかっているので。プロジェクトごとに約1分かかります。 gradleで既にdex化されたライブラリを再利用する方法はありますか?または、ビルドがまだ約1時間かかる別の理由がありますか?私たちのANTプロセスに15分もかかりません。

24
prolink007

cleanを実行すると、既にプレデキシングされたライブラリが実際に削除されます。
推奨通り このスレッドで プレデキシングを無効にすることで、cleanビルドの時間を節約できます(次のビルドで削除されるため):

Android {
  dexOptions {
    preDexLibraries = false
  }
}
21
rciovati

この投稿によると

現在、各プロジェクトは独自に依存関係をpre-dexします。つまり、同じライブラリに依存する2つのコンポーネントは、どちらもそのライブラリのclasses.jarでpre-dexを実行します。これを修正することを検討しています。

7
prolink007

Gradlesコンパイラのパラメータを設定してみましたか?

リモートの依存関係がある場合、プロジェクトを実行するたびに、ネットワークを使用してリモートリソースで操作されます。 Gradlesコンパイラへの命令を定義して、彼がオフラインで作業するように指定する必要があります。

--offline

ここで、パフォーマンス向上のためのコンパイラ設定のスクリーンショットを残します。

enter image description here

または同じもの...

enter image description here

出典: http://gradle.org/docs/current/userguide/gradle_command_line.html

2
pablopatarca