T

決戦!Titanium 対 PhoneGap

結論:文句あったらプラグイン書けばまあたいていどっちでもなんとかなるYO!

以上。

PhoneGapで起動画面(Android)

PhoneGapで作成したアプリの起動画面の設定は以下の通り。ここでは画像をドーンと表示する例。まずメインとなるJavaのonCreateにsetIntegerPropertyを追加する。

public class movie extends DroidGap{
  super.onCreate(savedInstanceState);
  super.setIntegerProperty("splashscreen", R.drawable.splashscreen); //←ココ
  super.loadUrl("file:///android_asset/www/index.html");

それから、対応する画像をres/drawable/splashscreen.pngとして用意する。おしまい。

PhoneGap雑感

PhoneGapでAndroid向けアプリを制作してみての雑感。

よいところ

・学ぶのが簡単

基本的に設定が終わったらあとはHTMLとJavaScriptを書くだけ。デザイン的なこともHTMLで記述している分には慣れている人にはほとんど問題ない。

サードパーティーのツールも豊富

Sencha touchやjQtouchといったJavaScriptライブラリもあってUIの作成は簡単。他にも各プラットフォーム向けのプラグインがたくさん公開されている。

・仕組みが単純

DroidGapクラスをextendsするクラスを用意するだけで済むので、onCreateやいろんなところでちょっとしたフックを挿入したいと思ったらTitaniumより楽に動作させられる。Titaniumの場合、プロキシの仕組みを追いかけてどこで何をやっているのかちゃんと把握していないと変なところで動かなくなってしまう。それから、単純な分だけapkファイルのサイズも小さいのもいい。

困ったところ:

・ハマると大変

HTMLとJavaScriptで書けばいい、とはいうものの、例えばjQtouchやSencha touchを使う場合はHTMLの書き出しまでJavaScriptのライブラリ任せになるので、細かい調整はいろいろと難しくなる。ドキュメントも豊富とはいえないので、ソースを追いかけ始めると大変。

・onResumeやonPauseでうまく動かすのが難しい

他のアプリやActivityを起動して元の画面に戻ると、初回起動と同じシーケンスが走る。つまり、ウェブブラウザをリロードして最初の画面に戻ってしまう状態になる。つまり、Ajaxをバリバリ使ってウェブアプリを作成しているのときに外部サイトにリンクしてそこから戻るボタンを押したのと同じような問題が起きる。ステートレスなウェブの考え方をステートフルなアプリの世界に持ち込むことの弊害とでもいおうか。これエミュレータだけの現象みたい。

・遅い、遅い、遅い

WebViewはメモリも食うし、とにかく動作が遅い。エミュレータだと不安になるくらい重い。起動から動き出すまでにかなり時間がかかる。

PhoneGap (Android)でローテーションの固定

Titaniumでも同じような手が使えたので試してみたら大丈夫だった。

AndroidManifest.xmlで各Activityのところを(portraitで固定したいなら)こんな風に記述する。

android:configChanges="keyboardHidden"←ココ
android:screenOrientation="portrait"

keyboardHiddenからあとの部分を消す。