TitaniumMobileでAndroidアプリを書いてみた
表題のとおりなんですがTitaniumMobileでAndroidアプリを書いてみた。
目的はTitaniumMobileの調査。使用したバージョンはTitaniumMobile2.1.3。
結論から書くと、細かいハマりどころはまだあるものの、用途を選べば今の段階で大体使えそうかな~という感じ。
1年前に比べるとかなりこなれた感がある。
とりあえず作ったアプリの宣伝。
作ったアプリ ニュースクリッパー(NewsClipper)
https://play.google.com/store/apps/details?id=com.ueebee.newsclipper
全国紙・地域ブロック紙の情報を閲覧できるツールです。個人的に地下鉄に乗ることが多いので、オフライン状態で閲覧可能になってます。
今のところ読める新聞
[全国紙]
読売新聞・朝日新聞・毎日新聞・産経新聞・ロイター
[ブロック紙]
・北海道新聞・東奥日報・河北新報・秋田魁新報・千葉日報・神奈川新聞・新潟日報・信濃毎日新聞・岐阜新聞・中日新聞・福井新聞・京都新聞・紀伊民報・山陰中央新報・山陽新聞・中国新聞・徳島新聞・愛媛新聞・佐賀新聞・宮崎日日新聞・沖縄タイムス・琉球新報
※今後の予定
・わかってるバグ潰す
・ダサいのでUI変えたい
・地方紙追加(残り9紙くらい)
・ジャンル分け機能欲しい(政治・地方・スポーツetc)
※感想
地方紙というか地方のニュース結構面白い。
よかったら使ってみてください。
以下TitaniumMobileを使ってみた感想・技術メモを書きます。
良いとこ2:coffeescript便利
TitaniumMobileとは直接的には関係ありませんが、javascriptの足りないところをかなり補ってくれる。クラスが手軽に書ける&thisが@にバインドされてて直感的等々メリットでかい。またcoffee -wcでjavascriptを吐き出すとグローバルを汚さないので安心。
良いとこ3:容量が思ってたほど大きくならない
開発時に実機転送してた時「容量でかいな~」というのが正直なところでしたが、google playに公開するように、サイン付きのapkを書き出す際に1/3程度に圧縮してくれる。調査してませんがgoogle clousure toolsで圧縮してるのが効いてる?それともデフォルトでapk作るときに圧縮するからこんなもん?
微妙なところ1:マルチプラットフォームだけど・・
マルチプラットフォームはおそらく微妙。メインの処理部分は共通でいけるっていうところはありがたい。が、スマホ向けアプリの場合UI作るのにコードを結構書かなきゃいけない場合が多くて、UI向けのところはandroid向け、iphone向けで結構違う。
自分用メモ1:TabBarダサいから消したい
platform/android/res/layout/titanium_tabgroup.xmlへ以下を書く
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="0dp"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="0dp" android:layout_weight="1"/> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0"/> </LinearLayout> </TabHost>
javaネイティブで書くとき風味。
自分用メモ2:初回起動時にリスタート求められる
ちなみに初回起動時でも、android端末の種類によっては正常に起動できるものもあるらしい。
ついでに自分の環境だと、初回起動時というわけではなくて、google playの起動ボタンを押すとこの現象が出た。
Titanium2.1.2で解消されてるといってるけど、以下をtiapp.xmlへ追記しないとダメだった。
<property name="ti.android.bug2373.finishfalseroot" type="bool">true</
元ネタ
自分用メモ3:versionCode、versionNameはtiapp.xmlに書けない
バージョンアップする時に、versionCode、versionNameをアップしていくことになるけど、tiapp.xmlへ記載する方法が見つからなかった。解決方法は
一旦コンパイル→build/android/AndroidManifest.xmlをplatform/android/AndroidManifest.xmlへコピー→manifestのversionCode、versionNameを書き換えてコンパイル
これでversionCode、versionNameが上がる。
自分用メモ4:画面を縦固定にしたい場合
これもplatform/android/AndroidManifest.xmlを書き換える。activityにandroid:screenOrientation="portrait"を追記すればOK。
自分用メモ5:preferenceが使いにくい
設定画面が簡単に作れるPreferenceクラスですが、TitaniumMobileだとイベントが足りないと感じた。
closeイベント、changeイベントとかが取れるとありがたい。
仕方がないので今回はwindowのfocusイベントで代用。
追記:TitaniumMobile3.0βではイベント追加されてる模様
番外編1:google playからダウンロードエラー
エラー詳細は
サーバーからの情報の取得中にエラーが発生しました。[RPC:AEC:0]
結果わからずじまいだったのですが、
http://ameblo.jp/mu-rrr-ci/entry-11394553434.html
と同じ症状。
症状も同じで、
・初版をGoolePlayへアップロード
・数時間後ダウンロードできるようになる
・バグに気づいて修正
・再アップロード
・再アップロードから4時間後くらいに、アップデート通知がandorid端末に届く
・ここでエラー サーバーからの情報の取得中にエラーが発生しました。[RPC:AEC:0]
・PCサイトからインストールはしばらくしたら可能になった
・android端末からはインストールできない
・寝る
・再アップロードから12時間後くらい?android端末からも正常にダウンロード可能
という状態。
感想
TitaniumMobile使えます。あと一歩って感はまだあるけど、WEB連携・リアルタイム性がそれほど求められないアプリなんかは、ネイティブで書くより楽な気がします。無い機能もモジュールでカバーできそうですし、もう少しこなれたらTitaniumもっと増えそうな予感。今後に期待です。