質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

  • Android

    6744questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Visual Studio

    2007questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • Xamarin

    534questions

    Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

  • Azure

    230questions

    Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Azure VM 上のVisualStudio2017でAndroidのEmulatorが上手く動作しない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 574

naritamago

score 8

 前提・実現したいこと

こんにちは。

Azure の仮想マシン上(Windows10 バージョン1803)にVisual Studio2017 を入れてXamarinを試してみようとしています。

Xamarinの空のプロジェクトを作成し、サンプルプログラムをデバッグ実行しようとしています。

 発生している問題・エラーメッセージ

Android Emulatorは起動するものの、アプリが起動できず、タイムアウトしてしまいます。

VMの構成はGPUを積んだりはしておらずそれほどリッチな構成ではないですし、動作がもたつくのは正直仕方ないと思っているのですが、アプリが起動できないのでは何も出来ず、困っております。

GPUを積んだ構成にして起動したところ、立ち上がりは非常に早くなりましたが、数回VMを再起動するとエミュレータが立ち上がらなくなります。
エラー内容としては、
「仮想マシン上で起動しているとHAXMは利用できません。現在のエミュレータで起動しようとすると動作が非常に遅くなります。」
というメッセージが表示されます。
更に、「エミュレータエンジンプログラム”x86”CPUが見つからない」とPANIC表示がコンソール上に表示され、起草しません。

仮想環境上でも利用できるAndroidエミュレータって何かあるんでしょうか?

 試したこと

エミュレータの起動時に「高速化されていません」といった趣旨のポップアップが出て来るので、Microsoft公式ドキュメントや以下の記事を参考にエミュレータ高速化(Hiper-V、HAXM)を試してみましたが、どちらも仮想環境では対応していないようで、高速化できませんでした。
参考記事⇒ https://qiita.com/towtow/items/cf08b7f15c6048b4d981

 補足情報(FW/ツールのバージョンなど)

仮想マシンの構成
・Windows 10 バージョン 1803
・Visual Studio 2017 Community Edition

Visual Studioの構成
・Emulator:Android_Accelerated_x86_Oreo(Android 8.1 - API27)
・Xamarinプロジェクトのコード共有の方法はShared Project
・UWPはなし

現状、仮想マシンはNugetや外部からダウンロードする都合上、インターネットとは接続可能な状態になっています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

Azureに詳しくないためはっきりした状況がわからないので、情報提供のみですが。「無いよりまし」程度で参照していただければ。

Visual Studio InstallerでインストールできるAndroidエミュレーターは2種類あります。一方は、Googleによって提供されているAndroid SDKに付属しているもので、標準ではこちらがインストールされます。この質問で動かそうとしているのもこちらでしょう。

もう一方は、Microsoftによって提供されているVisual Studio Emulator for Androidと称されるものです。これはHyper-Vによる仮想マシン上で動作するもので、参考にされたQiitaの資料はこちらについて記しているものと思われます。こちらは個別コンポーネント選択でチェックしなければインストールされないので、多分こちらではないのでしょう。

Googleによるエミュレーターは、HAXM(別の方法もありますがここでは省きます)がインストールされていなければ起動することすらできません。「Emulatorは起動するがタイムアウトする」のと「高速化されていないというポップアップが出る」のが両立する状況がよくわからないのですが、タイムアウトするにせよAndroid端末の形をしたウィンドウが出てくるのであれば、HAXM自体は検出しているのではないかと思うのですが。

なお、HAXMとHyper-Vは競合するので、Hyper-Vが有効になったままでも起動できません。両方試したとのことですが、最終的にはHyper-Vを無効化した状態になっているでしょうか?

また、通常はエミュレーター上での描画をホストGPUがサポートできるようになっているのですが、これが利用できない環境だとソフトウェア描画になってしまうため、動作が著しく遅くなります。「GPUを積んだ環境ではない」というのがひっかかっているのかもしれません。

この辺りを元に状況を整理してみてはどうかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/01 15:28

    keicha_hrsさん、回答ありがとうございます。情報参考になります。
    HAXMについてですが、たぶんインストールされていません。intelhaxm.exeを実行しましたが、「VT not supported エラー」が出てしまい、HAXMは(Hardware Acceleratedの名が示すとおり)仮想環境では使えないと推測しています。HAXMが無ければ起動すらできないとのことですが、VMを再起動してエミュレータを再起動したらAndroidのウィンドウすら立ち上がらなくなってしまいました。そうなると最初に起動できたのが謎ですが・・・

    Hyper-Vについては、途中で挫折したのでした。というのも[Windows機能のオンオフ]ウィンドウで、[Hyper-V]>[Hyer-V Platform]が非アクティブ状態なので、こちらも仮想環境上では有効化できないと推測しています。
    なので、最終的にはHyper-Vは無効化しています。

    また、VMをGPUを積んだ構成にしてみたら立ち上がりは劇的に改善されましたが、動作はかなりモタつき、使用に耐えるものではありませんでした。(これもHAXMが無いのにウィンドウが立ち上がっているのが謎なんですが・・・)

    キャンセル

  • 2018/08/02 15:09 編集

    Visual StudioのメニューからAndroidデバイスマネージャーを開いたときに、作成済みのAVDのProcessorがx86_64またはx86になっているでしょうか(自分で設定を変更していなければなっているはずですが)。HAXMなどのサポートが効くのはx86_64またはx86のみです。

    AndroidエミュレーターではARMなど他のCPUエミュレーションも対応していますが、それらにはHAXMの効果はありません。他のCPUエミュレーションならば仮想環境でも起動すると思うのですが、遅くて実用には耐えないでしょう。

    それから、エミュレーターをコマンドプロンプトから実行したときのメッセージを確認してみてください。エミュレーターのコマンドは、<SDKのインストールフォルダー>\emulator\emulator.exeです。コマンドプロンプトでemulatorフォルダーに移動して、

    emulator -avd <AVD名>

    と入力すると起動することができます。<AVD名>は作成済みのAVDの名前ですが、

    emulator -list-avds

    と入力すると一覧が出るので、それを参照して入力してください。コマンドで起動しようとしたときに、HAXMなどのサポートがないと

    emulator: ERROR: x86_64 emulation currently requires hardware acceleration!

    というメッセージが表示されて起動すらしないはずです。HAXMを検出していると、

    HAX is working and emulator runs in fast virt mode.

    というメッセージが表示されます。HAXMがシステム上どうなっているのかということは、これで確認できると思います。

    それでHAXMが使えないと区切りがついたとして、もう一つ試せることはWindowsハイパーバイザープラットフォーム(WHPX)を有効にしてみることでしょうか。Androidエミュレーターは、最近になってHAこれによる高速化もサポートするようになりました。「Windowsの機能の有効化と無効化」の中に、「Windowsハイパーバイザープラットフォーム」という項目があるので、これにチェックを入れて再起動するという手順になります。これを有効にして先のようにコマンドプロンプトで実行したときに、エミュレーターがWHPXを検出していれば、

    Windows Hypervisor Platform accelerator in operational

    というメッセージが表示されます。これもHyper-Vがサポートされていない環境では使えないと思うので、期待薄かもしれないのですが。

    ただ、調べてみるとAzureでNested Hyper-Vが使えるといった情報は見当たりますね。
    https://azure.microsoft.com/en-us/blog/nested-virtualization-in-azure/

    これによるものだと思いますが、最初に記したHyper-Vが必要なMicrosoft EmulatorをAzure仮想マシン上で動かしたという記事も見当たります。
    https://anthonychu.ca/post/azure-v3-vm-nested-hyperv-virtualization/

    Hyper-Vが使える環境なら、WHPXを有効にしてGoogleのエミュレーターを動かすことも可能なのではないかと思うのですが、自分で試せる環境がないので確認まではできません。

    出せる情報としてはここまででしょうか・・・。

    キャンセル

  • 2018/08/03 18:10

    keicha_hrsさん、情報ありがとうございます。
    早速コマンドプロンプトからの起動を試してみました。
    ・x86_64:コメントの通りHAXMが検出されず、起動できませんでした。
    ・WHPX有効化後:以下のメッセージが表示され起動できず。
    CPU acceleration status: Android Emulator does not suport nested virtualization. Your VM host:'Microsoft Hv(Hyper-V)'

    x86エミュレータの高速化は諦めて、ARMアーキテクチャに変えたらとりあえず動かすことはできたので、勉強の間はこれで行こうかと思います。。。(そこまで早さが要求される処理をするつもりはない)

    色々調べていただき、心から感謝いたします。ありがとうございました。

    キャンセル

check解決した方法

0

仮想マシンをGPUを積んだ構成にし、エミュレータのCPUをx86アーキテクチャからARMアーキテクチャにしたら無事動かすことができました。
ARMアーキテクチャでは高速化できない?ので動作はもたつきますが、全く使用に耐えないというほどではないです。
・・・GPUによる恩恵がどれほどかは検証できてないのでその内やりたいと思いますが、この質問自体はこの辺りで閉じようと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Android

    6744questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Visual Studio

    2007questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • Xamarin

    534questions

    Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

  • Azure

    230questions

    Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。