AMD CPU で Hyper-V を使って Android AVD を高速化する

約 10 年振りにノートパソコンを買い替えました。
その際 VisualStudio2017 + Xamarin.Android の開発環境に手間取ったので、開発環境構築メモ。


# 今回やりたいこと

AMD CPU で Android AVD の高速化を目指します。
AMD って Hyper-V が利用できないと思っていたのですが、ここ最近でできるようになっていたんですね。

>「Android Emulator」がAMD製CPUをサポート、「Hyper-V」での利用も可能に
>https://forest.watch.impress.co.jp/docs/news/1132197.html


# まとめ

思ったより手順が多かったのですが、かなり高速化されました。
スペックや設定にもよると思いますが、私の環境ですとエミュレータの起動だけなら 10 秒かからない感じです。


# 環境

PC スペックは以下の通りです。ThinkPad E585 の SSD 最小構成にメモリ増設してる感じです。

| 対象 | 仕様 |
|:-:|:-:|
| CPU | AMD Ryzen 2500U 2GHz|
| Memory| 16GB (8GB+8GB) |
| OS | Windows10 Home |

ひと昔くらい前の個人サイトって自己紹介欄によく PC スペック書いてましたよね。
どうでもよい話ですが。

環境は以下の通りです。

* Visual Studio Community 2017 v15.9.4
* .NET Framework 4.7.03056
* Xamarin 4.12.3.77
* Android Emulator x86 API24


# 手順

以下の順で仮想環境を有効化していき Hyper-V を実現していきます。
色んな記事を参考にしたので余分な手順があったらすみません。

1. BIOS で有効化
2. Windows で有効化
3. Vistual Studio で有効化
4. HAXM で有効化


## 1.BIOS で有効化

タスクマネージャで <b>CPU の仮想化が有効の方はこの手順不要</b>です。
私は最初無効でしたので実施。

![TaskManager_CPU_Virtual_Off.png](https://qiita-image-store.s3.amazonaws.com/0/233922/63edbe7b-71e2-a9cf-ef7f-2b150448fa7e.png)

実は初 SSD ユーザなのですが、OS の起動ってめちゃ早いじゃないですか。
ですので SSD だと BIOS への入りが間に合わない場合があるようです。そのような場合はコントロールパネルから再起動時に BIOS に入ることができます。

Windows10 のコントロールパネルは [スタートメニュー] -> [Windows システムツール] -> [コントロールパネル] で起動します。

コントロールパネルの画面から [更新とセキュリティ] -> [回復] -> [再起動] を選択し、[詳細オプション] から UEFI を設定で続行。

再起動すると BIOS （UEFI） 画面に入ります。[Security] -> [Virtualization] -> [AMD V] を有効にして保存。再起動後、仮想化が有効になっていることが確認できます。

![TaskManager_CPU_Virtual_On.png](https://qiita-image-store.s3.amazonaws.com/0/233922/57a76bc2-62ac-d246-7045-cfae28f48be8.png)


## 2.Windows 機能で有効化

今度は Windows Hypervisor Platform を有効にする必要があるようです。

コントロールパネルから [プログラムと機能] -> [Windows の機能の有効化または無効化] から該当する項目にチェックを入れて OK。もう一度再起動を要求されますので実行。

![window_function_hyper-v_on.png](https://qiita-image-store.s3.amazonaws.com/0/233922/82d53119-c4ff-e637-8fdf-393c91713fbe.png)


## 3.Visual Studio アップデート

Visual Studio のプロジェクトを立ち上げると、「Andorid SDK を更新すると Windows ハイパーバイザープラットフォームを使用した～」というメッセージが出てきます。

![visual_studio_hyper-v_info.png](https://qiita-image-store.s3.amazonaws.com/0/233922/8056b321-7ee8-5e8e-4368-f9309fd58aad.png)

ちなみに私は本手順の前に Andorid 環境を入れてプロジェクトも作ってました。

更新するため [ツール] -> [Android] -> [Android SDK Manager] で Tool タブから以下を更新＋インストール。

* Android SDK Platform-Tools (27.0.1 以降)
* Android Emulator (27.3.8 以降)
* Intel x86 Emulator Accelerator (HAXML installer)


## HAMX で有効化

いざ実行し見ると、なんかまだ遅いような気がする…と思って調べていると、上記のままだと HAXM をダウンロードした状態で止まっているかもとの記事が。

>エミュレータ android AMDプロセッサでAVDを起動する際のエラー
>https://code.i-harness.com/ja/q/19227bd

ですので、先ほど Android SDK ツールから落としてきた HAXM を実行します。
コマンドプロンプトを起動して、以下に移動します。

> {SDK_FOLDER} \ extras \ intel \ Hardware_Accelerated_Execution_Manager

<b>{SDK_FOLDER}</b> は環境によって異なると思いますが、私はデフォルトで以下になっています。

>C:\Program Files (x86)\Android\android-sdk

以下を実行。

```
>cd C:\Program Files(x86)\Android\android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager
>silent_install.bat -v
```


# 実行結果

ようやく仮想環境が有効になったようです。

再度 Vistual Studio を起動し、[ツール] -> [Android] -> [Android デバイスマネージャ] から Android x86 環境のエミュレータを作成し実行すると高速化されました。

デバイス作成時のパラメータの細かい設定は他のサイトさんを参照して下さい。
適当な設定がいまだに私もよくわかっていません。。。

今回はデフォルト設定から以下を弄ってます。メモリを積んでるとこういうとき良いですね。

| 項目 | 設定値 |
|:-:|:-:|
| 基本デバイス | Pixel |
| プロセッサ | x86 |
| OS | Nougat 7.0 API 24 |
| hw.ramSize | 2048 |
| vm.heapSize | 512 |

![android_avd_start.gif](https://qiita-image-store.s3.amazonaws.com/0/233922/1ecebdf7-4e28-105f-5e15-c83c042c5ce3.gif)

2 回目以降の起動はクイックブートが実現できるようになります。
エミュレータの起動だけですと 10 秒かからないのはありがたいです。