基本的なこと
まずはAndroid用Ren'Pyをダウンロードしてインストールします。こちら。
で、ゲーム本体は外部メモリー(SDカードなど)にrenpyフォルダを作って放り込むことでプレイできるようになります。
ファイルなど
android.txt、icon.png、.nomediaが必要になります。
置く場所はゲームのルートフォルダで、こんな風になります。
ゲームフォルダ
|-game
|-android.txt
|-icon.png
|-.nomedia
|-main.py
.
.
android.txtの内容はゲームプロパティで、書き方は
title=The Question
author=ATP Projects et al.
api=61200
orientation=landscape
です。
title→ゲームタイトル
author→作者
api→Ren'Pyのバージョンの数字。点で区切られている三つの内最初の数字を10000で、2番目の数字を100で、そして3番目の数字を1でそれぞれかけ、足した数字になります。(例・6.11.2→61120)
orientation→ゲームの向きです。portrait→縦、landscape→横。
.nomediaファイルには何も記述せず、icon.pngはアイコン用の小さなイメージファイルです。
ここまでできたらテストですね。
最初にも書いたように、renpyフォルダの中にゲームフォルダを放り込んでやれば動く……はず。
パッケージとしてリリースする
.apkとしてリリースする、ここがちょっと面倒臭い作業です。
パッケージを作るには、こちらで配布されているツールを使っいます。
まずは、ダウンロードして任意のフォルダに解凍してください。
他に必要なのは、
Python 2.6、または2.7
Android SDK
Java JDK
Apache Ant
です。
全てインストール・解凍した上でパスを通します。
が、この記事の本題ではないので、インストールやパスの通し方が分からない方は下記のホームページなどを見て頑張ってみてください。
http://www.pythonweb.jp/(Python)
http://www.javadrive.jp/(JAVA)
http://whzat.dyns.net/shoko3/ApacheAnt/index.html(Apache Ant)
http://smartgoods.me/2011/01/android_sdk_install/(Android SDK)
注意! パスを通す、と言いましたが、Ren'pyのAndroidパッケージツールは別です。これはパスを通すとJinja2のインストールを要求され、上手く行きません。
準備が整ったらパッケージ化ツールをコマンドプロンプトでカレントディレクトリに設定して、以下のコードを打ち込みます。
./build.py --dir mygame --package com.domain.mygame --name "My Game" --version 1.0 debug
全て上手くいったら、binフォルダ内にmygame-version-debug.apkとmygame-version-debug-unaligned.apkが出現します。
ここで気をつけるのは、配布するのはmygame-version-debug.apkだと言うことです。
なぜ? と思うかも知れませんが、これがAndroid向けに最適化されたパッケージであり、もう片方はパッケージ内のファイルが直接アクセスできてしまう、メモリの無駄遣いなどといったことがより起こりやすいものと言えます。
【追記】コードreleaseについて
こちらのページを見ていると、debugの代わりにreleaseでもパッケージ化できる項が伺えます。
./build.py --dir mygame --package com.domain.mygame --name "My Game" --version 1.0 release
ではなぜreleaseではなくdebugなのでしょうか?
リリース用パッケージを作るならreleaseだろう、と思われるかも知れませんが、そこが落とし穴です。
実はreleaseで作ったパッケージは署名もされていませんし、最適化もされていないため、手動で署名し、Zipalignを使って最適化する必要があります。
私が理解した内容によると、debugはAntのコマンドで、ren'pyのパッケージングツールを使う時に上で紹介したandroid.txtの内容やicon.pngを読み込んで署名済み、最適化済みのパッケージを生成してくれるようです。事実、こうして作成したパッケージは実機で動作しました(署名がないと動きません)。ただ、署名の期限に関しては未だに謎ですが……。
今はここまでしか分かりませんが、こうしてみると、どうやらpygameではなくren'pyのパッケージングツールを使う場合はdebugが正解のようです。うーん……。
また何か分かったら追記にて書きますのでっ!
コードあれこれ
buildを実行する際に知っておくと便利なコードです。上で紹介したのは最低限ですが、付け加えることもできますよ、と。
特に指定がない場合、最低限の命令以外はデフォルトの値で実行されます。
--package→パッケージ名。必須です。
--name→人が理解できるプロジェクト名。必須。
--version→バージョン。必須。数字とピリオドを組み合わせて指定します。数字は変えても、必ず前バージョンと同じ並びにしましょう。
--numeric-version"→数字のみのバージョン。指定がなければバージョンから自動的に計算されます。
--dir→プロジェクトのディレクトリ。必須。
--private→他にプロジェクトに加えたいファイルが置いてあるディレクトリ。
--launcher→Trueで指定した場合、複数のゲームを開けるランチャーが生成されるようです。デフォルトはFalse。
--icon-name→アイコンの名前。
--orientation→ゲームの向き。landscapeかportraitで指定。デフォルトはlandscape。
--permission→すみません、よく分かりません(汗)。
--icon→アイコンとして使うpngファイルを指定。
--presplash→ロード中に見せる画像を指定。
--install-location→インストール場所。auto、preferExternal、internalOnlyで指定。デフォルトはAuto。
--compile-pyo→Trueで指定すると.pyファイルを.pyoにコンパイル、コンパイルされたもののみをパッケージに入れます。
--with-sqlite3→Trueで指定した場合、sqlite3のモジュールをパッケージに含めます。
--with-PIL→Trueで指定した場合、Python Imaging Library (PIL)をパッケージに含めます。
最後に・バグ?
あとはマーケットに登録するだけ! と言いたいところなのですが、音楽をアーカイブするとAndroidで再生されないという問題が報告されています。
これについては私も情報待ちで、今は何もできません。
もしどなたか成功例がありましたら、コメントやメールフォームよりお知らせいただけると幸いです。
では、まだまだ狭いAndroid向けノベルゲーム界隈を盛り上げていきましょう!