titanium_mobile

 


ハマったポイント2 Android NDK

前回(その1)でNDKのバージョンが最新である事が原因かもしれない疑惑が出てきたので、その線で調べる事にしました。

初めに参考にした、Android Module Development Guide – Documentation & Guides – Appcelerator Wikiの中「Requirements」には、何故かNDKの事について全く触れられていません。

丁寧にPythonやJDKの事まで書いてあるのに・・・もしかしたら、NDKは本来要らない子で、たまたま自分がインストール済みだからそれが邪魔をしているのか・・・?とかいう妄想に駆られ一旦削除してみてビルドを試したり、どうせならクリーンに再インストール、で会社の細い回線でダウンロード待ち時間をロスしたり・・・。

また、Titanium Compatibility Matrixでも、NDKについては触れられていませんので、何を入れたら良いかの情報がありません。

そもそもAndroidモジュールの開発には Android NDK が必須なのか?たったそれだけの事が判りません。

だいぶ後に判った事ですが、正解は別の場所、インストールについての説明に書いてありました。

Installing the Android NDK

さらっと。こんなふうに。必須かどうかは微妙な書き方だけど、確かにrequiredと書いています。

The Android NDK is required to build native modules for Android

Android NDKなんて普通にJavaでAndroid書いてる人でも知らない方がいるという位なのに、なんでしょうこの入ってて当たり前でしょ感は。

SDKはともかくJDKでさえ丁寧にいるいる書いてあるのに・・・

情報が錯綜しているので自信は無いですけど、自分がたどり着いた結論としては、「Android NDKは必須」「でも最新のNDK r9ではダメ。少し前の前のr8bで」です。

Vanilla Android Module Build Fails

[#TIMOB-15263] Android: Titanium SDK and Modules will not compile with (latest) Android NDK r9

※2013-12-14追記 SKD3.2.0で解決された様です

※2013-12-25追記 3.2.0GAでr9c試しましたが再現したのでr8bで運用してます

isis re-direct: NDK r8e でTitanium Mobile Android Module がビルドできない

私の場合Macですが、Macに限った話では無くて64bit版OS共通の不具合なのかもしれません。

早速リンクから手繰って、Android NDK r8bをインストールしました。

設定方法はいくつかありますが、モジュールプロジェクト直下のbuild.propertiesに書くか、

android.ndk=/Users/YOUR_NAME/android-ndk-r8b

~/.bash_profile 等で環境変数を書くかです。私はコチラにしましたが、Titanium Studio でantタスクを走らせるには上じゃないとダメっぽいです。

vi ~/.bash_profile

# for Titanium Andorid Module

export ANDROID_SDK=/Users/YOUR_NAME/android-sdk-macosx

export ANDROID_NDK=/Users/YOUR_NAME/android-ndk-r8b

alias titaniumpy=”~/Library/Application\ Support/Titanium/mobilesdk/osx/3.1.3.GA/titanium.py”

これでようやく、ant タスクが SUCCESSSFUL!になるようになりました。

antでエミュレータを起動しようとすると、

ant run.emulator

こんどはこんなエラーが出ます。

run.emulator:

[exec] Traceback (most recent call last):

[exec] File “/Users/YOUR_NAME/Library/Application Support/Titanium/mobilesdk/osx/3.1.2.GA/module/builder.py”, line 255, in

[exec] main(sys.argv)

[exec] File “/Users/YOUR_NAME/Library/Application Support/Titanium/mobilesdk/osx/3.1.2.GA/module/builder.py”, line 188, in main

[exec] manifest = Manifest(os.path.join(project_dir, ‘manifest’))

[exec] File “/Users/YOUR_NAME/Library/Application Support/Titanium/mobilesdk/osx/3.1.2.GA/manifest.py”, line 11, in \__init__

[exec] f = open(data, ‘r’)

[exec] IOError: [Errno 2] No such file or directory: ‘/Users/YOUR_NAME/android-sdk-macosx/manifest’

これについては、titanium.pyのバグの様です。3.1.2も、最新の3.1.3も同様でした。

[#TIMOB-13368] Android emulator cannot be launched using titanium.py – Appcelerator JIRA

titanium.pyを直接編集して回避します。

注意点として、インデントはスペースだとエラーになります。タブじゃ無いとダメです。

vi ~/Library/Application\ Support/Titanium/mobilesdk/osx/3.1.3.GA/titanium.py

#————-

def emulator_args(args, script, project_dir, platform):

if platform == ‘android’:

return [script, ‘run-emulator’, ‘android’, project_dir, get_android_sdk(args)]

#————-

その3に続く

 


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

勝手/全/超訳 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