Gradleキャッシュをクリアする方法は?


319

Android Studioを使用しようとしていますが、初めて起動したときは、コンパイルに45分ほどかかります...アプリケーションを終了しない場合は問題ありません。その後の各コンパイル/アプリケーションの実行には約45秒。

いくつかのキャッシュを確認しようとしまし.gradle/cachesた。ホームディレクトリにフォルダーがあり、そこには123 MBが含まれています。

.gradleプロジェクトフォルダーにもフォルダーがあります... 1つはtaskArtifacts200 MBのようなものでした。両方をランダムに核攻撃するのは怖いです。フォルダのどの部分を削除しても安全ですか?

Android Studioがgradle assembleアプリケーションを初めてロードするときにタスクを実行するために永遠にかかる理由についてのより良い説明はありますか?

また、intellijキャッシュもクリアする必要がありますか?


3
コンパイルに45分かかったのは、設定を変更Compiler -> GradleしなかったためUse in-process buildです。キャッシュとは何の関係もありません
デビッドT. 14

答えはどれも役に立たなかった。一部の画像が破損していることが判明しました。Windowsエクスプローラーで画像を開くと、破損している画像(プレビューを読み込まない画像)がすぐにわかります。それらの画像と出来上がりを交換してください!
Bimde 2017

@ david-tこのオプションの所在を指摘できますか?私はバージョン3.3.1を持っていますが、[ 設定]-[ビルド、実行、デプロイメント]で
Leo

回答:


262

@ Bradford20000がコメントで指摘したように、gradle.propertiesファイルとグローバルグラドルスクリプトがの下にある可能性があります$HOME/.gradle。このような場合、このディレクトリのコンテンツを削除するときは、特別な注意を払う必要があります。

.gradle/cachesディレクトリが保持しているGradleビルドキャッシュを。したがって、ビルドキャッシュに関するエラーが発生した場合は、それを削除できます。


43
注意すべき点の1つは、ホームディレクトリの.gradleフォルダーにgradle.propertiesファイルがある場合、フォルダー全体を削除する必要がないことです。通常、.gradle / cachesを削除するだけで、Gradleはすべての依存関係を再ダウンロードできます。
Bradford2000

1
Android Studioが更新されるたびに、gradleビルドの速度はますます遅くなってきます。デバイスにデプロイしてアプリの実行を停止し、再度デプロイする場合(コードに一切手を触れることなく!)、Androidスタジオがビルドを作成してデプロイするのに2分かかるのはなぜですか?フリギンヌッツです。
誰かどこか

1
Android Studioでシステムキャッシュを消去するには:Android stdioのメインメニューで、[ファイル]メニューから[ファイル]を選択します。無効化キャッシュ/ Restart.andビルド]メニュー>クリーンプロジェクト
聖武天皇

367

Gradleキャッシュは次の場所にあります

  • Windowsの場合: %USER_HOME%\.gradle/caches/
  • Mac / Unixの場合: ~/.gradle/caches/

これらのディレクトリを参照して手動で削除するか、実行することができます

rm -rf $HOME/.gradle/caches/

Unixシステム。このコマンドを実行すると、依存関係のダウンロードも強制されます。

アップデート2: 現在のプロジェクトのAndroidビルドキャッシュをクリアする

注:Android Studioのファイル| キャッシュの無効化/再起動はAndroidビルドキャッシュをクリアしないため、個別にクリーンアップする必要があります。

Windowsの場合:

gradlew cleanBuildCache

MacまたはLinuxの場合:

./gradlew cleanBuildCache

20
これは、Maven依存関係のキャッシュをクリアしませんでした。ライブラリをmavenリポジトリから削除し、Android Studioキャッシュを無効にしましたが、プロジェクトは引き続きビルドされます。これは、Maven依存関係のGradleキャッシュがクリアされないことを意味します。
mattm 2015年

2
説明した方法では、メインプロジェクトとそのプロジェクトの依存関係からキャッシュを削除するだけですが、ライブラリの依存関係はそのままです。AndroidStudioのキャッシュを消去する方法を説明しましたが、gradleのキャッシュは消去しませんでした。
Leandroid

ええ、でもプロジェクトをロードする前はMacには表示されません。
milosmns 2015年

それはまだ最新バージョンのAndroid Studio
Raju yourPepe

2
:あなたはきれいで清潔なキャッシュをしたい場合は、両方のタスクを実行gradlew clean cleanBuildCache
equiman

62

編集:機能し cleanBuildCacheなくなりました

Android GradleプラグインがGradleキャッシュ機能を利用するようになりました

REF:https : //guides.gradle.org/using-build-cache/

キャッシュをクリアするには

以前のビルドからのヒットを回避するためにキャッシュディレクトリをクリーンアップします

 rm -rf $GRADLE_HOME/caches/build-cache-*

REF:https : //guides.gradle.org/using-build-cache/#caching_android_projects

その他の分解

ここを参照してください(編集を含む)。

================

廃止された情報:

Gradleタスクを使用した最新のソリューション

cleanBuildCache

GradleのAndroidプラグイン経由で利用可能、リビジョン2.3.0(2017年2月)

依存関係:

  1. Gradle 3.3以降。
  2. ビルドツール25.0.0以降。

詳細:

https://developer.android.com/studio/build/build-cache.html#clear_the_build_cache

バックグラウンド

ビルドキャッシュ:

プロジェクトのビルド時にAndroidプラグインが生成する特定の出力(パッケージ化されていないAARや事前に定義されたリモートの依存関係など)を保存します。ビルドシステムは、キャッシュされたファイルを再作成する代わりに、後続のビルド中に単純に再利用できるため、キャッシュを使用している間はクリーンビルドがはるかに高速になります。Androidプラグイン2.3.0以降を使用するプロジェクトは、デフォルトでビルドキャッシュを使用します。詳細については、ビルドキャッシュによるビルド速度の向上をご覧ください。

注:ビルドキャッシュを無効にすると、cleanBuildCacheタスクは使用できません。

使用法:

ウィンドウズ

gradlew cleanBuildCache

Linux / Mac

gradle cleanBuildCache

Android Studio / IntelliJ

gradle tab (default on right) select and run the task or add it via the configuration window 

** gradle / gradlewはスクリプトを含むシステム固有のファイルです-スクリプトの実行方法はシステム情報を参照してください

  1. linux- https://www.cyberciti.biz/faq/howto-run-a-script-in-linux/
  2. Windows- https://technet.microsoft.com/en-us/library/bb613481(v = vs.85).aspx
  3. mac https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/index.html

43

Gradleデーモンに注意してください。Gradleをクリアして再実行する前にそれを停止する必要があります。

最初のデーモンを停止します。

./gradlew --stop

次を使用してキャッシュを消去:

rm -rf ~/.gradle/caches/

コンパイルをもう一度実行します


理由を説明したり、これに関するいくつかのドキュメントにリンクしたりできますか?
tir38

1
Gradleデーモンが実行されている場合、Gradleキャッシュが使用されます。その結果、お使いのOSが削除を妨げる可能性があります。
0x539

6

gradleデーモンは、すべてのビルドログの多数の大きなテキストファイルも作成します。それらはここに保存されます:

~/.gradle/daemon/X.X/daemon-XXXX.out.log

「XX」は「4.4」などの使用中のGradleバージョンであり、「XXXX」は「1234」などの単なる乱数です。

合計サイズは、ほんの数か月で数百MBまで増加する可能性があります。ログを無効にする方法はなく、ファイルは自動的に削除されないため、実際に保持する必要はありません。

ただし、小さなgradleタスクを作成してそれらを自動的に削除し、多くのディスク領域を解放することができます。

これをあなたに追加してくださいapp/build.gradle

android {

    buildTypes {
        ...
    }

    // Delete large build log files from ~/.gradle/daemon/X.X/daemon-XXX.out.log
    // Source: https://discuss.gradle.org/t/gradle-daemon-produces-a-lot-of-logs/9905
    def gradle = project.getGradle()
    new File("${gradle.getGradleUserHomeDir().getAbsolutePath()}/daemon/${gradle.getGradleVersion()}").listFiles().each {
        if (it.getName().endsWith('.out.log')) {
            // println("Deleting gradle log file: $it") // Optional debug output
            it.delete()
        }
    }
}

削除されているファイルを確認するには、Android Studio->表示->ツールウィンドウ->ビルドでデバッグ出力を表示します。次に、そのウィンドウの[ビューの切り替え]ボタンを押して、テキスト出力を表示します。

Gradle Syncまたは任意のGradle Buildがファイルの削除をトリガーすることに注意してください。

より良い方法は、ファイルをゴミ箱/ごみ箱に自動的に移動するか、少なくとも最初にゴミ箱フォルダにコピーすることです。しかし、私はそれを行う方法がわかりません。


ファインダー/ゴミ箱にOSXのアイテムを送る代わりに、直接削除するには、この記事では多くの良いアイデアを持っているようだapple.stackexchange.com/questions/50844/...
AnneTheAgile

4

ここに間違った情報が投稿されているようです。一部の人々は(タスクでcleanBuildCache)Androidビルダーのキャッシュをクリアする方法について報告しますが、そのキャッシュがGradleのビルドキャッシュであるAFAIKから独立していることを理解していないようです。

私の理解では、AndroidのキャッシュはGradleのキャッシュよりも古い(そして刺激を受けた)ものですが、私は間違っている可能性があります。AndroidビルダーがGradleのキャッシュを使用して自身のキャッシュを使用するように更新されるかどうかはわかりません。

編集: Androidビルダーのキャッシュは廃止され、削除されました。Android Gradleプラグインは、代わりにGradleのビルドキャッシュを使用するようになりました。このキャッシュを制御するには、Gradleの汎用キャッシュインフラストラクチャを操作する必要があります。

ヒント:キーワード「android」に言及せずにGradleのキャッシュヘルプをオンラインで検索すると、現在関連するキャッシュのヘルプが表示されます。

編集2:以下のコメントでのtir38の質問のため、Android Gradleプラグインv3.4.2プロジェクトを使用してテストしています。Gradleキャッシュはorg.gradle.caching=truein によって有効になりgradle.propertiesます。数clean build回実行すると、ほとんどのタスクが2回目にFROM-CACHEステータスとして表示され、キャッシュが機能していることが示されます。

驚いたことに、私はcleanBuildCachegradleタスクと<user-home>/.android/build-cache/3.4.2/ディレクトリを持っていますが、どちらもAndroidビルダーのキャッシュの存在を示唆しています。

私は実行cleanBuildCacheし、3.4.2/ディレクトリはなくなっています。次に私は別のことをしclean buildます:

  • 何も変更されていません。ほとんどのタスクはFROM-CACHE、ステータスと、キャッシュが有効な速度で完了したビルドとして表示されます。
  • 3.4.2/ディレクトリが再作成されます。
  • 3.4.2/ディレクトリが空である(2のために、長さゼロのマーカーファイルを隠さ保存)。

結論:

  1. すべての通常のAndroidビルダータスクのキャッシュは、Gradleによって処理されます。
  2. 実行cleanBuildCacheしても、ビルドキャッシュはクリアされず、影響もありません。
  3. まだAndroidビルダーのキャッシュがあります。これは、Androidビルドチームが削除するのを忘れた痕跡のコードである可能性があります。あるいは、何らかの理由でGradleキャッシュを使用して移植できない、または移植できない奇妙なものを実際にキャッシュする可能性があります。(「できない」オプションは非常に改善可能です、私見。)

次に、org.gradle.caching=trueから削除してGradleキャッシュを無効にしgradle.properties、いくつか試してみclean buildます。

  • ビルドが遅い。
  • すべてのタスクのステータスは実行中であり、キャッシュまたは最新ではありません。
  • 3.4.2/ディレクトリは空であり続けています。

その他の結論:

  1. Gradleキャッシュがヒットしない場合のAndroidビルダーキャッシュフォールバックはありません。
  2. Androidビルダーのキャッシュは、少なくとも一般的なタスクでは、確かに以前に述べたように削除されています。
  3. 関連するAndroidドキュメントに古い情報が含まれています。特に、キャッシュはデフォルトで有効になっておらず、Gradleキャッシュは手動で有効にする必要があります。

編集3:ユーザーtir38は、Androidビルダーのキャッシュが廃止され、この検索で削除されたことを確認しました。tir38もこの問題を作成しました。ありがとう!


Androidビルダーのキャッシュが廃止され、代わりにGradleのビルドキャッシュが使用されるようになったことを、どこにリンクしているか教えてください。
tir38

@ tir38、いや。しかし、私は自分のテストで上記の私の答えを更新しました。ありがとう。
ランチョン

あなたの勤勉な研究をたくさんありがとう。私がテストで見たもののほとんども確認します。1.空の3.4.2/ディレクトリ。2. cleanBuildCacheタスクの存在3. Gradleビルドキャッシュを無効にして再ビルドしても、Androidタスクがキャッシュにヒットした形跡はありませんでした。
tir38

2
もう少し突っ込んで、AndroidのビルドキャッシュがGradleissuetracker.google.com/issues/37324009#comment3にロールバックされていることを実際に確認しました。そのドキュメントページを削除するためのドキュメントリクエストを開きました:issuetracker.google.com/issues/148169019
tir38

2

コマンド: rm -rf ~/.gradle/caches/


1
@JonAdamsご容赦願いますが、質問には「Gradleキャッシュをクリアする方法を教えてください」と明記されています。
Serj Ardovic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.