====== 003 JNIを利用してC言語の関数を実装する ======
===== 概要 =====
Javaで作成された簡単な関数を、JNIを利用してC言語で実装してみます。
// 加算した値を返す。
protected int addValue(int value1, int value2)
{
return value1 + value2;
}
これをC言語に置き換えてみます。
==== jniフォルダの作成 ====
プロジェクトのディレクトリにjniフォルダを作成します。この中にソースコードとメイクファイルを配置していきます。
==== ソースコードの追加 ====
#include
// 加算した値を返す。
jint Java_com_example_addapp_MainActivity_addValue( JNIEnv* env, jobject thiz, jint value1, jint value2 )
{
return value1 + value2;
}
関数名が長くなっていますがこれは "Java_パッケージ名_クラス名_メソッド名" というメソッド名の規約があるためです。これを間違えていると実行時にエラーになります。
==== Android.mkファイルの追加 ====
-Android用のmakefileを追加します
LOCAL_PATH := $(call my-dir)
#変数の初期化
include $(CLEAR_VARS)
#出力するモジュール名
LOCAL_MODULE := calcvalue
#モジュールを構成するC/C++のソースコード
LOCAL_SRC_FILES := calcvalue.c
#共有モジュールを出力
include $(BUILD_SHARED_LIBRARY)
==== 呼び出し方 ====
// ロードするモジュールを指定
static
{
System.loadLibrary("calcvalue");
}
// 加算した値を返す。(nativeをつけることでJNI関数であることをを宣言する)
protected native int addValue(int value1, int value2);
これでネイティブコードでの実装に置き換えることが出来ます。