Windows で Android NDK を使ってみる
このページでは,次のことを行う.
- Android NDK のダウンロードとインストール
- Eclipse に,C/C++ 開発ツール,C/C++ 開発ツール SDK, C/C++ ライブラリ API ドキュメント・ホーバー・ヘルプのインストール
- Eclipse で Android NDK に同封のサンプルプログラムを動かしてみる
- Eclipse で Android プロジェクトを作成し,Android NDK を使ってみる
この Web ページでの設定
- Android NDK のパス: C:\android-ndk-r10b
前準備
前準備として,下記のインストールが済んでいること.
- JDK と Android SDK のインストールが終わっていること
Aptana Studio 3 は、http://www.aptana.com/からダウンロード
【関連する外部ページ】
Android NDK のダウンロードとインストール
- Web ページを開く
- 必要な Andorid のバージョンを確認しておく
- Windows 版を選ぶ
クリックするとダウンロードが始まる。
- ライセンス条項の確認
熟読し、納得できる場合にのみ続行する.
- ダウンロードしたファイルを、分かりやすい場所に保存
- 分かりやすいディレクトリで、ダウンロードしたファイルを展開(解凍)
- 解凍が終わったら、環境変数を設定する
環境変数 PATH の設定
「C:\android-ndk-r10b」のように設定
環境変数 ANDROID_NDK_HOME の設定
「C:\android-ndk-r10b」のように設定
パスを通す
- Windows のスタートメニューを開き,コントロールパネル→システムとセキュリティ→システム と辿る
- 左側のメニューに「システムの詳細設定」という項目があるのでそこを選択
- 「詳細設定タブ」の一番下「環境変数」を選択し,環境変数を変更するウィンドウ<を開く
- 下側のグループ「システム環境変数」のなかから「PATH」を探してダブルクリック
パスを追記する
※すでに記入してある内容は削除しない
※変数と変数の間は「;」(半角セミコロン)で区切る
- 追記が完了したら「OK」を押してウィンドウを閉じる
Android NDK に同封のサンプルプログラムのコンパイル
- コマンドプロンプトを開き,Hello.Jni サンプルプログラムのディレクトリに移動
「C:\android-ndk-r10b」は、実際のディレクトリに読み替えること.
cd C:\android-ndk-r10b\samples\hello-jni
- ndk-build コマンドの実行
ndk-build
- 「.so」ファイルができる.
dir obj\local\armeabi-v7a
Eclipse の C/C++ 開発ツール (CDT) のインストール手順
- Eclipse の起動
- 「新規ソフトウェアのインストール」の開始
「ヘルプ (Help)」メニュー → 「新規ソフトウェアのインストール (Install New Software ...) 」 を選ぶ
- 作業対象として「--すべての使用可能なサイト-- (--All Available Sites--)」を選ぶ
- 「プログラミング言語」の展開
いろいろなグループが表示される. 「プログラミング言語」の左横の三角形をクリックして展開
- C/C++ 開発ツールの選択
次を選択し,下の方にある「次へ」をクリック.
- C/C++ 開発ツール (C/C++ Development Tools)
- C/C++ 開発ツール SDK (C/C++ Development Tools SDK)
- C/C++ Visual C++ サポート
- インストール詳細の確認
このままでよいので, 「次へ」をクリック.
- ライセンス条項の確認
- インストールが始まる
- Eclipse の再起動
Eclipse の設定
- Java コンパイラーの準拠レベルの確認
1.6 に設定しておく(1.7 を使いたい場合には 4.4 以上の Android SDK が必要)
- Android NDK のパスに関する設定
Eclipse で Android NDK に同封のサンプルプログラムを動かしてみる
ここでは,インストールがうまくできたことの確認のため, さきほど、ビルドを済ませた hello-jni(Android NDK に同封のサンプルプログラム) のファイルをまるごと Eclipse のワークスペースに取り込んで実行する.
- Eclipse の起動
-
「ファイル (File)」
→
「新規 (New)」
→
「プロジェクト (Project)」 と操作する
- 既存コードからの Android プロジェクト (Android Project from Existing Code) を選ぶ
-
ルートディレクトリ として「C:\android-ndk32-r10b\samples\hello-jni」を指定する.
「プロジェクトをワークスペースへコピー (Copy projects into workspace)」にチェックし、「Finish」をクリックする
* hello-jni は、先ほどコマンドプロンプトで ndk-build を実行して、ビルド済み
- 実行してみる (エミュレータにデプロイ)
プロジェクトを右クリックし, 「実行 (Run)」 → 「Android アプリケーション (Android Application)」
しばらく待つと, エミュレータの画面に「Hello from JNI!」というメッセージが現れる.
コンソールに、エラーメッセージが出ていないことを確認する
次のようなエラーメッセージが出る場合には ndk-build からやり直す.
JNI プログラムの ビルドが Eclipse で行えるようにするための設定
端末を開いて ndk-build コマンドを実行するのが面倒(Eclipse ndk-build コマンドの起動が行えるように設定したい)ので、次のように操作する.
- 先ほど使ったプロジェクト HelloJni を右クリックし,「Android ツール」を選び、 「ネイティブサポートの追加 (Add Native Support)」
- libhello-jni.so に設定
- プロジェクトを右クリックし、 「プロジェクトをクリーン」、「プロジェクトをビルド」と操作
- コンソールに ndk-build の実行結果が出るので確認する
* コンソールにエラーメッセージが無いのに、エラーメッセージが出る場合がある.
もともとサンプルプログラムを使っているので、エラーメッセージが出るはずが無い. なのに、エラーメッセージが出る.どうやら Eclipse の設定が甘い(が、どうしたらよいか分からない). エラーメッセージが出たせいで、実行ができないという Eclipse のおせっかい機能.
このときは Eclipse を再起動するとうまくいく場合がある.
- Andorid の画面を確認する
以下、書きかけ 以下、書きかけ 以下、書きかけ 以下、書きかけ 以下、書きかけ
-
「ファイル (File)」
→
「新規 (New)」
→
「その他 (Other)」
→
C/C++
→
Convert to a C/C++ Porject (Adds C/C++ Nature)
Eclipse 上で ndk-build の操作ができるようにしたいので, 「Convert to a C/C++ Porject (Adds C/C++ Nature)」を実行する.
-
Makefile project を選び,「Other Toolchain」を選ぶ.Finish をクリック これは、操作を間違えると、やり直すのがとても面倒なので、注意深く行う
- パースペクティブに関する確認
- プロパティーの設定
プロジェクトを右クリックし,プロパティーを選ぶ.設定用のウインドウが現れるので,
「C/C++ ビルド (C/C++ Build)」の の ビルドコマンドを 「ndk-build」のように設定
- インクルード・ディレクトリーの設定
- パースペクティブに関する確認
Eclipse での Android プロジェクト作成と実行
- Eclipse の起動
- Eclipse で,次のような Android プロジェクトを新規作成
- プロジェクト名: Hello2
- パッケージ名: hoge.hoge.com
- アクティビティ: Hello2Activity
-
「ファイル (File)」
→
「新規 (New)」
→
「プロジェクト (Project)」 と操作する
- Android プロジェクト (Android Project) を選ぶ
- プロジェクト名を「Hello2」のように設定する.
「ワークスペース内に新規プロジェクトを作成」をチェックする.
- ビルド・ターゲットを設定する
バージョンを確認
- パッケージ名の設定
パッケージ名は 「hoge.hoge.com」のように設定
- jni/Android.mk の作成
Eclipse のプロジェクト・エクスプローラーで,新しいフォルダとして「jni」を作成し, 新しいファイルとし Android.mk を作成する.次のように編集する
* 「jni」のところは何でもよいが、分かりやすい名前にしておくkと
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := hello.c include $(BUILD_SHARED_LIBRARY)
- jni/hello.c の作成
Eclipse のプロジェクト・エクスプローラーで, 新しいファイルとして hello.c を作成する.hello.c を次のように編集する
* ファイル名「hello.c」のところは何でもよいが、Android.mk で、そのファイル名を正しく設定しておくこと.
関数名は、「Java_<パッケージ名>_<アクティビティ名>_<文字列>」のようになる
#include<string.h> #include<jni.h> jstring Java_hoge_hoge_com_Hello2Activity_stringFromJNI( JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "Hello, World!\n"); }
- Hello2Activity.java の編集
Android.mk で「hello.c」のように設定したので,「System.loadLibrary("hello");」のところは「hello」になる.
package hoge.hoge.com; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class Hello2Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv); } public native String stringFromJNI(); public native String unimplementedStringFromJNI(); static { System.loadLibrary("hello"); } }
- プロパティーの設定
プロジェクトを右クリックし,プロパティーを選ぶ.設定用のウインドウが現れるので,
「C/C++ ビルド (C/C++ Build)」の の ビルドコマンドを 「ndk-build」のように設定
- インクルード・ディレクトリーの設定
- 実行してみる
他のCPUで実行したいとき
jni/Application.mk ファイルを作り「APP_ABI := x86」のように設定する.