DRYスマートフォン用の表示で見るDRYWeb関連の技術の事、食事/お酒の事、旅行の事などこの広告は、90日以上更新していないブログに表示しています。2011-08-03EclipseCDTとandroid-ndk-r6のJNIをプロジェクト統合する方法AndroidTweet別に結果としてやらなくても良かった気がしますが、まあ1つのAndroidアプリとしてJNIも梱包した形が理想なのでEclipseも統合しておこうかなと。HeliosCygwinandroid-ndk-r6とりあえず、JNI作ってndk-buildで単体では動いている事とCDTはインストール済みと言う事を前提とします。そちらのやり方は以前のエントリを見て下さい。プロジェクトの原型です(新たに今回用に「IntegrateJni」というプロジェクトを作りました)現状は単なるAndroidプロジェクトです。JavaとJNIでそれぞれ100000000回ループを入れて、掛かった時間を計測しLog.dするという単純なものです。それぞれのファイルの中身は以下のようになっています。Project」します。Project」を選択し次へ進みます。すると「C/C++プロジェクトの変換」ダイアログが出るので、「プロジェクトタイプをMakefileプロジェクト」に、「ツールチェーンを他のルーツチェーン」に指定して完了します。パークティブを開いてOKを押すと、下記のような画面に戻ります。ここで、ビルドに必要な「libs」と「obj」フォルダをsrcなどと同じ階層に作っておきます。(ndk-buildしても構いません。存在している場合もあると思います。)プロジェクトを右クリックしてプロパティを見ると、きちんと「C/C++ビルド」と「C/C++一般」が追加されている事を確認します。「C/C++一般」⇒「パス及びシンボル」⇒「インクルード」タブにてインクルードディレクトリを指定してあげます。※今回は無駄にC++にしたので「GNUC++」の設定になります。私のNDKのルートは前回のOpenSSLのエントリ時にC:\ndkになっているので、こちらに通します。C:\ndk\platforms\android-8\arch-arm\usr\include※各AndroidAPIに見合ったincludeファイルを指定して下さい。「ソースロケーション」タブではJNIのファイルがある「jni」フォルダを指定して下さい。「出力ロケーション」タブでは「libs」「obj」の二つを指定して下さい。これで「適用」ボタンを押すと、リビルドしますか?的なダイアログが出ますが、これはNOで終わらせて下さい。次に「C/C++ビルド」⇒「環境」にPATHを付け足します。名前を「PATH」で入れて下さい。するとこういう設定になっているはずです。最後に「ビルダー」の設定をします。Cygwinで行っている場合、これがミソになると思います。プロジェクトを右クリックして「ビルダー」を選択します。「新規」ボタンを押下し、「プログラム」を選択します。名前は私は「NDKBuilder」としました。ロケーションに「ファイル・システムの参照」ボタンより「Cygwinのbash.exe」を指定します。作業ディレクトリーは「ワークスペースの参照」ボタンより今回のプロジェクトを指定します。引数に実際に起動させたいNDKのコマンドを打ち込みます。※実はこの後gdbを使ってJNIのデバックがしたいので、「NDK_DEBUG=1」を先に指定しておきます。オプションを入れておかないとgdbが立ち上がらないので。これで「ビルダー」の設定は終わりで、後は「C/C++ビルド」の「ビルダー設定」タブの「デフォルト・ビルド・コマンドを使用」のチェックを外し、「ビルド・コマンド」を空にします。これで設定はすべて終わりです。「適用」ボタンを押してプロジェクト右クリックから「Androidアプリ」を開始してみて下さい。ちなみに、Eclipseのメイン画面に戻ってきたら、自動でコンパイルが始まって下記のように「libs」と「obj」フォルダに.soファイルなどが出来ているはずです。後はブレークポイントを張って貰ってもよし、DDMSの画面を開いてしばらく待って貰っても良しですが結果が得られるはずです。JNIの方が速いですね。最後ですが、今回はこちらのサイトを、若干EclipseやNDKのバージョンが違ったりしますがかなり活用させて頂きました。勝手ならがリンクさせて頂きます。(3)月別アーカイブはてなブログをはじめよう!ke-16さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。