BlueStacks2

パソコン上でAndroidアプリを動かそう! ~BlueStacks App Playerを使ってみた~

  • このエントリーをはてなブックマークに追加

by [2012年12月21日]

ARM系CPUを搭載したマシンに対応するWindows RT上で、既存のx86/x64系CPU用Windows、つまりWindows XP/Vista/7/8などで動作するソフトウェアがそのまま動作しないことが示すように、異なる命令体系に基づくCPUを搭載したマシン間で同じソフトウェア(アプリ)を動作させるのは、技術的に難しい事の一つです。

例えば、人間の会話で英語を日本語に通訳するのであれば、双方の文法と語彙、あるいは慣用句などを全部知っていなくとも、「ある程度」以上知っていればそれで実用になります。

これに対し、異なる命令セットを備えた、ハードウェアアーキテクチャそのものの全く異なる2種以上のCPU間で、ある特定の命令セットを備えたCPUに対応するソフトを同じように動作させようと思った場合、「通訳」にあたるソフトウェアは、 双方のハードウェアアーキテクチャの全てをサポートし、正しくその動作を模倣し、なおかつ本来のアーキテクチャのマシン上で動作させるのと同程度に高速であること、つまり正確性と速度の双方が求められます。

この種の「通訳」を行うソフトウェアを一般にエミュレーターと呼び、その「通訳」行為そのものをエミュレーションと呼びます。

この種のエミュレーターとして世間一般によく知られているものの一つに、Windows 7上でWindows XP以前の古いソフトを動作させるための、つまりWindows 7でどうしてもソフトウェアの互換性を保てなかった部分を補うための手段として提供されている、「XPモード」があります。

この「XPモード」の場合、Windows 7でユーザープログラムのために用意されたメモリ空間上に「Windows XPが動作する古めのパソコン」をソフトウェア的に構築し、その上で仮想的に用意されたハードディスクに書き込まれたWindows XPそのものを起動する、という手順で「本物の」Windows XP Professional(ただし特別な改造を施された専用版)を動作させ、そこでソフトをインストールあるいは実行させるという手順を踏むことで、現在のWindows 7などで動作させることの難しい、あるいは様々な事情から正常動作させられなくなってしまった古いソフトを動作させています。

Androidをエミュレーションするということ

一方、以下の3記事でも触れましたが、Androidの場合は少々事情が異なります。

モトローラ初のインテルチップ搭載スマートフォン「RAZR i」発表!→だがしかしそこには罠が…!
すべてはWebアプリになる ~Firefox OS~
風雲急を告げるモバイル用統合プロセッサ ~オールインワン化が進む~

元々、AndroidはARM、MIPS、x86/x64、と複数の全く異なった命令セットを備えるCPUを搭載した機器を対象として開発され、その全てで同じアプリが一元的に同じ動作をすることが求められました。

そのため、専用アプリは基本的にJAVA言語を用いて開発され、「中間コード」と呼ばれる、それぞれのCPUいずれのものとも異なる、そしてそれぞれのCPUの命令セットに変換しやすい形の命令セットを使用するプログラムとしてGoogle Playなどで提供されています。

各端末では、これを仮想マシン(Dalvik Virtual Machine:DVM)と呼ばれる専用の変換ソフト上で実行することで同じ動作を保証しているのです。

つまり、元々x86/x64系CPUがサポート対象となっているため、この種の標準的なAndroidアプリを動作させたいだけなら中間コードをDVM相当のプログラムによってx86/x64系CPUのネイティブ命令セットに変換し、適宜グラフィックをはじめとする各種入出力機能のエミュレーションを行うだけで、WindowsでのAndroidエミュレーターは比較的容易に実現可能です。

中間コードによるエミュレーションの限界

しかし、この方法を用いたエミュレーターには一つ重大な問題があります。

高負荷のアプリで処理能力を引き上げるための手段として利用することが許されている、各CPUネイティブの命令セットで直接書かれたアプリが動作しないのです。

具体的に言うと、HTML5+中間言語で書かれた場合のアプリ性能があまりに低いとしてネイティブ命令セットを使ってアプリの作り直しが行われ、現行最新版で飛躍的な性能改善が実現されたFacebookや、特に3D描画をフル活用するようなゲームアプリなどは、何をどうやってもこの種の中間コードを変換実行するだけのAndroidエミュレーター上では正常動作しません。

そのため、この種のアプリをたとえばパソコンのWindows上で動作させたい場合には、先に記した「XPモード」と同様にWindows上である特定のアーキテクチャに基づくCPU、現在のAndroidの普及状況からするとARM v7命令セット+NEON命令セットの動作を正しくエミュレーションできる仮想CPUを用意しなくてはなりません。

ARM系CPUそのものをエミュレーションするBlueStacks App Player

そこで、その条件を満たすソフトとして開発されているのが、BlueStacksの「BlueStacks App Player」です。

このソフトは、メーカーが「LayerCake」と呼ぶARM CPUエミュレーター技術を基礎として、ARM系CPU搭載のAndroid端末そのものを仮想的にWindowsやMac OS上に構築するものです。

現時点では、開発の先行しているWindows版がベータ版、Mac OS版がアルファ版扱いとなっていて、完全な正常動作が保証されない状況で、しかもGoogle Playで公開されているアプリが直接利用できない(「設定」画面のクラウド接続」で他のGoogle Playを利用可能なAndoroid端末にインストールされたアプリ(端末の認証が必要なものを除く)を転送して利用することは可能です)など、幾つか問題点がありますが、既に75万以上のAndroidアプリが動作することが謳われています。

ちなみにこのソフト、BlueStacksの公式サイトでWindowsとMac OS対応の通常版が公開・提供されているのですが、それとは別に、「AMD AppZone Player, Powered by BlueStacks」として大手CPU・GPUメーカーであるAMDのAppZoneサイトでもカスタマイズ版(Windows用)が公開・提供されています。

これは、このソフトがAMDの出資を受けて、RADEON系GPUやAシリーズAPU(Accelerated Processing Unit:GPU統合型CPU)を搭載したマシンの場合、直接それらのGPUの機能を使用することでより高速に動作できるように最適化して書かれていることによるものです。

そのため、このバージョンの場合、例えばIntel製CPUとグラフィック統合チップセットを搭載したノートパソコンではインストール時に「BlueStacksは現時点ではあなたのグラフィックカードを認識できません。グラフィックカードのドライバーをアップデートすれば(認識)できるようになるかもしれません。アップデート後に再インストールをお試し下さい」というメッセージを出して、そこでインストールが停止するという非情の仕様になっています。

もっとも、だからといってBlueStacksで配布されているバージョンをインストールすれば動作するのかというと、そんなこともなく、そちらのバージョンでも筆者の所有するThinkPad X200の場合、出現タイミングは異なるものの全く同じ文面でエラーメッセージが表示され、やはりインストールできませんでした。

インテルのグラフィック統合チップセットの内蔵GPUや、第2世代目までのCore i世代のCPUに内蔵されているGPUの性能が同時代のNVIDIAやAMDのGPUと比較して著しく悪いことについてはここ10年以上にわたって定評がありますが、これはつまりその低性能が原因で、要するにインテル製グラフィック統合チップセット単独での動作はどのような条件でも全くアウトなのだ、と考えるのが無難です。

なお、筆者手持ちのNVIDIA GeForce 7900GTX、つまりAMD以外のメーカーによるDirect X 9世代の古い固定シェーダー搭載GPUでも、BlueStacks版についてはインストールとプログラムの起動は可能でした。もちろん、この世代のGPUは今となっては性能不足であるため、実用には厳しいのですが、このことから、先に挙げたインテルの内蔵GPUは描画性能以前の問題として、APIレベルで何らかの致命的問題を抱えている可能性が考えられます。

実際の動作状況

さて、それではこのBlueStacks App Playerの実際の動作がどのようなものなのか、確認してみるとしましょう。

幸い、筆者の手元には何世代かのRADEON系GPU搭載グラフィックカードと、搭載CPUコア数の異なるマシンがありますので、それぞれにこのソフトをインストールして動作を確認してみました。

まず、Direct X 11世代の最初のGPUとなった、そしてRADEON HD5000シリーズのシングルGPUコア搭載版ハイエンドモデルであるRADEON HD5870と、6コアを2.6GHzで駆動するCPU(Opteron 2435)を2基(つまりCPUコア数の合計は12基)搭載し、メモリを16GB搭載した少し古いWindows 7 x64マシンで動作させた場合、Androidアプリ(具体的にはAngry Birds Spaceなど)がいずれも非常に快適に動作しました。

この状況でタスクマネージャーを開き、このソフトを実行しその上でアプリを動作させた場合の各CPUコアの使用率を確認すると、ほぼ1コアに集中しており、このソフトではCPUのスレッド分散による複数CPUコアへのタスク振り分けを積極的に行っていないことが見て取れます。

つまり、このソフトを動作させる場合、CPUコアごとにある程度以上の処理能力があることが必須となると考えられます。

また、ここでネイティブ命令セットで動作するアプリとして、Facebookをインストールしてみましたが、これも拍子抜けするくらいあっさりとインストールから起動、初期設定、動作と進んでおり、ARM系CPUコアのエミュレーションは概ね正常に機能しているとみてよさそうです。

次に、AMD(当時のATI Technologies)初のDirect X10対応GPUとして登場したRADEON HD 2000シリーズのミドルレンジモデルであるRADEON HD 2600PROを搭載し、2コアを3.0GHzで駆動するCPU(Opteron 2222)を2基搭載しメインメモリを8GB搭載するWindows 7 x64マシンで同様にこのアプリを動作させたところ、プログラムそのもののインストールは実行されたものの、Angry Birdsをはじめとするゲームアプリの大半がインストール時にダウンロードが実行されずに終了しました。

もっとも、明らかにグラフィック描画で高度な機能を使用していないゲームアプリは正常にダウンロード→インストールが実行され、アプリそのものも正しく動作しているため、これはGPUのサポートしているグラフィックAPIがダウンロードに失敗したアプリの要求するレベルに達していなかったため、と考えるのが妥当なようです。

つまり、単純にこのプログラムを起動するだけならDirect X9あるいはDirect X10をサポートするGPU(ただしインテル製グラフィック統合チップセットを除く)でもOKなのですが、ゲームアプリを動作させたい場合は、Direct X11をサポートするRADEON HD5000シリーズ以降などのGPUあるいはAPUが必須となるようです。

とはいえ、インストールの可否については事前に、あるいはそれが無理としても事後に何らかの案内が表示されるような仕組みが欲しい、と感じました。

なお、このマシンのタスクマネージャーで示される各CPUコア使用率もやはり明らかに1コアに偏っており、各CPUコアの最大性能が充分高く、かつRADEON HD5000以降のGPU、できれば上位の高速モデルがあれば、このソフトはデュアルコアCPUでも充分実用になるという印象を受けました。

Google Playが使えないのは痛いが期待以上にアプリが動作する

ARM系CPU搭載Andoroid端末のエミュレーターとしてみると、このソフトはまだベータ版とはいえ、またGPUに対する要求が結構厳しいのですが、筆者が予想した以上の完成度を実現しています。

それだけに、Google Playが直に利用できないのは本当に惜しいのですが、一応回避策は用意されているため、それは致命的ではなく、むしろタッチパネル前提のアプリをマウス操作することによる違和感の方がより深刻な印象を受けました。

正規版がリリースされればさらに機能強化、動作速度アップ、あるいは互換性向上が実現すると考えられ、スマホやタブレットとパソコンで動作するアプリ環境を統一する手段として、今後の発展が非常に楽しみなソフトです。

コメントは受け付けていません。

タグ:
PageTopへ