twingo_b's blog

memo

Titanium MobileでDeployGateを利用する

@astronaughtsさんから依頼を受け、moduleを作成したところ、ひと通りうまく動作しました^^。

検証中にちょっとハマったところがあり、@DeployGate_jaさんにドキュメントの改善要望をお問い合わせしました。

その後、こんなお話をいただいたので、Octpressの練習も兼ねてmoduleの作成方法を公開します。

サンプルソースはGitHubに置いておきましたので、こちらをどうぞ。

Andorid SDKTitanium StudioDeployGateで必要なものはインストール済みの前提です。

開発環境はMacで、shellはzshを利用しています。

Titanium Mobileのandroid moduleの作成

~/.zshrc例

moduleを作成する

適当なディレクトリに移動して、.zshrcでalias指定したtitaniumコマンドでmoduleのテンプレートを生成します。

1
$ titanium create --platform=android --type=module --name=TiDeployGate --id=local.twingob.android.tideploygate --android=$ANDROID_SDK

Created android module projectと出れば成功です。

tideploygateディレクトリ以下にテンプレートが作成されました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
LICENSE
assets
- README
bin
build
build.properties
build.xml
dist
documentation
- index.md
example
- app.js
hooks
- README
- add.py
- install.py
- remove.py
- uninstall.py
lib
libs
manifest
platform
- README
src
- local
  - twingob
      - android
          - tideploygate
              - ExampleProxy.java
              - TideploygateModule.java
timodule.xml

build.xml,build.propertiesがローカルPATHを指しており、そのままではコード共有しにくいので修正します。Titanium Studio、Eclipseなどを利用する場合は.classpathも同様に修正したほうが良いです。

build.xmlの修正

build.propertiesから環境変数を参照できるように<property environment="env"/>を追加しました。

build.propertiesの修正

timodule.xmlの修正

example/app.jsからの動作確認時、リモートLogCatが利用できるように<uses-permission android:name="android.permission.READ_LOGS" />を記載しておきます。

AndroidManifest.xmlはこの記述から自動生成されます。

libディレクトリにdeploygatesdk.jarをコピーする

後ほど説明するantビルド時に、libディレクトリのjarが参照されます。

moduleのソースコード変更、DeployGateの呼び出し

コマンドから自動生成されるソースコードは下記2種類です。 src/local/twingob/android/tideploygate

1
2
- ExampleProxy.java
- TideploygateModule.java

不用なサンプルファイルを削除

今回はProxyは利用しないので、ExampleProxy.javaは削除します。

以降は、テンプレートをTitanium Studio、Eclipseにインポートしたほうがやりやすいかと思います。

TideploygateModule.javaの名前が気になるのでリファクタリング

TiDeployGateModule.javaに修正しました。

TiDeployGateModule#onAppCreate()にDeployGate#install()を追加

ここがTitanium MobileでDeployGateを利用する際のポイントになります。

TiDeployGateModule#onAppCreate()はApplication#onCreate()時に呼び出されます。

また、Titanium Mobileで生成されるAndroidManifest.xmlandroid:debuggableは常にfalseとなっています。

そのため、DeployGatei#install(Application app)ではなく、DeployGate#install(Application app, DeployGateCallback callback, boolean forceApplyOnReleaseBuild) を利用する必要があります。deploygatesdk-javadoc.jarにその旨記載がありました。

例では、forceApplyOnReleaseBuild:trueとなるように、DeployGate.install(app,null,true)と指定しました。

Android SDKをEclipseから開発ビルドした場合は、android:debuggabletrueになるみたいです。最初DeployGateのWeb上のドキュメントだけ見て、JavaDocを読んでなかったので、なぜ動かないのかわからず、ちょっとはまりました^^;。ドキュメントは最初にひと通り読まないとダメですよね><。

クラスのコンストラクタ以外のmethodサンプルを削除して、必要なmethodを追加

こちらはmoduleやDeployGateのサンプルの通りです。

example/app.jsを記載して、moduleの動作確認を行う

ant runで動作確認できるように、js側でmoduleを呼び出します。

moduleは、テンプレートのディレクトリ直下でantコマンドを実行すると、emulatorで動作確認ができるので、実行してみます。

Android emulatorの起動

1
$ ant run.emulator

Terminalの別のTabでテストビルド

1
$ ant run

無事アプリは起動したのですが、emulatorのLogCatに下記のように出力され、動作しませんでした。DeployGateのクライアントアプリのインストールが必要ということですよね。

1
DeployGate  V  DeployGate is not available on this device.

そこで、ant runしてできたapkをdgate pushして、実機で動作確認して見ることにしました。ant runのログの最後の方に下記のように出力されているので、それを使ってみます。

1
2
 [exec] [DEBUG] /Users/[user]/android-sdk/platform-tools/adb -e install -r /var/folders/3j/cjcy2jcd6tlbkqyv1crfj1yh0000gn/T/m0sWWDXti/tideploygate/build/android/bin/app.apk  
 [exec] [INFO] Launching application ... tideploygate
1
2
3
4
5
6
7
8
$ dgate push /var/folders/3j/cjcy2jcd6tlbkqyv1crfj1yh0000gn/T/m0sWWDXti/tideploygate/build/android/bin/app.apk
Push app file successful!

Name :          tideploygate
Owner :         twingo_b
Package :       local.twingob.android.tideploygate
Revision :      1
URL :           https://deploygate.com/users/twingo_b/apps/local.twingob.android.tideploygate?key=3cc6266d2d8a606a25dfcb209331bf5de954734a

無事Pushできたので、アプリを実機で起動してみます。

動いた!

リモートLogCatも動いた!

うまく動いてますね^^。

Titanium Mobileプロジェクトでの利用

実際のプロジェクトで利用するために、moduleのzipファイルを生成

ant distコマンドで、zipファイルを生成します。

1
2
3
4
5
6
7
8
9
10
$ ant dist
...
zip.libs:
      [zip] Updating zip: /Users/[user]/[path to dir]/tideploygate/dist/local.twingob.android.tideploygate-android-0.1.zip

zip.metadata:

post.dist:

BUILD SUCCESSFUL

distディレクトリ以下にできたzipファイルlocal.twingob.android.tideploygate-android-0.1.zipをTitanium Mobileプロジェクト直下にコピーします。

tiapp.xmlの修正

moduleの指定を追加します。リモートLogCatを利用する場合は、<uses-permission android:name="android.permission.READ_LOGS" />も記載します。

実際には、Distributeビルド(リリースビルド)の際、これらの記載は削除し、module自体もビルドに含めないように、別途ビルドスクリプトを作成しています。

さいごに

DeployGateとTitanium Mobileの組み合わせは、開発をさらに加速できそうですよね!今後は@astronaughtsさんに使い倒してもらいますw