TitaniumでAndroidのbuildファイルをEclipseにimportする方法

ちょっとした理由があり、Titaniumで生成したAndroidのビルドファイルを直接Eclipseで開く必要があったのですが、コレも中々情報が見当たらず。。Titaniumはプッシュ通知の実装も含め、Android対応が微妙なんですよね…以下で解決したので共有します。

How to import titanium project into eclipse to test as a normal android application?

Python入ってれば話が早い!ti_eclipsify.py

⇡の書き込みに書いてある、tidevtoolsというありがたいツールの中にあるti_eclipsify.pyを使わせて頂く方法。執筆時点のTitaniumバージョンは3.2.0ですが問題はありませんでした。Pythonのインストール等は別のサイト等で調べて済ませてください。

環境の構築が手間じゃなければ無難な方法だと思います。ひとまずdebugとかしてandroidのbuildファイルを生成しておいてください。ここから、

  • ti_eclipsify.py
  • ticommon.py
  • tidevtools_settings.py

の3つをTitaniumプロジェクトのroot(tiapp.xmlとかあるところ)に置きましょう。続いて、tidevtools_settings.pyを開き以下のようにします。ただここはかなり自信が無いので、もしかしたら適切に設定することで以降の作業を短縮できるかもしれません。

PROJECT_ID_PREFIX = 'com.billdawson.'//(適当でいいかも)
PROJECT_FOLDER = '/Users/****/Documents/Titanium_Studio_Workspace/projectName'
PUBLISHER = '(適当でいいかも)'
PUBLISHER_URL = '(適当でいいかも)'
DISABLE_ANALYTICS = True
ENABLE_ANDROID_DEBUG = True
EXEC_AT_END = ['mvim', '--cmd', 'cd %project_folder%', '-c', 'NERDTree']
ECLIPSE_PROJ_BOOTSTRAP_PATH = '/Users/****/Documents/Titanium_Studio_Workspace/shuwapp/'
TIMOBILE_SRC = '/Users/****/Library/Application Support/Titanium/mobilesdk/osx/X.X.X.GA/android/'

あとはターミナルから

Python ti_eclipsify.py

とコマンド叩けばOK!かと思ったのですが設定が雑すぎたのか(笑)、エラーが出てしまったので取り急ぎ113行目付近の以下を削除

sys.path.append(os.path.join(TIMOBILE_SRC, "support", "android"))
from tilogger import *
log = TiLogger(None, level=TiLogger.INFO)

これでTitanium側は終了。ネイティブモジュールがある場合、jarファイルを/lib/に入れておく等しておいてください。続いて /build/android/.classpath を書き換えます。いくつか足りないのがあったので以下のように。

  • propertiesからAndroidでbuildtargetをTitaniumにあわせる
  • titorder and Exportのチェックをクラスパスを指定したjar全てつける
  • アイコン差し替える
  • srcからマニュフェスト消してgenもけす(genは自動生成ファイルなので
  • Project.propertiesをさしかえる
    AssetCryptImplのTiVerifyが書いてあるtry3つけすかも

実際にインストールする場合

マニュヘストの android:debuggable=”true”をごとけす

これでTitanium側は終了です。次にTitanium本体のソースを持って来ます。ダウンロードするブランチのバージョンはお使いのTitaniumに合わせたほうが良い気がします。
例:https://github.com/appcelerator/titanium_mobile/tree/3_2_X

ダウンロードしたら、EclipseのFile→Import→Existing Projects into Workspace→Select root directioryから、ダウンロードしたtitanium_mobile_X_X_X/android/を指定してインポートします。Package Explorerにもろもろインポートされますが、自分の環境だとエラーだらけ…。とりあえず雑に対応した内容を列挙すると、

「annotations.jarが存在しないよ!」みたいなエラーが多発

取り急ぎSDKのバージョンをアップデート(Android SDK Managerより)

###「genが無いよ」みたいなエラー

genディレクトリを手動で作成

「/titanium-dist/lib/kroll-apt.jarが無い」みたいなエラー

Titanium SDK(/Users/****/Library/Application Support/Titanium/mobilesdk/osx/X.X.X.GA/android/)の中にあるkroll-apt.jarを持ってきてパスを合わせる(自分は面倒だったのでrootに直接置きました

###「Android_NDKがありません」みたいなエラー

~/.bash_profileからNDKのパスを「ANDROID_NDK」にしても何故か発生したので、取り急ぎエラーの出ているndk-build.shの上の方に以下を追加することでとりあえずうまく行きました。

ANDROID_NDK="NDKのパス"
ANDROID_SDK="SDKのパス"

※「Android.mk:v8: LOCAL_SRC_FILES points to a missing file」みたいなエラーが出た場合はNDKのバージョンや種類がおかしい可能性があるので、詳しくは分かりませんがdarwin-x86対応しているNDKを選んだほうが良さそう?らしいです。何か分かり次第追記します。

「”The type java.lang.Object cannot be resolved. It is indirectly referenced from required class files”」みたいなエラー

右クリック→properties→Libraryタブ→Add Library→JRE System Library ちなみに同じくproperties→AndroidからProject build targetでAndroid4.1.2(自分の環境では)にチェックをつけておくこと

The project cannot be built until build path errors are resolved

ググって出てくる解決方法がどれもダメだったのですが、srcの中のManifest.javaを消したら治ったかも。genは毎回消さないとダメ

Androidネイティブモジュールを入れている場合

order and Export のチェックをつけておく。kroll〜は除外

lsLibraryのチェックは外しておく(project.propertiesのandroid.library=という項目はなし)。genのなかにファイルがたくさんできれいればOK。しかしRunからだと3.2.0のバグで動かない可能性があるためapkファイルをbuildして対応する。Androidマニュフェストのandroid:debuggable=”true”は削除しておく