« セーブフォルダとライセンス表示 | メイン | デバッガ有効版 »

2012年06月25日

吉里吉里Java:: データの格納場所

    

オリジナルの吉里吉里2の場合実行ファイルと同じフォルダに data.xp3 を置いて、そこからデータを読み込むのが一般的だと思うが、Android ではこの方法は使えない。
Android でこのようなデータを扱うには、以下のような方法がある。

1. APK Expansion Files を使う
Google Play ストアで配信するのであれば、APK Expansion Filesを使うのが持っとも手軽だと思われる。
これは、アプリ本体とは別にリソースを 2GB + 2GB 使えると言うもので、リソースファイルは何でもいい。
つまり、xp3 ファイルを別リソースとして上げてやればそれが使える。
このリソースは自動で SD にダウンロードされる ( されない場合もあるのでその時は自分でダウンロードして ) ので、後はそのファイルを読み込んで実行すればよい。

2. 別サーバーに置いて自前でダウンロード
リソースが合計で 50MB を超えるような場合 Google Play ストアが使えるのであれば、APK Expansion Files を使うのが良いと思うが、そうでない場合は別サーバーを用意してそこからダウンロードして SD に格納し、そのファイルを読み込んで実行する。

3. Assets フォルダに置く
apk ファイルの上限が 50MB なので、コアとリソースを合わせた時に 50MB 以内に収まるのであれば、apk 内にリソースを入れてしまえる。
この場合、assets フォルダか res フォルダ以下のどこかに置ける。
ファイル名や種類の縛りがない assets フォルダが扱いやすいが、2.3 未満では 1MB と言うファイルサイズ制限がある端末がある ( 多くの端末である様子 ) 。
2.3 以上ではサイズ制限がなくなっている ( とは言ってもapkファイルサイズ制限がある ) ので、気にしなくても良くなった。
ただ、assets フォルダのアクセスは遅い。
SD にコピーしてから読み込んだ方が速い。

4. res/raw に置く
res 以下は種類に応じて drawable 等にデータを置ける。
この中で raw は任意のファイルを置ける。
ただ、ファイル名に制限が付くのとフォルダを作れない制限がある。
res 以下のファイルは、R.drawable.xxx 等の ID が割り当てられるので、ファイル名にはJava のメンバ変数名と同じ制約があるはず ( さらに小文字制限がある )。
これらリソースに対してスクリプトからアクセスする方法は実装していないので、速度等の使い勝手については知らない。
また、ファイルに対して柔軟なアクセスが可能かどうか ( File Descriptor が取得可能か ) も未調査 ( 検索した範囲ではなさそう ) 。
ファイルサイズ制限も未調査 ( assetsと同じ制限がありそうではある ) 。

APK Expansion Files を使うのが様々な制限を回避して扱いやすいが、Google Play ストアのみになる。
容量が少ない場合、asserts に入れてしまうのが良いと思うが、2.3 未満にも対応するのならサイズ制限が発生する。
別サーバーに置くのも扱いやすいが、別サーバーを自分で準備する必要があるが、50MB超えていて Google Play ストアに置けないとなると、この方法をとるしかない。
50MB 超える場合、テキストリソースを asserts に置いて、他のデータを別サーバーに置くというのが良いのではないかと思っている。

現在のところ Assets フォルダから読み込むのと SD から読み込む機能のみ実装されているだけなので、ダウンロードやSDへのコピー等組み合わせた指定が可能な機能を組み込んでいく。



投稿者 Takenori : 2012年06月25日 14:14




comments powered by Disqus
Total : Today : Yesterday : なかのひと