(2011-06-07 21:29:06追記)この記事で書かれている現象はTitanium Mobile SDK 1.7で修正されます。しかも、予測とは違う仕様になったので、この記事に書かれているサンプルコードは動かなくなります。詳しくはTi.includeの不具合が1.7で修正される模様 – もぎゃろぐを見てくださいませ。
(追記終わり)
TitaniumMobileでとっても困っていることが一つあって、Ti.include(‘lib/a.js’) って書いた時、iPhoneだと Resources/lib/a.js を見に行ってくれるんだけど、Androidだと Resources/lib/lib/a.js を見に行ってしまう。
かなり困る問題なのに1.6.0でも直らないそうで、みんな困った末にこんな黒魔術が発見されました。
以下のように指定するとどの場所にあるファイルでTi.includeしても確実にファイルをインクルードできる。
Ti.include(“../../../../../../../../../lib/bookmark.js”)
TitaniumのインクルードパスをResourcesからの相対パスで指定する方法 | ひげろぐ
さすがにこれはちょっと(汗) ひげろぐの人が考えた訳じゃないし、考えた人だって困った末に編み出したのだとは思いますが、なんか鼻から悪魔とか出てきそうでムズムズします。
いろいろ試した末にたどり着いた別案。
var path_lib = 'lib/'; if (Ti.Platform==null || Ti.Platform.osname=='android'){ path_lib = ''; } Ti.include(path_lib+'a.js');
Ti.Platformを確認しているのは、Android環境でTi.Platform環境がnullになることがあるから。
Appcelerator Developer Center – continuous 1.5.0 on android … ti.Platform.name crash
黒魔術よりはすっきりすると思うのですが、将来的に不具合が修正されたり、Andoirod以外の環境が出てきた場合にはコードを修正しないといけなくなる可能性が高いので、これはこれで問題があります。なんかもっといい案があればぜひ教えてください。