EclipseからAndroid NDKサンプルプロジェクトをビルドして実行 (Windows)

Eclipse から Android NDK サンプルプロジェクトをビルドして実行する。

前提

Eclipse INDIGO (3.7) から Android SDK サンプルプロジェクトのビルドと実行ができること。

Cygwin をインストール

http://www.cygwin.com/

cygwin1.dllのバージョンは「1.7.17-1」


コンパイラGNU makeも一緒にインストール。

  • Devel
    • gcc-core: C compiler
    • gcc-g++: C++ compiler
    • gdb: The GNU Debugger
    • make: The GNU version of the 'make' utility


以下、C:cygwin にインストールしたこととする。

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" />

エラーなく実行できた。