スポンサーリンク

2014年8月29日金曜日

Androidエミュレータの "failed to sync vcpu reg" 問題

久し振りに Android エミュレータを立ち上げようと思ったら、あれっ?画面が真っ暗で一向に起動しません。何度やっても同じ結果で、よく見るとメッセージウィンドウに
failed to sync vcpu reg
と出ています。 Windows7 64-bit Professional での話です。メッセージの内容からして仮想化機能絡みで問題が起きていることが想像できます。仮想化機能といえば Intel HAXM。試しにこれを無効にしてみると確かに起動します。
Intel HAXM とは、CPU の仮想化機能を利用した Android エミュレータのアクセラレータ機能で、これがサポートされたお陰でエミュレータは格段に早くなり、以前に比べて快適性がグンと増しました。今ではこれ無しではエミュレータを使う気になれません。
それにしてもちょっと前までは何の問題もなく使えていたので、何かの変更が影響していることは間違いありません。
まずは Google 検索です。分ったのはこの "failed to sync vcpu reg" 問題は実に様々なところで発生していて、原因はよく分らないものの、ああやったら直ったとかこうやったら直ったという報告はいろいろあります。しかしどうも自分にあてはまるものは見つかりませんでした。
自分は結構頻繁にシステムの設定を変えたりする方で、何が影響したのか容易に分りませんでした。少なくとも仮想化に関連するようなものは全く変更していない筈です。インストールしたものをアンインストールしてみたり、バックアップイメージをリストアしてみたり、かなり時間をかけて切り分けを行い、ようやく原因、というか影響している大元がみつかりました。想像もしなかったものです。
それはなんと、SKKFEP(SKK日本語入力FEP) という日本語入力アプリでした。MS IME や Google日本語入力に代る日本語入力システムです。仮想化技術と日本語入力アプリ、一見対局にあるようなアプリが影響しているとは。正直びっくりです。最初は信じられなくて何度も確認してみました。SKKFEP が有効になっていると 100% 問題が発生するし、MS IME や Google日本語入力では絶対に発生しません。
ちょっとした酔狂で SKK を使ってみようと思いたち、入れてみたものです。SKK と呼ばれるちょっとキワモノ的な日本語入力方式は、実は Windows 環境での実装はこの SKKFEP に加え、もう一つ選択肢として CorvusSKK というものがあります。面白いことにこの CorvusSKK でもまったく同じ現象が発生します。どちらも個人開発らしいので、ソースコードを共有している訳でもないと思うので、想像するに、Windows の IME 開発のフレームワークに起因しているような気がします。そういえば、Google 検索したときも、どこの国の人か分かりませんが、Google Input Method をアンインストールしたら問題が直ったといった報告がありました。(但し、自分の環境では Google日本語入力では問題は発生していません。)
ここまで分ったらあとはどうするかです。最初はエミュレータを起動するときにいちいちホットキーで IME を切り替えていましたが、だんだん面倒くさくなってきました。アプリに応じて自動的に IME を切り替えてくれる「あいち」というフリー神ソフトを見つけ、現在はこれを使っています。快適です。作者に感謝。







3 件のコメント :

  1. 失礼します。CorvusSKK作者のsasakiと申します。

    AndroidSDKに触る機会があったのでちょっと調べてみました。
    結論から言うとDirect2Dが原因でした。

    CorvusSKKとSKKFEPでは、Windows8.1以降のカラー絵文字を表示したり綺麗にフォントを描画する目的でDirect2DおよびDirectWriteを使用しています。
    試しにCorvusSKKからDirect2Dの機能を取り除いて動かしてみたところ、正常にエミュレーターが起動しました。
    Direct2Dのオブジェクトを作成せずとも、Direct2DのDLL"d2d1.dll"がロードされるだけで駄目なようです。

    CorvusSKKでは設定に関わらずd2d1.dllがロードされてしまうのですが、SKKFEPではカラー絵文字の設定を"なし"にすることでロードされなくなるようなので、おそらく(未確認ですが)この設定変更で動くようになるかもしれません。

    長文、失礼しました。

    返信削除
    返信
    1. sasakiさま、情報ありがとうございます。

      ご指摘の方法でSKKFEPで問題が発生しなくなることを確認しました。
      なるほど、Direct2Dが原因ですか。根本的にはMicrosoftかIntelが修正すべき問題のように思いますね。

      しばらく前からCorvusSKKに乗り換えていて、現在常用させてもらっています。まさか作者の方から連絡いただけるなんて、とても感激です。今後もCorvusSKKでいこうと思います。

      削除
  2. 既にCorvusSKK公式ページの履歴に記載されていますが、Intel HAXM が v1.1.0 にアップデートされ、この問題が修正されたようです。SKKFEP、CorvusSKKともに問題ないことを確認しました。これで快適なSKKライフを送れるようになりました。

    返信削除