AndroidStudioがおかしいとき、ビルドができないときに試す手順　2019年完全版

## はじめに

この記事はAndroid 初心者向け Advent Calendar 2019の19日目の記事です。
https://qiita.com/advent-calendar/2019/android_beginners

こんばんは。
みなさんはAndroidStudioで開発しているときに、文法エラーを起こしているつもりがないけれど、
エラーが出てビルドできない状態になったことはありませんか？私はあります。
そのときに試してきたことをこの記事ではまとめてみたいと思います。

なお、記事中のAndroidStudioのバージョンは3.5.2(執筆時の安定最新版)とします。

## Rebuild Project
基本中の基本。
<img width="319" alt="Screen Shot 2019-11-25 at 20.03.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26257/bfa0f9ce-44fd-6403-593d-c5dba1309119.png">


## Clean Project
中間ビルドやキャッシュ ビルドファイルを消すのみ。
ただ、これだけだとデータバインディング等で作成されるファイルも消えたままなのでRebuild ProjectやMake Moduleの実行を行うこと。

<img width="304" alt="Screen Shot 2019-11-25 at 20.09.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26257/ee94d59f-f136-8302-9dd2-85a28187c586.png">


### Rebuild Project と Clean Projectの違い
公式リファレンスによると、
Clean Projectはすべての中間物を消す、Rebuild Projectは対象のビルド バリアントに対してClean Projectしたあと、APKを作成するらしい。

公式リファレンス
https://developer.android.com/studio/run/index.html?hl=ja#reference
データバインディングやアノテーションプロフェッサーでのクラス自動生成のみを行い、
apkまでは不要という場合、Make Moduleで十分。

BuildConfig等、一部のクラスはClean Projectでも消えないので
そういうのまで消したいときは gradleのcleanを使用する。
AndroidStudioの右端のGradleからcleanをダブルクリック
<img width="485" alt="Screen Shot 2019-11-25 at 20.14.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26257/2ec31c7e-e9b8-23ef-dcc7-6e602a7f4541.png">

## Android Gradle Pluginのビルドキャッシュ
AndroidのGradle Pluginもキャッシュを使うようです。
自分はなったことありませんが、Gradle Pluginのバージョンアップを行うと
エラーになったという場合は有効なんじゃないでしょうか。
AndroidStudioの右端のGradleからcleanBuildCacheをダブルクリック
<img width="412" alt="Screen Shot 2019-11-30 at 17.14.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26257/129afddb-4ef6-c26f-63cf-4a555aa00121.png">

参考
ビルド キャッシュによるクリーンビルドの高速化
https://developer.android.com/studio/build/build-cache?hl=ja


## AnddroidStudioのキャッシュ
Invalidate Cashes / Restart
<img width="300" alt="Screen Shot 2019-11-25 at 20.15.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26257/847b3a25-9a24-6bda-5a86-0ae787616706.png">
FileからInvalidate Cashes / Restartを選択後、

<img width="664" alt="Screen Shot 2019-11-25 at 20.17.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26257/47c9c253-4549-4c48-d2ea-eb90f9c8762f.png">
Invalidate And Restart
AndroidStudio自体がなんかおかしいときにも有効です。


## 以下、AndroidStudioを一旦終了すること。※以下操作注意
（AndroidStudioがキャッシュをつかんだままだと削除できない、または削除されない恐れがあるため）
また、以下から手動でファイルを消すことになるので操作には要注意。

## Gradleのキャッシュ

```bash
rm -rf ~/.gradle
```
.gradleの中にキャッシュ用のディレクトリがあったりするんだけど、再ダウンロードされるのでまるごと削除でもOK

なお、プロジェクト直下にもあるのでここでも削除

```bash
(PROJECT_DIRに移動したあと)
rm -rf .gradle/
```
再作成されるのでまるごと削除でもOK。

## IDEのキャッシュ
AndroidStudioのベースとなったIDEが
PROJECT_DIR/.idea
にキャッシュを使っているので、そこでも削除。
※ workspace.xml、usage.statistics.xml、tasks.xmlは必要なのでそれらのファイルは消さないこと。
※ プロジェクトによってはあえて共有しているものもあります。注意

コマンド一発で消すなら以下

```bash
(PROJECT_DIRに移動したあと)
find .idea -type f | grep -v "(workspace|usage.statistics|tasks).xml" | xargs rm
```

## プロジェクト全体の設定ファイル
*.iml
samuraism様のサポート情報によるとGradleプロジェクトなら不要とのこと

https://support.samuraism.com/hc/ja/articles/360017715953-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E4%BD%9C%E3%82%89%E3%82%8C%E3%82%8B-idea%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AF%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%81%97%E3%81%A6%E5%85%B1%E6%9C%89%E3%81%97%E3%81%A6%E8%89%AF%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B-

```bash
(PROJECT_DIRに移動したあと)
find . -type f | grep iml$ | xargs rm
```

## 参考
https://qiita.com/takahirom/items/af6b83edd0dc3294046f
https://qiita.com/kirimin/items/706523d637fd09152122