はじめに
Eclipse 上で、Android NDK プロジェクトを作成する方法を説明します。
ネット上に同じような記事がいくつもありますが、筆者の環境では設定方法に多少の違いがあったため、改めて書いてみました。
開発環境
-
Mac OSX : 10.9.5
-
Java SE Development Kit : 1.7.0_51
-
Android SDK : 24.0.2
-
Android NDK : r10d
-
Eclipse : 4.4.1
-
Android Development Tools (Eclipse plugin) : 23.0.4.1468518
-
Android Native Development Tools (Eclipse plugin) : 23.0.4.1468518
実行環境
- Nexus 7 (2013)
- Android 4.4.4
今回作成したプロジェクト
今回作成した Android NDK プロジェクトを Github に置きました。
Github - sample-android-ndk-eclipse
Android NDK とは?
Android NDK とは、C や C++ で Android アプリを開発するためのツールセットです。詳細は、以下の公式サイトを参照してください。
各種ツールのインストール
Eclipse 上で Android NDK プロジェクトを作成するためには、以下のツールをインストールする必要があります。
- Java SE Development Kit
- Android SDK
- Android NDK
- Eclipse
- Android Development Tools (Eclipse plugin)
- Android Native Development Tools (Eclipse plugin)
ツールのインストール方法については、以下のサイトなどを参照してください。
Android Application Project の新規作成
手順1)Eclipse を起動します。
手順2)File -> New -> Other... を選択します。
手順3)Android Application Project を選択し、Next をクリックします。
手順4)Application Name を記入し(ここでは、HelloNDK としました)、Next をクリックします。
手順5)Next をクリックします。
手順6)Next をクリックします。
手順7)Next をクリックします。
手順8)Finish をクリックします。
Native Support の追加
手順9)プロジェクト名(HelloNDK)を右クリックします。
手順10)Android Tools -> Add Native Support... をクリックします。
手順11)ライブラリ(.so ファイル)の名前を指定して、Finish をクリックします。ここでは、デフォルトのままとしました。
手順12)jni ディレクトリが作成され、中に HelloNDK.cpp と Android.mk が作成されます。
コードの追加
手順13)res -> layout -> acvitiy_main.xml に、以下の赤枠部分のコードを追加します。
補足)
android:id="@+id/textView"
は、TextView に id を付与するためのコードです。
手順14)src -> com.example.hellondk -> MainActivity.java に、以下の赤枠部分のコードを追加します。
補足)
以下は、手順11で指定した .so ファイルを読み込むためのコードです。
static {
System.loadLibrary("HelloNDK");
}
以下では、native メソッドを宣言しています。
public native String getMsgFromNDK();
以下のコードで、TextView に geMsgFromNDK() メソッドの戻り値を設定しています。
TextView text = (TextView) findViewById(R.id.textView);
text.setText(getMsgFromNDK());
javah コマンドの実行
補足) javah コマンドとは?
javah コマンドとは、java のクラスファイルから、C/C++ とのインターフェースに必要なヘッダファイルを自動的に生成するためのツールです。
手順15)エディタ上で MainActivity.java をクリックし、アクティブ状態にします。
手順16)Run -> External Tools -> External Tools Configurations... を選択します
手順17)Program を選択します。
手順18)New launch configuration をクリックします。
手順19)以下の赤枠部分を記入します。
項目 | 内容 |
---|---|
Name | 自由に決めてかまいません |
Location | ${system_path:javah} |
Working directory | ${project_loc} |
Arguments | -d jni -classpath bin/classes:/Users/XXX/Library/Android/sdk/platforms/android-21:/Users/XXX/Library/Android/sdk/extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar:/Users/XXX/Library/Android/sdk/extras/android/support/v4/android-support-v4.jar:/Users/XXX/Library/Android/sdk/platforms/android-21/data/layoutlib.jar ${java_type_name} |
補足) Arguments の -classpath オプションについて
Arguments の -classpath オプションについては、以下の点で筆者の環境と他のサイトで違いがありました。
その1)
パスの区切りについては、セミコロン(;)ではなく、コロン(:)にする必要がありました。
その2)
また、以下の4つのパスを指定する必要がありました。
- /Users/XXX/Library/Android/sdk/platforms/android-21
- /Users/XXX/Library/Android/sdk/extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar
- /Users/XXX/Library/Android/sdk/extras/android/support/v4/android-support-v4.jar
- /Users/XXX/Library/Android/sdk/platforms/android-21/data/layoutlib.jar
手順20)Run をクリックします。
これで、jni ディレクトリに com_example_hellondk_MainActivity.h というヘッダファイルが作成されます(ただし、Eclipse の画面を更新しないと、このファイルを見ることができません。以下の手順で画面の更新を行います)。
手順21)jni ディレクトリを選択し、F5 キーを押します。
手順22)com_example_hellondk_MainActivity.h が作成されていることが確認できます。
コードの追加
手順23)com_example_hellondk_MainActivity.h に、MainActivity.java で宣言した、messageFromNDK 関数のプロトタイプ宣言があります。後ほど使うので、これをコピーしておきます。
手順24)jni ディレクトリにある、HelloNDK.cpp に、以下の赤枠部分のコードを追加します。
補足)
手順23でコピーしたものをペーストして使うと楽です。コピペした場合は、引数名を追加することを忘れないで下さい(JNIEnv *env と、jobject thisz)。
補足)
以下で、先ほど作成した、com_example_hellondk_MainActivity.h をインクルードしています。
# include <com_example_hellondk_MainActivity.h>
以下のコードで、getMsgFromNDK メソッドを作成しています。関数名は、「Java_パッケージ名_関数名」で指定する決まりになっています。
JNIEXPORT jstring JNICALL Java_com_example_hellondk_MainActivity_getMsgFromNDK(JNIEnv *env, jobject thisz) {
jstring jstr = env->NewStringUTF("Hello from NDK!");
return jstr;
}
実行
手順25)HelloNDK をクリックしてアクティブ化し、以下の赤矢印が指している、小さな黒い三角形をクリックします。
手順26)Android Application をクリックし、実行します。
手順27)Android 端末上で、以下のように表示されれば成功です。
補足1)
筆者は、実機上(Nexus 7, Android 4.4.4)で動作確認を行いました。
補足2)
エミュレータや実機での動作確認の詳細については、他のサイトを参照してください。