titanium_mobile

前々回(その1)と、前回(その2)で、NDKのバージョンをr8bにし、ようやくant のビルドが通る様になり、エミュレータも起動しました。

 


ハマったポイント3 そもそも名前が・・・

ant run.emulator

して

ant run

すると、ようやくエミュレータでの起動が出来ましたが、起動すぐにコケてしまいます。

ログはこんな感じです。

[WARN][dalvikvm( 1431)] No implementation found for native Lcom/tdtsh/android_test_module/AndroidTestModuleBootstrap;.nativeBootstrap:()V

[WARN][dalvikvm( 1431)] threadid=11: thread exiting with uncaught exception (group=0x41465700)

[ERROR][TiApplication( 1431)] (KrollRuntimeThread) [1471,1603] Sending event: exception on thread: KrollRuntimeThread msg:java.lang.UnsatisfiedLinkError: Native method not found: com.tdtsh.android_test_module.AndroidTestModuleBootstrap.nativeBootstrap:()V; Titanium 3.1.3,2013/09/18 12:01,222f4d1

[ERROR][TiApplication( 1431)] java.lang.UnsatisfiedLinkError: Native method not found: com.tdtsh.android_test_module.AndroidTestModuleBootstrap.nativeBootstrap:()V

[ERROR][TiApplication( 1431)] at com.tdtsh.android_test_module.AndroidTestModuleBootstrap.nativeBootstrap(Native Method)

[ERROR][TiApplication( 1431)] at com.tdtsh.android_test_module.AndroidTestModuleBootstrap.bootstrap(AndroidTestModuleBootstrap.java:17)

[ERROR][TiApplication( 1431)] at org.appcelerator.kroll.runtime.v8.V8Runtime.loadExternalModules(V8Runtime.java:122)

[ERROR][TiApplication( 1431)] at org.appcelerator.kroll.runtime.v8.V8Runtime.initRuntime(V8Runtime.java:81)

[ERROR][TiApplication( 1431)] at org.appcelerator.kroll.KrollRuntime.doInit(KrollRuntime.java:175)

[ERROR][TiApplication( 1431)] at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:109)

[ERROR][AndroidRuntime( 1431)] FATAL EXCEPTION: KrollRuntimeThread

[ERROR][AndroidRuntime( 1431)] java.lang.UnsatisfiedLinkError: Native method not found: com.tdtsh.android_test_module.AndroidTestModuleBootstrap.nativeBootstrap:()V

[ERROR][AndroidRuntime( 1431)] at com.tdtsh.android_test_module.AndroidTestModuleBootstrap.nativeBootstrap(Native Method)

[ERROR][AndroidRuntime( 1431)] at com.tdtsh.android_test_module.AndroidTestModuleBootstrap.bootstrap(AndroidTestModuleBootstrap.java:17)

[ERROR][AndroidRuntime( 1431)] at org.appcelerator.kroll.runtime.v8.V8Runtime.loadExternalModules(V8Runtime.java:122)

[ERROR][AndroidRuntime( 1431)] at org.appcelerator.kroll.runtime.v8.V8Runtime.initRuntime(V8Runtime.java:81)

[ERROR][AndroidRuntime( 1431)] at org.appcelerator.kroll.KrollRuntime.doInit(KrollRuntime.java:175)

[ERROR][AndroidRuntime( 1431)] at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:109)

ここからも手がかりゼロでかなりの時間を無駄にしました。

結果的には、モジュール名やIDに、アンダースコアーが混じっていた事が原因でした。

iOSモジュールの方はスネークケースで全く問題が無かったので、大丈夫と思い込んでいました。

よく考えたら、NDK内部でパッケージ名をアンダースコア区切りにして表現する訳ですからダメでしょう。

それからキャメルケースにしてみたんですが、javaのパッケージ名に大文字入って気持ちわるいので、結局小文字オンリーにしました。

アンダースコア無しで全部小文字が無難だと思います。

あと後で判ったけど、CLIでやる方法よりも、GUI (Titanium Studio) でやる方がなんか楽そうです。

How to create an Android Module for a Titanium Mobile App– Part 1

ここまで辿り着くのに、3日程ロスしました。

ただこれだけ優れた製品を無償で使わせて頂いているのだから、互換性や環境に起因する不具合についてはユーザが自力で助け合うのが筋ですが、主に英語サイトからって事になります。

お仕事でTitanium Mobileを使い、かつモジュールをバンバン使う予定がある場合は、素直に有償サポートを受ける事をお勧めします。

この後も何点かハマったので、気が向いたら続き書きます。

続きを書きました。

 


参考にさせて頂いたサイト

Extending Titanium with native iOS and Android modules

How to create an Android Module for a Titanium Mobile App– Part 1

勝手/全/超訳 Titanium Mobile Module Developer Guide for Android

Android Module Development Guide – Documentation & Guides – Appcelerator Wiki

Titanium Compatibility Matrix – Titanium 3.X – Appcelerator Docs

Overview (Titanium Android Java API)

TitaniumのAndroid用モジュールを作る その1- しそメモ(Titanium/Android/Ruby)

Issue Navigator – Appcelerator JIRA

Community Questions & Answers – Appcelerator Developer Center