AndroidBK再び

※このサイトは、@astronaughtsさんの企画された「Titanium Advent Calendar 2011」向けに書きました。

こんばんは!@twingobです!
みなさん、さきほどまで「TiPartyOsaka2011 - Titanium Mobile忘年会2011 in 大阪」おつかれさまでした!
いやー、@astronaughtsさん、幸せそうでしたねー!

AndroidBKネタ、いかせていただきます!

私みたいに、会社の都合等で、gitが使えずにSVN使っている方いますよね。
なんと、TitaniumStudioにて、SVNチェックアウトしたAndroid用プロジェクトを、RunやDistributeしようとすると、失敗しちゃいます><。
画像の生成のところで失敗しているみたいですね><。
[ERROR] Exception occured while building Android project:
[ERROR] Traceback (most recent call last):
[ERROR]   File "/Library/Application Support/Titanium/mobilesdk/osx/1.7.5/android/builder.py", line 1977, in <module>
[ERROR]     s.build_and_run(True, avd_id, device_args=device_args)
[ERROR]   File "/Library/Application Support/Titanium/mobilesdk/osx/1.7.5/android/builder.py", line 1742, in build_and_run
[ERROR]     self.resource_drawables_changed = self.copy_resource_drawables()
[ERROR]   File "/Library/Application Support/Titanium/mobilesdk/osx/1.7.5/android/builder.py", line 565, in copy_resource_drawables
[ERROR]     copy_resource_drawable(f)
[ERROR]   File "/Library/Application Support/Titanium/mobilesdk/osx/1.7.5/android/builder.py", line 540, in copy_resource_drawable
[ERROR]     shutil.copy(orig, dest)
[ERROR]   File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/shutil.py", line 85, in copy
[ERROR]     copyfile(src, dst)
[ERROR]   File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/shutil.py", line 52, in copyfile
[ERROR]     fdst = open(dst, 'wb')
[ERROR] IOError: [Errno 2] No such file or directory: '/Users/twingob/workspace/Titanium-Android/build/android/res/drawable-hdpi/_072591d3d6.svn/entries'

これ、現状最新リリースのSDK1.7.5でも同様ですねえ。
Runする場合は、2回実行すると回避できたりしますが、Distributeはだめですね。。

そこで、svnコマンドでexportしたあと、ビルド用のpythonスクリプトbuilder.pyを直接実行して、エラーを回避しています。
コマンドのヘルプは下記のようになっています。MacのTerminalで実行した例です。
$ /Library/Application\ Support/Titanium/mobilesdk/osx/1.7.5/android/builder.py
builder.py <command> <project_name> <sdk_dir> <project_dir> <app_id> [key] [password] [alias] [dir] [avdid] [avdsdk]

available commands: 

  emulator      build and run the emulator
  simulator     build and run the app on the simulator
  install       build and install the app on the device
  distribute    build final distribution package for upload to marketplace
  run           build and run the project using values from tiapp.xml
  run-emulator  run the emulator with a default AVD ID and skin

毎回、手動でsvn exportとbuilder.pyを実行するのも面倒ですので、.bash_profileや.zshrcにaliasを設定して、コマンド一発で実行できるようにしています。
aliasの例を書きますねー!
builder.pyのオプションはTitaniumStudioでRunやDistributeした時のConsoleログを見ると、参考になると思います!
# for AndroidSDK
export ANDROID_SDK=/Applications/android-sdk-mac_x86
export PATH=$ANDROID_SDK/tools:$PATH

# for Titanium Mobile SDK
export TI_ANDROID_PJ_NAME=Titanium-Android
export TI_ANDROID_PJ_DIR=~/workspace/Titanium-Android
export TI_ANDROID_APPID=local.twingob.titaniumandroid
export TI_ANDROID_AVDSDK=8
export TI_ANDROID_KEYSTORE=$TI_ANDROID_SRC_DIR/android.keystore
export TI_ANDROID_KEYPASS=hogehoge
export TI_ANDROID_BUILD_DIR=~/Desktop/Titanium-Android
export TI_ANDROID_DISTRIBUTE_OUT_DIR=~/Desktop

alias titanium_builder='/Library/Application\ Support/Titanium/mobilesdk/osx/1.7.5/android/builder.py'
alias ti_android_svn_export='rm -rf $TI_ANDROID_PJ_DIR/build/android;rm -rf $TI_ANDROID_BUILD_DIR/Resources;svn export --force $TI_ANDROID_PJ_DIR $TI_ANDROID_BUILD_DIR'
alias ti_android_install='ti_android_svn_export;titanium_builder install $TI_ANDROID_PJ_NAME $ANDROID_SDK $TI_ANDROID_BUILD_DIR $TI_ANDROID_APPID $TI_ANDROID_AVDSDK'
alias ti_android_distribute='ti_android_svn_export;titanium_builder distribute $TI_ANDROID_PJ_NAME $ANDROID_SDK $TI_ANDROID_BUILD_DIR $TI_ANDROID_APPID $TI_ANDROID_BUILD_DIR/android.keystore $TI_ANDROID_KEYPASS $TI_ANDROID_PJ_NAME $TI_ANDROID_DISTRIBUTE_OUT_DIR $TI_ANDROID_AVDSDK'

実行するときは、Terminalでこんな感じで実行します!
Run:Android実機へのインストール
ti_android_install

Distribute:apkの作成
ti_android_distribute

以上です!

TitaniumMobile SDK1.8のRCがきちゃいましたねえ。これはV8対応のBKを年末年始にためるしか!

明日は、@chris4403さんです!よろしくおねがいしますー!