SAITOUの書きなぐりメモ

さいとーの趣味と生活を垂れ流しています。

Android NDK

先に、Android NDKについていまいちわかってない人が書くんで情報が間違ってたらごめんなさい。
と、言うわけでWindows環境でAndroid NDKを動かしてみたのでそれのレポートみたいなのを書きたいと思います。

まず、Android NDKって何ができる?って話なのですが、早い話CとかC++で書いたコードを使えるようにできます。

それ自体はNDKじゃなくてどうもJNIって物があるようなのですがこっちに関してはそういうインターフェースがあります程度に今回は触れておきます。
この記事で書きたいのはWindows上でAndroid NDKを動かす方法です。
僕のわかりにくい日本語を読むよりGoogleのドキュメント読んだほうが正確でわかりやすいかもなのでリンクはっておきます。
http://developer.android.com/sdk/ndk/index.html


Androidの開発環境構築に関しては以前に書いた気がする(Xperia向けアプリを作る)ので省略
新たに準備しなければいけないものは2つ。

Android NDK (http://developer.android.com/sdk/ndk/index.html)
Cygwin (http://cygwin.com/)


上は当然わかると思うのですがCygwinってのはなんだろなーって人。
ざっくり言うとWindows上でUnixを体験できるツールだと思ってください。
Cで書いたコードをコンパイルする際にmakeというコマンドを使うのですがWindowsではmakeコマンドがないので
このツールを使います。
インストール方法はこちらに丁寧に書かれていたので引用
http://d.hatena.ne.jp/bs-android/20090707/1246952991

ほとんどこの上の記事で解決しちゃうんですが(ぁw
なぜ今回記事を書こうかと思ったかというと。
Android NDK r5からいろいろ変わったみたいで、自分がうまくできなかったからですw
ついでに、一番最初に参考にしてたサイトのURLはこちら
http://labs.techfirm.co.jp/android/iguchi/1782


Cygwinをインストールできたら上に張ったURLを参考にCのソースとメイクファイルを作ります。
ただ、r5から(?)host-setup.shってのがなくなってるのでそれは無視してもらってかまいません。

あと、jniの中に
calculate.c
Android.mk
Application.mk
を書いてください。

calculate.cに書く関数名ですがあれは
jstring Java_+ パッケージ名 + Javaのクラス名 + つけたい関数名( JNIEnv* env, jobject thiz )
みたいです。間の.を_に変えて書きます。

そして一番違うのがコンパイル方法です。

ドキュメントの翻訳を見てみると

1。 <プロジェクト> / jniの下で、あなたのネイティブソースをプレイス/ ...
2。作成は、/ jniは/ Android.mkは、システムを構築するNDKして、あなたのネイティブソースを記述するために
3。オプションは:/ Application.mk / jniの<プロジェクトを作成します。
4。プロジェクトのディレクトリからスクリプトを'ndk -ビルド'を実行してビルドして、ネイティブコード。これは、トップレベルNDKのディレクトリに格納されて:

CDの<プロジェクト>
/ ndk - buildの

ツールは、アプリケーションのプロジェクトディレクトリ内の適切な場所にアプリケーションで必要な最低限の、共有ライブラリをコピーしてビルドします。
5。最後に、通常の方法でSDKツールを使用してアプリケーションをコンパイルしてください。 SDKツールは、アプリケーションのデプロイ。apkファイルの共有ライブラリをパッケージ化するビルドします。


1〜3はメイクファイルとディレクトリ構成の話。
最後の5はいつもどおりに実行すればいいよーみたいなかんじ。

んで、4ですがここがコンパイルについての記載です。
英語の原文を見ると「はは〜ん」となる方も多いと思いますが
まず、Cygwinを起動してディレクトリを移動して今回作成したプロジェクトフォルダまでいきます。
僕の場合

cd /cygdrive/c/user/workspace/test/

そしたらいよいよコンパイルするコマンド
NDKの中にある /ndk-build これを実行しましょう。
僕の場合

/cygdrive/c/cygwin/home/sai/android-ndk-r5/ndk-build


これがうまく出来たらlibcalculate.soってファイルがEclipse内でも確認できるはずです。
(F5などを押してリフレッシュするとでてくる)
これでうまくいくといいですね!!



ついでに僕はずっとvisual studioを使っていて久々にメイクファイル書いたのですが
打ち間違いをしていて、libcalculate.soは作られるのにうまくいきませんでした。
メイクファイル内にバグがあるとみつけるのが面倒かもです、書くときは気をつけましょう。