1. ホーム
  2. android

[解決済み] エラーです。タスク ':app:clean' の実行に失敗しました。ファイルを削除できません。

2022-04-21 09:10:37

質問

Android Studio の Gradle プロジェクト(ほとんどが Kotlin のコードを含む)を再構築しようとしているのですが、このプロジェクトで UnableToDeleteFileException クリーニング/リビルドのプロセス中に

Execution failed for task ':app:clean'.
> Unable to delete file: C:\Users\User\KotlinGameEngine\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.0.1\jars\classes.jar

この現象は、プロジェクトのパッケージ構造を変更しようとした後に起こり始めました。残念ながら、Android Studioでリファクタリングするのではなく、ソースフォルダをリネームして移動させるという方法で行ったのですが、これは悪い考えでした。

この問題の解決策を一日中探していたのですが、以下は私が試したものの無駄だったものです。

  • Gradleの同期を行う。
  • Java JREとJava SDKを再インストールする。
  • Android Studioの最新版(1.4)を再インストールする。
  • 以前のASバージョン(1.3)にロールバックする。
  • ASキャッシュを無効にして再起動する。
  • を削除する。 gradle.gradle ディレクトリを作成します。
  • を削除する。 .gradle ディレクトリを作成しました。
  • 実行中 gradlew clean をASターミナルから起動します。
  • 新しいプロジェクトに手動でソースをコピーする(なぜかプロジェクト間で持続するのが不思議...)

試してみたところ、少しは成功しましたが、エラーが再び発生する前に、もう1回だけクリーンアップと再構築を実行することができました。

  • ASを終了し、ビルドファイルを手動で削除し、再度開く。
  • を殺す。 java.exe プロセス (これは技術的には毎回行うことができますが、面倒であり、ビルドプロセスの速度を低下させます。)

ということで、Javaのコンパイル処理が何らかの理由でビルドファイルにロックをかけている可能性があるようですが、Kotlinとの関係もありそうです。私は(より成熟した)JavaのAndroidプロジェクトを持っていますが、それをクリーニングするときにこのエラーを再現することはできませんが。私のKotlinプロジェクトにのみ発生するようです。

更新しました。

Kotlin Androidプラグインが原因であることがわかりました。この問題は apply plugin: 'kotlin-android' を、モジュールの build.gradle ファイルを挿入し直すと戻ってきます。この件に関して、何かご意見がありましたら、お気軽にお寄せください。

更新2:

前回のアップデートが原因ではありません。プロジェクトにKotlinファイルが含まれていると、再構築とクリーニングに失敗することがわかりました。すべての Kotlin ファイルを削除しても、バックグラウンドの Java プロセスが終了するまで、つまりビルド ファイルを何らかの方法でロックするまで、失敗し続けるのです。詳細とバグを再現する手順を記載したバグをここに提出しました。 KT-9440

解決方法は?

Kotlinのバグトラッカーにバグレポートを投稿した後、以下の通知が届きました。 課題61300 をAOSPトラッカーに追加しました。それが原因のようです。今のところ何もできないので、この質問を回答済みとし、バグが修正されたら回答を更新します。

一方、Windowsをお使いの方は、回避策を見つけたと思います。ダウンロードする必要があります。 ロックハンター (もちろん自己責任で)それから、以下をあなたのモジュールの gradle.build ファイル内で lockhunter 変数にLockHunter.exeへのパスを指定してください。

task clean(type: Exec) {
    ext.lockhunter = '\"C:\\LockHunter.exe\"'
    def buildDir = file(new File("build"))
    commandLine 'cmd', "$lockhunter", '/delete', '/silent', buildDir
}

これにより、app:cleanタスクの実行時に、LockHunterが強制的かつ静かにビルドファイルのロックを解除し、削除するようになります。