Unity2019.4 + Android11でビルドエラーになったときの対策

## 経緯/現象

**Unity 2019.4 (LTS)** を使用して、とあるサンプルプロジェクトを **Android 11 (Pixel 4a(5G))** 上でBuild and Runしようとしたところ、以下のようなエラーダイアログが表示され、Android実機での実行に失敗した（実行できなかった）。

> Unable to start ADB server. Please make sure the Android SDK is installed and is properly configured in the Editor. See the Console for more details.

使用環境は以下の通り。

* PC
    * Windows 10 20H2
    * Unity 2019.4.30f1
    * Unity HubからUnity 2019.4をインストールする際、**Android Build Support**にチェックを入れてAndroid SDKのモジュールもインストール
* 実機
    * Google Pixel 4a (5G)
    * Android 11
    * PCとUSB接続し、開発者モードを有効化済み

## 原因

### 結論

先に結論から言うと、Unity Hubからインストールした**Android SDKが古い**。
Android 11内にあるADBとバージョンが合っていない模様。

### 原因調査の詳細

UnityのConsoleを見ると、以下のようなエラーメッセージが表示されている。
`Unable to start ADB server.` とあるので、どうもADBコマンドが失敗しているように見える。

> CommandWithNoStdoutInvokationFailure: Unable to start ADB server. Please make sure the Android SDK is installed and is properly configured in the Editor. See the Console for more details.
UnityEditor.Android.Command.RunWithShellExecute (System.String command, System.String args, System.String workingdir, System.String errorMsg) (at <a83396a2554740a886f5ffb57e40eb15>:0)

コマンドプロンプトを使用して、Unity内のADB（Platform Tools）のある場所に `cd` して直接 `adb devices` コマンドを打つと、実際にエラーになるのが確認できる。
※ADBのコマンドは https://developer.android.com/studio/command-line/adb?hl=ja を参照。

```
2019.4.30f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools>adb devices
List of devices attached
adb server version (39) doesn't match this client (40); killing...
could not read ok from ADB Server
* failed to start daemon
error: cannot connect to daemon
```

メッセージではADBのバージョンがマッチしないよと言っているので、 `adb version` コマンドでバージョンを確認してみる。

```
2019.4.30f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools>adb version
Android Debug Bridge version 1.0.40
Version 4986621
Installed as 2019.4.30f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\adb.exe
```

執筆時点でのADB最新バージョンは**31.0.3**なので、めちゃくちゃに古いことが分かる。
https://developer.android.com/studio/releases/platform-tools

## 解決策

Unity HubでインストールしたAndroid SDKを使用するのではなく、手動で最新のAndroid SDKをダウンロード＆インストールして、それをUnity側に設定するようにする[^1]。

[^1]: エラーメッセージを見る限りではADBだけ最新にすることでも解決しそうな気がするものの、Unity側の設定がAndroid SDK単位でしかフォルダ指定できないので、仕方なくAndroid SDKを丸ごと最新にしている。

### 最新のAndroid Studioのインストールと設定

最新のAndroid Studioをダウンロードし、同梱されている**SDK Manager**を使用して設定を行う。

1. [Android Studio](https://developer.android.com/studio)をインストール[^2]
1. Android Studioを起動
1. More Actions → SDK Manager
1. 左メニューのAppearance & Behavior → System Settings → Android SDK
    * Android SDK Locationを好きな場所に設定しておく（ここでは `xxx\Android\SDK` とする）
    * SDK Platformsタブで、Android 10や11にチェック
    * SDK Toolsタブで、Android SDK Platform-Toolsにチェック
    * OKしてインストール（時間がかかる）
1. 左メニューのAppearance & Behavior → System Settings → Updates
    * 右上のCheck Nowボタン
    * これで全部最新になる

[^2]: 執筆時点のAndroid Studioバージョンは2020.3.1 Patch2 for Windows 64-bit

### Unity側の設定

Android Studio側の設定が終わったら、Unity 2019.4側の設定を変更して、落としてきたAndroid SDKを参照するようにする。

1. ツールバーからEdit → Preferences
1. 左メニューのExternal Tools
1. `Android SDK Tools Installed with Unity` の左にあるチェックを**外す**
1. Browseボタンを押して、先ほどのAndroid SDK Locationに指定したフォルダ（`xxx\Android\SDK`）を設定する

### いざ再ビルド

設定を終えたら、サンプルプロジェクトのBuild and Runをする。

無事、Android実機上でサンプルコードが実行できた！