GDC 2011レポート

Android Developer Dayレポート
異なる端末間で互換性を確保するには? NDKやOpenGL ES 2.0などのAndroidゲームのあれこれ


2月28日~3月4日開催(現地時間)

会場:サンフランシスコ Moscone Center



 GDC11の会期2日目、この日はチュートリアルデイの一部としてGoogleによる「Android Developer Day」と題する連続集中セッションが行なわれた。この中でAndroid向けアプリケーション開発についての技術情報が連続5セッションにわたって紹介され、Android上でネイティブコードの実行が可能になるNDK(Native Development Kit)や、3DグラフィックスAPI OpenGL ES 2.0といった、Android 2.2、あるいは2.3で拡張される最新機能が大きな関心を集めた。

 とはいえ冒頭のセッションで「端末間で互換性のあるアプリを作るには」という内容の講義が行なわれたあたり、端末メーカーによってハードウェア構成がそれぞれ異なる、自由なモバイルプラットフォームであるAndroidならではの個性が出た格好だ。本稿では「Android Developer Day」の内容からこれらの話題をお伝えしたい。



■ 多様な端末間で互換性のあるアプリを作るには? Googleによるノウハウ紹介

GoogleのChris Pruett氏
Android端末間で異なる可能性のあるスペック項目は多岐に渡る。どこを狙えばいいのだろう?

 集中セッションの1発目として「Building Aggressively Compatible Android Games」と題する講義を行なったのは、100万本以上のダウンロード数を記録したゲーム「Replica Island」を開発したGoogleのChris Pruett氏。多くの異なる端末で一様に動作するゲームをどう作るかという問題がテーマだ。

 これは端末の種類が無数に存在するAndroid OSならではの問題だ。Android OSのバージョンが上がり、市井に流通する端末の多様性が増していくたびに、ゲームソフトの互換性を維持するための面倒が増していく。特にコンシューマーゲーム機のように画一的なスペックを対象にゲームを作ればよかった開発者にとっては、どう取り組んで良いかわかりにくい、扱いづらい問題であるようだ。

 例えばマルチタッチ機能やトラックボールの有無といったハードウェアインターフェイスの違いは、非対応の端末で全くプレイできないという結果につながるためとても重要だ。Chris氏はこの点について、「仮想方向パッドなど、代替の操作法をオプションとして提供すること」を推奨している。全くプレイできないよりは、多少本来の出来とは違っても遊べたほうがいいということだ。

 今後、ソニーエリクソンの「Xperia PLAY」のようなゲーム向け端末が登場してくる中で、特定の機種だけで動くようなゲームソフトを提供するのもひとつの手ではある。他の端末では申し訳程度に動作するものを提供するのか、そうせずに思い切って切り捨てるのか。ゲーム開発者としてはどちらの選択にも意味がありそうで、難しい。


かなり大雑把なグラフ。OpenGL ES 2.0は、現在では70%の端末がサポートするという

ターゲットを広げるためには、異なる解像度、アスペクト比への対応がほぼ必須となる
Manifestファイルに必要機能を記述することで、非対応端末へのダウンロードを抑制できる

 このテーマに沿い、本セッション中では、解像度の違いに対応するため解像度非依存のUIを作成する、傾きセンサーのデフォルトの方向の違いに対応するため変換テーブルを用意する、OpenGL ES 2.0対応を確認するためにGL_EXTENSIONSリストをチェックする……といった、細々な「お約束」が解説された。

 基本的には、PCゲーム開発を経験したことのあるデベロッパーならば容易に想像できる類のものだ。ただし、Android固有の特徴である入力デバイスの違い、フラッシュメモリとSDカードという異なる記憶域の存在といった点については、改めて認識をしておく必要がある。

 ちなみに、細かい差異を奇にせずに全端末で動くように開発したいという向きには、HTC「T-Mobile G1」をターゲットとすると良いそうだ。これがAndroid端末のミニマム・スペックなのだそうだ。

 それでも特定の端末向けのゲームを庭用したい開発者は、アプリケーションの動作内容を示すメタデータ“Manifest"XMLファイルに、使用する機能の項目を書き込むことで、Android Market上で非対応端末のユーザーにアプリを表示させないということができる。

 実際、Android Marketにはこの仕組みを使って「SD版」、「HD版」というふうに同一ゲームを別商品として陳列するタイトルが一部に見られるが、Chris氏はこれをあまりよくない例として挙げていた。なぜかというと、ブランチが別になってしまうことでバージョン管理が面倒になるし、また、ユーザーが2バージョンに分散することで、せっかく多数のダウンロードがあったのにランキングに載らない、といった損失の原因になるためだ。

 異なる端末上で最適に動作する互換性の高いゲームを開発することは、多様化するAndroidスマートフォンの市場で成功するためには必須の科目と言えるのかもしれない。その意味で今回このセッションで話された内容は、Androidゲーム開発者の間で広く共有される価値が大いにありそうだ。


解像度、インターフェイス、ボタン、傾きセンサー、3Dゲームのテクスチャーフォーマットなど、互換性を得るために守るべきお約束がたくさん。このあたりを上手に吸収してくれるミドルウェアの登場が期待されそう?



■ Androidゲームはネイティブコード開発でより高パフォーマンスへ

NDKとは?
ネイティブコードはライブラリの形でシステムに追加され、プログラムから呼び出される
今年に入ってのアップデートでデバッグ環境がだいぶましになるようだ

 より高速なプログラムをAndroid上で実現するためのソリューションとしては、Android 2.2より提供が開始されているNDK(Native Development Kit)に注目が集まっている。NDKは、JavaVM上で動作するアプリを作り出すAndroid SDKに、C++ネイティブコードで動作するモジュールを追加できるようにする開発キットだ。

 とはいってもプログラムに直接ネイティブコードを埋め込むという形ではなく、ネイティブコードのライブラリを追加してそれをメインプログラムから呼び出す、という形をとる。したがってアプリケーションの中でも特に高速化が必要な部分に限ってネイティブコード化する、という使い方を想定したものだ。

 例えば画像処理のように大量のデータに大して計算を行ないつつメモリの読み書きをするような処理は、Javaによる元々の実装に比べて大幅に高速化できる可能性が高い。ゲームであれば、込み入ったAI処理や3Dデータの変形などに大きな効果がありそうだ。

 本セッションではNDKの概要のほか、最新のアップデートによる拡張についても紹介された。それによればGUIによるデバッガーの提供、入力イベントを扱えるなどある程度自律的なプログラムが書けるようになる、ネイティブフレームワークライブラリなどシステムアクセスが可能になるライブラリの提供など、ネイティブコードで本格的なプログラムが作成できるようになるようだ。

 これにより、高いパフォーマンスが求められる各種ゲームエンジンの開発が容易になるだけでなく、さらに性能を追求できるようになり、Android端末で見られるゲームのクオリティアップに拍車をかけていきそうだ。


入力イベントをハンドルできるようになり、ある程度自律的なプログラムが書ける。また、プラットフォームライブラリの提供によりシステムアクセス可能な範囲が広がるなど、NDKは大きなアップデートが行なわれている。セッションの後半では実際にビルドしてデバッグする様子が紹介された


【OpenGL ES 2.0】
当面のAndroidプラットフォーム向け最新3D APIであるOpenGL ES 2.0については、基本的なプログラミングガイドが披露された。ポイントとしては、ステートチェンジに大きなコストがかかるため、なるべくVBO(Vertex Buffer Object)でまとめ描すること、テクスチャフォーマットは各端末共通のETC1が推奨であること、など。ちなみにETC1はアルファチャンネルが使えないため透過テクスチャを使うには一工夫必要だが、アルファチャンネルをサポートしたフォーマットETC2の登場が間近だそうだ

(2011年 3月 2日)

[Reported by 佐藤カフジ]