Eclipse 上で Android NDK プロジェクトを作成する方法

More than 1 year has passed since last update.

はじめに

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 アプリを開発するためのツールセットです。詳細は、以下の公式サイトを参照してください。

参考)Android NDK(英語)

各種ツールのインストール

Eclipse 上で Android NDK プロジェクトを作成するためには、以下のツールをインストールする必要があります。

  • Java SE Development Kit
  • Android SDK
  • Android NDK
  • Eclipse
  • Android Development Tools (Eclipse plugin)
  • Android Native Development Tools (Eclipse plugin)

ツールのインストール方法については、以下のサイトなどを参照してください。

参考)Android SDK/NDK インストール手順

参考)Androidアプリケーション開発環境の構築

参考)Android NDKを使った開発環境の構築

Android Application Project の新規作成

手順1)Eclipse を起動します。

手順2)File -> New -> Other... を選択します。

1.png

手順3)Android Application Project を選択し、Next をクリックします。

2.png

手順4)Application Name を記入し(ここでは、HelloNDK としました)、Next をクリックします。

3.png

手順5)Next をクリックします。

4.png

手順6)Next をクリックします。

5.png

手順7)Next をクリックします。

6.png

手順8)Finish をクリックします。

7.png

Native Support の追加

手順9)プロジェクト名(HelloNDK)を右クリックします。

8.png

手順10)Android Tools -> Add Native Support... をクリックします。

9.png

手順11)ライブラリ(.so ファイル)の名前を指定して、Finish をクリックします。ここでは、デフォルトのままとしました。

10.png

手順12)jni ディレクトリが作成され、中に HelloNDK.cpp と Android.mk が作成されます。

11.png

コードの追加

手順13)res -> layout -> acvitiy_main.xml に、以下の赤枠部分のコードを追加します。

12.png


補足)
android:id="@+id/textView" は、TextView に id を付与するためのコードです。


手順14)src -> com.example.hellondk -> MainActivity.java に、以下の赤枠部分のコードを追加します。

13.png


補足)
以下は、手順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 をクリックし、アクティブ状態にします。

14.png

手順16)Run -> External Tools -> External Tools Configurations... を選択します

15.png

手順17)Program を選択します。

16.png

手順18)New launch configuration をクリックします。

17.png

手順19)以下の赤枠部分を記入します。

18.png

項目 内容
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 をクリックします。

19.png

これで、jni ディレクトリに com_example_hellondk_MainActivity.h というヘッダファイルが作成されます(ただし、Eclipse の画面を更新しないと、このファイルを見ることができません。以下の手順で画面の更新を行います)。

手順21)jni ディレクトリを選択し、F5 キーを押します。

20.png

手順22)com_example_hellondk_MainActivity.h が作成されていることが確認できます。

21.png

コードの追加

手順23)com_example_hellondk_MainActivity.h に、MainActivity.java で宣言した、messageFromNDK 関数のプロトタイプ宣言があります。後ほど使うので、これをコピーしておきます。

22.png

手順24)jni ディレクトリにある、HelloNDK.cpp に、以下の赤枠部分のコードを追加します。

補足)
手順23でコピーしたものをペーストして使うと楽です。コピペした場合は、引数名を追加することを忘れないで下さい(JNIEnv *env と、jobject thisz)。

23.png

補足)
以下で、先ほど作成した、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 をクリックしてアクティブ化し、以下の赤矢印が指している、小さな黒い三角形をクリックします。

24.png

手順26)Android Application をクリックし、実行します。

25.png

手順27)Android 端末上で、以下のように表示されれば成功です。

26.png

補足1)
筆者は、実機上(Nexus 7, Android 4.4.4)で動作確認を行いました。

補足2)
エミュレータや実機での動作確認の詳細については、他のサイトを参照してください。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.