TitaniumのAndroid用モジュールを作る その1

TitaniumのAndroid用モジュール作成はWebで探しても日本語で解説しているところが見当たらなかったので、公式サイトを参考にかいつまんでまとめておきます。
公式サイトを全て完全に訳しているわけではなく、意訳や省略・追加している箇所もあるのでご了承ください。

環境はMac OSX(Lion)、Titanium Studio 1.0.4、Titanium SDK 1.7.2です。
既にTitaniumでのAndroidの開発環境は出来ている前提で記述します。

参考ページは下記です。
Module Developer Guide for Android

環境設定

まずこちらのページに

Environment setup

Follow the instructions in the Titanium Command-line tool Environment Setup section

とあるので、自分の.bash_profileにtitanium.pyへのaliasを設定します。

alias titanium="$HOME/Library/Application Support/Titanium/mobilesdk/osx/1.7.2/titanium.py"

なお「Application Support」のところは半角スペースをエスケープしないとコマンド実行時にエラーになります。
また、「1.7.2」は環境にTitaniumSDKのバージョンに合わせて変更してください。

sourceなどで.bash_profileを読み込み直してからtitaniumコマンドを実行し、下記のように表示されたら成功です。

$ titanium 
Appcelerator Titanium
Copyright (c) 2010-2011 by Appcelerator, Inc.

commands:

  create      - create a project
  run         - run an existing project
  emulator    - start the emulator (android)
  docgen      - generate html docs for a module (android)
  fastdev     - management for the Android fastdev server
  help        - get help

モジュールの作成

先ほど設定したtitaniumコマンドを使用して、モジュールのテンプレートプロジェクトを作成します。
生成するためのコマンドオプションは下記のようなフォーマットです。

titanium create --platform=android --type=module --name=$MODULE_NAME --id=$MODULE_ID --android=$ANDROID_SDK

$MODULE_NAME、$MODULE_IDは任意のモジュール名とIDを指定してください。

  • $MODULE_NAMEは生成されるクラスやjarなどのファイル名に反映されます
  • $MODULE_IDはTitaniumでtiapp.xmljavascriptからモジュールをrequireする際に使用します
  • $ANDROID_SDKandroid sdkを置いているパスを指定します

実際には下記のようなコマンドを実行します。

titanium create --platform=android --type=module --name=calc --id=org.appcelerator.calc --android=/path/to/android-sdk

実行するとカレントディレクトリに--nameで指定した名前(calc)でモジュールのフォルダが生成されます。

モジュールプロジェクトのレイアウト

  • LICENSE - ライセンスを記述するテキスト。作成したモジュールを配布する場合にライセンスの内容を記述するために使用するのだと思います
  • build.properties - Antのプロパティファイル。 Titanium SDKAndroid SDKの場所が記述してあります
  • build.xml - Antのビルドスクリプト。ビルド配布、テストに使用します
  • manifest - モジュールのマニュフェストファイル。バージョン、作者、ライセンス、コピーライト、名前、id、GUID、プラットフォームなどの情報を記述します。
  • timodule.xml - Activityなどモジュール内で使用する情報(通常AndroidManifest.xmlに記述するもの)を記述します
  • hooks - モジュールがプロジェクトから追加/インストール/削除/アンインストールされた場合に実行されるスクリプトがあるディレクトリ。 スクリプトはあるのですが(this is still a WIP)となっていたので実際に使われているのかは不明です
  • documentation - Markdown形式のドキュメントを置くディレクトリ。サンプルが生成されています。
  • assets - モジュールで使用するPNGなどの素材を置くディレクトリ。READMEを読むとjsファイルなどもここに置いておくとプリコンパイルされたpure Javascriptとしてモジュール内で実行できるようです(実際に動作確認していません)
  • lib - サードパーティのJARを置くディレクトリ。ここに入れておくと自動的にプロジェクトのクラスパスとモジュールのzipファイル(モジュールを配布する際に作成)に追加されます
  • src - モジュールのソースコードディレクト
  • example - モジュールを使用したサンプルプロジェクト

モジュールプロジェクトをeclipseに登録

モジュールプロジェクトをeclipseにインポートしてeclipseで開発やビルドを行えるようにします。

  • eclipseのメニューから「File」 > 「Import...」を選択
  • 「General」>「Existing Project into Workspace」をダブルクリック
  • 「Select root directory」の右側にある「Browse...」をクリック
  • モジュールプロジェクトのディレクトリを選択
  • 「Finish」をクリックして登録を完了するとPackage Explorerにプロジェクトが表示されます

モジュールの配布形式(zip)

distフォルダに配布用のzipファイルが生成されます。
zipの命名規則は通常$MODULE_ID-android-$MODULE_VERSION.zipです。

zipファイルには以下のものが含まれます。

  • コンパイルされたクラスが含まれたJARやリソースなどsrcフォルダからビルドされたもの
  • libフォルダのサードパーティJARファイル
  • モジュールのmanifestファイル
  • モジュールのtimodule.xml

eclipseを使用したビルド

モジュールプロジェクトはeclipseでビルドできます。

モジュールプロジェクトのbuild.xmlを右クリックし、「Run As」 > 「Ant Build(最初の方)」を選択します。
eclipseのConsoleに「BUILD SUCCESSFUL」と表示されたら成功です。
プロジェクトをF5などで更新するとdistフォルダが表示され、その中に配布用のzipファイルが生成されています。

モジュールをTitaniumアプリから使用する

モジュールを Titaniumのアプリから使用するには下記のようにします。

  • 先ほど生成したzipファイルをTitaniumアプリ側のプロジェクトルートディレクトリにコピー


  • Titaniumアプリのtiapp.xmlに以下のように追加します
<!-- $MODULE_VERSION should be the same as "version" in the module manifest -->
<modules>
  <!-- <module version="$MODULE_VERSION">$MODULE_ID</module>-->
  <!-- For example, if we were adding the calc module: -->
  <module version="0.1">org.appcelerator.calc</module>
</modules>

モジュールを読み込むためにrequireを使用します。

var Module = require('$MODULE_ID');

calcモジュールの場合は以下のようにします。

var Calc = require('org.appcelerator.calc');

アプリが起動またはビルドされるタイミングでモジュールのzipが自動的に展開されてアプリに読み込まれます。

長くなったのでテストやメソッドの呼び出しは次回記述します。