Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

Hyper-Vでのandroid-x86運用ーandroid-x86のISOブートによる検証

f:id:espio999:20190816002255p:plain
PC上で動作するandroidと言えば、いわゆるエミュレータだ。開発環境に含まれるものもあれば、単体で配布されているものもある。基本的には開発用、特にデバッグに用いられる前提の環境であり、実用においては現実的ではない。起動から動作まで、とにかくパフォーマンスが悪く、日々の更新を保ったまま継続的に運用できる環境でもない。

Android-x86の存在を知った。いわゆるIA (Intel Architecture)マシンにインストールできるandroidだ。この投稿時点でのバージョンはAndroid Oreo相当であり、Pie相当の開発も進められている。
www.android-x86.org

PCにインストールして利用するものだが、ISOイメージやUSBメモリからブートして起動することもできる。PCにインストールできるということは、仮想環境にもインストールできるということだ。早速、Hyper-V仮想マシンをISOブートで動作させてみることにした。機敏な動作ではないものの、エミュレータに比べれば十分実用になる印象だ。

以前紹介したLineage OSよりも導入は簡単だ。Google Playなどは最初から導入済みでインストールされ、インストール後はGoogleアカウントの設定から始まるので、購入したばかりのandroid端末に触れるのと同じ感覚で使い始めることができる。

この投稿ではHyper-Vの環境設定から仮想マシンの作成、android-x86のCDブートまでの手順を紹介する。
なおHyper-VWindows 10 Homeには含まれていない。Homeを利用している場合はProへアップグレードするか、Hyper-V以外の仮想環境を用いる必要がある。例えばVMware Workstation PlayerやOracle VirtualBoxだ。この投稿では、これらに関する話題は取り上げない。投稿末尾にハイパーリンクを掲載しているので、必要なユーザーは各自で対応してほしい。

用語の確認

仮想環境を実環境を明確に区別するため、この投稿では次の用語を適用する。

ホスト Hyper-Vが稼働するPC
ゲスト Hyper-V仮想マシン

Hyper-Vの有効化、ネットワーク設定

Hyper-Vがインストールされていないのであれば、まずHyper-Vを有効化するためコントロール パネルを参照する。「プログラムと機能」から「Windowsの機能の有効化または無効化」を参照し、「Hyper-V」のチェックを確認する。OKボタン押下でインストールが始まる。
f:id:espio999:20190814012600p:plain
Hyper-Vをインストールしたなら、スタート メニューの「Windows管理ツール」に「Hyper-V管理マネージャー」がインストールされている。これを起動する。起動したら右ペインから「仮想スイッチ マネージャー」を起動する。
「既定のネットワーク」となる仮想スイッチが作成されているか確認する。作成されていなければ、「新しい仮想ネットワーク スイッチ」を選択し、新規作成する。このとき、仮想スイッチの種類は「内部」を選択し、「仮想スイッチの作成」ボタンを押下する。作成したスイッチには名前を付けておくこと。この投稿では、「Default Switch」とした。
f:id:espio999:20190814012648p:plain

念のためホストのNIC設定を確認しておく。コントロール パネルの「ネットワークと共有センター」から、「アダプターの設定の変更」を参照する。ホスト側インタフェイスのプロパティから「共有」タブを参照し、次の2つのチェックボックスがonになっていることを確認する。
f:id:espio999:20190814012722p:plain
仮想スイッチの提供するネットワークに、ゲストは配置される。ゲストがインターネット接続するならば、仮想スイッチを経て、ホストNICから通信することになる。この通信経路を確保するために、ホストNICの共有設定を有効にしておく必要があるのだ。

ゲストの作成

Hyper-V管理マネージャーにて、仮想マシンを作成する。右ペインの「新規」から仮想マシンを作成する。
f:id:espio999:20190814012753p:plain
各ステップにおいて、特に作業の必要なステップについてだけ解説しておく。

名前と場所の指定 名前には、仮想マシンの名前を指定する。ここでは「android」とする。
仮想マシンの実態は複数のフォルダ、ファイルで構成されるデータ群であり、この名前のフォルダ配下に格納される。
仮想マシンを別の場所に格納する」で指定したフォルダに、仮想マシン・フォルダが生成される。
世代の指定 「第2世代」を指定する。
メモリの割り当て 起動メモリとは、仮想マシンが搭載するRAM容量を指す。1024MBの倍数で指定する。例えば4GB搭載するならば、4×1024=4096だ。ここでは4096と入力する。
「この仮想マシンに動的メモリを使用します。」のチェックをonにする。
ネットワークの構成 「Default Switch」を選択する。
仮想ハードディスクを作成する 仮想マシンがマウントするハードディスクの実体はファイルだ。「名前」にそのファイル名を指定すると、「場所」に指定したフォルダへ、仮想ディスク・ファイルが作成される。
「サイズ」には容量を指定する。よくあるスマートフォン同様、ここでは64GBとした。
CDブートで検証する限りにおいては、この要領は適当で構わない。厳密な容量は、インストールの際に検討すればよい。
インストール オプション 「後でオペレーティング システムをインストールする」をチェックする。
ここではCDブートでAndroid-x86を検証するためだ。

ゲストの設定

作業を始める前に、Android-x86のISOイメージをダウンロードしておくこと。この投稿では、「android-x86_64-8.1-r2.iso」を用いている。
www.android-x86.org
Hyper-V管理マネージャーにて、仮想マシンを設定する。ここでの設定は、Android-x86をCDブートで検証するための設定だ。ISOイメージをマウントするためには仮想DVDドライブが必要だし、ブート順序を変更する必要がある。また、起動するためにはセキュアブートを解除しなければならない。
右ペインの「設定」を選択する。次の項目を順番に設定していく。

SCSI コントローラー 「DVD ドライブ」を追加する。
SCSI コントローラー
DVDドライブ
「イメージ ファイル」にAndroid-x86のISOイメージを指定する。
ファームウェア 「ブート順」でDVDドライブを先頭にする。
セキュリティ 「セキュアブートを有効にする」のチェックをoffにする。

ゲストの起動、android設定

Hyper-V管理マネージャーから、仮想マシンを起動する。右ペインの「接続」を選択する。この状態は、言うなれば電源投入前のPCやサーバーの状態だ。この状態から起動すると、ブート画面が表示される。今回はCDブートで検証する前提なので、「Android-x86 8.1-r2 Live」を選択する。
f:id:espio999:20190814012945p:plain
androidが起動すると、スマートフォンタブレットの初回起動時と同様の作業フローが始まる。具体的にはロケール設定、ネットワーク設定、Googleアカウントの設定などだ。ロケール設定では「日本語」を選択することができる。
ネットワーク設定について一つ注意がある。androidWiFiを前提としているが、ゲストにはWiFiは搭載されていない。まず、落ち着いて無線LANのサーチが終了するのを待つと、「See all Wi-Fi networks」が表示される。これを選択すると「VirtWifi」が現れるので選択する。IPアドレスが取得され、自動的にフローが進捗する。
f:id:espio999:20190814013025p:plain
ここから先は、通常のandroid端末の導入手順と同様だ。ユーザーのお好みでフローを進めると良い。Googleアカウントを設定する際、あらかじめ2段階認証が設定されていれば、手持ちの端末にログイン許可の通知が届く。
一通りの設定が完了すると、ホーム・アプリの設定を促される。ここでは「Taskbar」を選択することをお勧めする。ホーム画面にWindowsのスタート・メニューのような機能が実装される。
f:id:espio999:20190814013129p:plain
通常のandroid端末とは異なり、仮想マシン上ではマウスやパッド、トラックボールで操作することになると思う。Launcher3はタッチパネルでの操作を前提としているのに際し、TaskbarはPCの操作デバイスに対して、いくらかフレンドリーだ。
この投稿トップの画像は、私のホーム画面だ。CDブートでの検証後、仮想ディスクへインストールし、壁紙を設定した。必要なアプリケーションもインストールしている。アプリ―ケーションはWindow表示することもできるし、スマートフォンのように全画面で開くこともできる。
f:id:espio999:20190816001947p:plain

一連の設定を完了しても、最終的な設定を完了させるためにPixel setupを求められるので、必要に応じて対応する。
しばらく放っておくと勝手にGoogle Playがアプリの更新を始める。もちろんGoogle Playからアプリをインストールすることも可能なのだが、ここではCDブートで検証してるだけなので、インストールに十分な容量が確保されていない。
f:id:espio999:20190814012344p:plain
f:id:espio999:20190814013419p:plain
まず挙動やカスタマイズ、ChromeGMailなど、普段利用しているアプリの具合を検証し、気に入ったのであればandroid-x86をインストールして運用すればよい。Google Playから本格的にアプリをインストールするのは、それからでよいだろう。

検証中に確認しておくと良いこと

  • 目的のアプリケーションがインストール可能か

アプリケーションによってはインストール不可、あるいはインストール可能ではあるものの最適化されていないと警告されるものがある。

  • ゲストへのリソース割り当て最適化

もしパフォーマンスに不足を感じる場合、一度ゲストを終了し、メモリと仮想プロセッサの割当量を増やしてから、再度起動してみると良い。

インストール後のアップデート

気に入ったならば、あるいは、更なる検証を続けるならば仮想ディスクにインストールして運用する。運用中、新しいバージョンがリリースされる。新しいバージョンへのアップデート方法は2通りある。

  1. 新規導入
  2. 現在の環境をアップデートする。

前者の場合には新たな仮想マシンを、後者の場合は運用中の仮想マシンを、新バージョンのISOイメージで起動する。新規導入の場合、手順はこれまでと変わりがない。アップデートの場合は"Advanced options"を選択する。"Auto Update"を選択すると、現在の仮想マシン上で更新作業が始まる。
f:id:espio999:20200123101355p:plain
f:id:espio999:20200123101529p:plain

参照

仮想マシンへのインストール手順は、投稿末尾に掲載のリンク先を参照してほしい。またVMware Workstation Playerでの仮想マシン設定についても、若干触れられている。
記事では起動ディスクとしてUSBメモリを作成しているが、仮想マシンへのインストールであればISOイメージからインストールできる。USBメモリは不要だ。
起動用USBメモリの作成に際し、Rufusが用いられている。Android-x86サイトでは、その他のツールが紹介されている。
www.vmware.com
www.virtualbox.org
www.atmarkit.co.jp
www.android-x86.org