EclipseからAndroid NDKサンプルプロジェクトをビルドして実行 (Windows)
Eclipse から Android NDK サンプルプロジェクトをビルドして実行する。
cygwin1.dll にパスを通す
パスを通す方法はいろいろ
- 環境変数 PATH に C:\cygwin\bin を追加する。
- 最も一般的な方法。
- シンボリックリンク(ジャンクション)を作成する。
- 環境変数を汚したくない人はこちらで。
- C:\cygwin\bin\cygwin1.dll を C:\windows\system32 にコピーする。
- やっちゃダメ。cygwin のバージョンが上がるたびにコピーする羽目になる。
Vista/7 の場合
C:\windows\system32 に C:\cygwin\bin\cygwin1.dll の シンボリックリンクを作成する。
コマンドプロンプトを右クリック→[管理者として実行]
C:\windows\system32> mklink -d C:\cygwin\bin\cygwin1.dll
XP の場合
ジャンクションを作成する。
Android NDK をインストール
http://developer.android.com/tools/sdk/ndk/index.html
ダウンロードしたファイルは「android-ndk-r8c-windows.zip」
任意のフォルダに解凍する。
以下、C:\ に解凍したこととする。
必要に応じて、android-ndk にリネームする。
http://developer.android.com/tools/sdk/ndk/index.html#Installing
You can rename the NDK directory if necessary and you can move it to any location on your computer.
必要に応じて、環境変数 PATH に C:\android-ndk を追加する。
環境変数 PATH に追加しなくても、常に完全パス指定すればちゃんと動く。
Android NDK サンプルのビルドテスト
ここまでの確認を兼ねて、Android NDK サンプルのビルドテストする。
C:\android-ndk\samples\bitmap-plasma を任意のフォルダにコピーして、
ビルドしてみる。
C:\workspace\bitmap-plasma>C:\Android-ndk\nkd-build Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver Gdbsetup : libs/armeabi/gdb.setup Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi-v7a/gdbserver Gdbsetup : libs/armeabi-v7a/gdb.setup "Compile thumb : plasma <= plasma.c SharedLibrary : libplasma.so Install : libplasma.so => libs/armeabi/libplasma.so "Compile thumb : plasma <= plasma.c SharedLibrary : libplasma.so Install : libplasma.so => libs/armeabi-v7a/libplasma.so C:\workspace\bitmap-plasma>C:\Android-ndk\nkd-build clean Clean: plasma [armeabi] Clean: stdc++ [armeabi] Clean: plasma [armeabi-v7a] Clean: stdc++ [armeabi-v7a] C:\workspace\bitmap-plasma>
ちゃんとビルド&クリーンできている模様。
Android SDK Tools をアップデート
ADT NDK Plugins を使うには、Android SDK Tools を 20.0.3 にアップデートしなければならないらしい。
アップデートされていない場合は、インストール後に警告ダイアログが表示される。
Eclipse に ADT NDK Plugins をインストール
[Help]→[Install New Software...]
Work with: https://dl-ssl.google.com/android/eclipse
- Developer Tools
- NDK Plugins
インストール後、Eclipse を再起動。
ADT NDK Plugins に NDK のパスを設定
[Window]→[Preferences]
これで Eclipse の設定は完了。
Eclipse から Android NDK サンプルプロジェクトをビルド
Select a wizard
Package Explorer→[New]→[Project...]
[Next >]
Import Projects
Root Directory: C:\android-ndk\samples\bitmap-plasma
- [Copy projects into workspace]
[Finish]
Package Explorer→[bitmap-plasma]→[Android Tools]→[Add Native Support...]
Library Name: lib[BitmapPlasma].so
[Finish]
Android 端末を USB 接続して、デバッグ実行してみたら動いた。
C/C++ のソースファイルにブレークポイント設定しても止まらない。。
http://developer.android.com/tools/sdk/ndk/index.html
GNU Debugger-specific fixes:
たくさんリリースされてるから、デバッグできるはず。
時間あるときに調べる。
エラー解決
多くの人が最初に動かすであろうサンプルプロジェクト hello-jni を同じ手順で試すと、エラーが出てしまう。解決したので記念パピコ。
最初に出たエラーはこんなの:
C:/android-ndk-r8c/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-9 is larger than android:minSdkVersion 3 in ./AndroidManifest.xml
なぜか WARNING なのにエラーになる。
Android SDK Manager からインストールされている SDK のバージョンが minSdkVersion に定義されているバージョンより大きいよ!というエラーっぽい。
minSdkVersion なのだから、大きくても問題ないだろうに。
めんどくさいから AndroidManifest.xml から minSdkVersion を消しちゃえーとか勢いに任せてしまうと、もっと奥深いエラーが出て困ったことになる。
C:/android-ndk-r8c/build/gmsl/__gmsl:512: *** non-numeric second argument to `wordlist' function: ''. Stop.
Stack Overflow や Google Groups には、NDK の内部ファイルをエディットしろだのと、なんだか怖いことが書いてあるけど、常識的に考えて、そんなことしちゃダメw
自分の環境に合わせて minSdkVersion を定義すると解決する。
u gotta try this:
AndroidManifest.xml
<!-- <uses-sdk android:minSdkVersion="3" /> --> <uses-sdk android:minSdkVersion="9" />
エラーなく実行できた。