Androidで月面着陸

Googleから噂のモバイル環境"Android"が発表され、またSDKが公開された。
SDKを早速落として中を覗いてみるとsamplesの中にLunarLanderが入っているではないか。
LunarLanderとは今の若い人は知らないだろう*1が、大昔にベクターグラフィックのゲームが存在した時代、それもかなり初期のゲームだ。
なんて、おっさんホイホイだろう。早速遊ぶことにした。


AndroidSDKは開発環境としてEclipseを推奨している。Javaを書くならIDE無しではつらい体になってしまったので素直に従ってもよかったのだがEclipse上でのビルドに関しては既にid:nobusueさんが非常に丁寧に解説されていたのでここはあえてCUIを選択することにした。どうせビルドしかしないし。


まず事前準備にダウンロード。
JDK
Ant
SDK

後のためにSunのJDKはスペースを含まないパスにインストールしておくこと。これはantがおバカなせいである。既にインストールしてしまった場合にはAndroidのドキュメントに従い"〜"を使った短縮記法でパスを指定すること。


私の実行環境はCygwinである。
Cygwinを使用してSunのJavaを利用する場合にはjavaコマンドは純粋なWindowsアプリであるため、javaが利用する環境変数の記述はあくまでもWindowsスタイルで行わなければならないことに注意しよう。

プロジェクトの作成

まず、Androidの開発はProject単位で行う。
Projectの作成を行うにはEclipseでは右クリック一発であるが、CUIにおいてはBATスクリプト、またはPythonスクリプトを利用する。
まずPATHを通そう。SDKのコマンドはtoolsの中だ。

PATH=$PATH:/cygdrive/d/android_sdk_windows_m3-rc20a/tools
PATH=$PATH:/cygdrive/d/apache-ant-1.7.0/bin/
PATH=$PATH:/cygdrive/c/jdk1.6.0_03/bin


Androidのプロジェクト作成にはactivityCreatorを用いる。
既存のプロジェクトを利用する場合には遠慮なく既存プロジェクトのディレクトリ上で実行すればファイルを消さずに実行してくれる賢い奴だ。

$ cd /cygdrive/d/android_sdk_windows_m3-rc20a/samples/LunarLander/

$ ls -la
合計 32K
drwx------+ 4 minghai なし    0 Nov 15 02:01 ./
drwx------+ 8 minghai なし    0 Nov 15 02:01 ../
-rwx------+ 1 minghai なし 1.2K Nov 11 13:01 AndroidManifest.xml*
drwx------+ 7 minghai なし    0 Nov 15 02:01 res/
-rwx------+ 1 minghai なし  27K Nov 11 13:01 sample_lunarlander.png*
drwx------+ 3 minghai なし    0 Nov 15 02:01 src/

$ activityCreator.bat com.google.android.lunarlander.LunarLander
package: com.google.android.lunarlander
out_dir: d:\android_sdk_windows_m3-rc20a\samples\LunarLander
activity_name: LunarLander
WARNING! There are already some Java files present. None will be created!
Created directory d:\android_sdk_windows_m3-rc20a\samples\LunarLander\bin
WARNING! There are already some Resource Values files present. None will be crea
ted!
WARNING! There are already some Resource Layout files present. None will be crea
ted!
WARNING! The file AndroidManifest.xml already exists and will not be overwritten
!
Added file d:\android_sdk_windows_m3-rc20a\samples\LunarLander\build.xml

この時、第1引数にはActivityの名前をパッケージ名込みで指定する。
Activityとは誤解を恐れずに言えばAndroidのAppletクラスだ。
Activity名を確認するために先にsrcディレクトリを確認しておこう。


さて、これでbuild.xmlを作成することができた。

ビルド

次はantにてビルドを行う。
ただantと入力すれば良い。

$ ant
cygpath: can't convert empty path
Buildfile: build.xml

dirs:
    [mkdir] Created dir: d:\android_sdk_windows_m3-rc20a\samples\LunarLander\bin
\classes

resource-src:
     [echo] Generating R.java...

aidl:

compile:
    [javac] Compiling 3 source files to d:\android_sdk_windows_m3-rc20a\samples\
LunarLander\bin\classes

dex:

package-res:

package-res-no-assets:
     [echo] Packaging resources...

package-dex:
     [echo] Packaging dex...
      [zip] Building zip: d:\android_sdk_windows_m3-rc20a\samples\LunarLander\bi
n\LunarLander.apk.tmp
     [move] Moving 1 file to d:\android_sdk_windows_m3-rc20a\samples\LunarLander
\bin

package:

BUILD SUCCESSFUL
Total time: 4 seconds

antを実行するとbinディレクトリにLunarLander.apkというファイルができているはずだ。これがjarファイルに相当し、携帯電話にインストールする元となる。

アップロード

携帯電話へのアップロードにはadbを使う。もちろん今回はエミュレータに対して行う。

$ emulator &

エミュレータを起動したらホーム画面がでるまで暫くじっと待つこと。
また初回の起動時には実行環境の詳細をGoogleに送っても良いかと聞いてくるので任意で選択すること。


それではアップロード。

$ adb install bin/LunarLander.apk
530 KB/s (0 bytes in 118903.000s)

この時失敗することもあるが落ち着いてメッセージを読むと意味がわかるはずだ。素直に少し時間を空けて再実行すれば成功するはずだ。

ゲーム開始

最後にLunarLandarの実行だ。
エミュレータの方向ボタンを押すか、画面を直接ドラッグしてアプリケーションフォルダを選択し、中央のボタンをクリックする。
するとLunarLandarがそこに見えるはずだ。


操作方法の説明がないっぽいが、上でスタート・ポーズ、ボタンで噴射、左右で方向転換だ。
めちゃくちゃ難しい。
がんばってください。

*1:最近のアタリミュージアム系のミニゲーム集には入っていることも多いので若い人でもやったことがある人はある程度いるかもしれない