T

AndroidのDistribute用ビルドでコンパイルエラー

Titanium MobileでAndroidアプリを作成し、実機テストも終わってさあいよいよだとDistribute用ビルドを作成したときのこと。1.8にはJSファイルを読めないようにコンパイルする処理があります。Distribute用ビルド以外はこのコンパイル作業は実行されないのですが、実機での動作確認まで終わった開発用のビルドでは問題なかったソースコードがこのコンパイル時にエラーでビルドに失敗するではありませんか。いくつかのエラーは、例えば同じプロパティが複数回同時に宣言されているだとか、エラーメッセージを読めばわかるものだったのですが、最後に残ったエラーはただの例外でしかないので何が起きているのかさっぱりわかりません。

//例えばこんなエラー
[ERROR] unrecognized error encountered: " % se

そこで、コンパイルが止まるJSファイルをいったん空のファイルにすると、今度はビルドは通りました。なるほど、ビルドスクリプトがこのJSファイルをうまく処理できないに違いありません。そこでえっちらおっちら手動バイナリサーチです。400行のJSファイルをまずは200行で区切って再度コンパイルします。といってもシンタックスエラーになってはダメなので、最低限文法だけは合っている(実行時エラーが起きても問題ありません)ファイルを作る必要がありますから210行とかちょっと半端になります。これでビルドが通れば消した200行の中に問題の部分があり、そうでなければ残っている200行に問題がある。後者だったので、今度はその200行を100行で切って文法的に正しくなるよう整形してまたコンパイル、今度は50行にして、と続けて四回目であれ?と気になって試してみたらビンゴでした。

いいですか?心を落ち着けて、よく見てください。これが、ビルドを阻んでいた問題のコードです:

var form_data = {};

…え?

驚かれましたか?そうなんです。これなんですよ。ぶっちゃけていえば、ビルドスクリプトの正規表現がおかしいとしか思えない(どうやらトークンにパースしてどうこうみたいな処理じゃなくて単純に正規表現で実装されてるっぽいんです)のですが、これを

var form_data = new Object();

にすれば直ります。ここで冒頭の画像に戻ります。

Posted by on 4月 13, 2012 in Android, Titanium

コメントを残す