Android JNIプロジェクトをゼロから作る

test102_01.png
前回はAndroid NDKに含まれるJNIサンプルプロジェクト「Hello-jni」をビルド実行した。今回はAndroid JNIプロジェクトの構造を知るために、「Hello-jni」とまったく同じプロジェクトをゼロから作成してみる。

test102_02.png
Eclipseを起動したら、「File」メニューから「Android Project」を作成する。

test102_03.png
今回はプロジェクト名を「Test102Prj」、ターゲットを「Android 2.3」、パッケージ名を「com.test102」、アクティビティ名を「Test102Act」とし、プロジェクト名、パッケージ名、アクティビティ名を区別できるようにした。

test102_04.png
次にC言語ソースファイルを保存するフォルダをプロジェクト内に作成する。プロジェクトを右クリックして現れるメニューの「New」にある「Folder」を選択する。

test102_05.png
フォルダ名は「jni」とする。

test102_06.png
次にjniフォルダの中にmakefileを作成する。「jni」フォルダを右クリックして現れるメニューの「New」にある「File」を選択する。

test102_07.png
ファイル名は「Android.mk」とする。これは常に固定のファイル名で、大文字小文字を区別するので要注意だ。

test102_08.png 「Android.mk」ファイルの中身を実装する。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := test102jni
LOCAL_SRC_FILES := test102jni.c

include $(BUILD_SHARED_LIBRARY)

test102_09.png
次にjniフォルダの中にC言語のソースファイルを作成する。「jni」フォルダを右クリックして現れるメニューの「New」にある「File」を選択する。

test102_10.png
ファイル名は「test102jni.c」とする。

test102_11.png 「test102jni.c」ファイルの中身を実装する。
Javaへエクスポートする関数名は「Java_com_test102_Test102Act_stringFromJNI」のように、「Java_プロジェクト名_アクティビティ名_関数名」と設定する。
#include <string.h>
#include <jni.h>

jstring
Java_com_test102_Test102Act_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Test102text");
}

test102_12.png 次にJavaソースファイルの「Test102Act.java」を開き、編集する。赤枠の8行を追加した。

package com.test102;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Test102Act extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }

    public native String  stringFromJNI();

    static {
        System.loadLibrary("test102jni");
    }
}

test102_13.png
最後に「Save All」で全ファイルを保存する。

test102_14.png そしてCygwinを開き、作成したJNIソースファイルをビルドする。
cd /cygdrive/c/workspace/Test102Prj
ndk-build

test102_15.png
Cygwinでビルドできたら、Androidパッケージのビルド/実行をする。プロジェクトを右クリックして現れたメニューの「Run As」にある「Android Application」を選択する。

test102_16.png
これでAndroidエミュレーター上で実行を確認できた。



カテゴリー「android」 のエントリー