Javaで作成された簡単な関数を、JNIを利用してC言語で実装してみます。
// 加算した値を返す。 protected int addValue(int value1, int value2) { return value1 + value2; }
これをC言語に置き換えてみます。
プロジェクトのディレクトリにjniフォルダを作成します。この中にソースコードとメイクファイルを配置していきます。
#include <jni.h> // 加算した値を返す。 jint Java_com_example_addapp_MainActivity_addValue( JNIEnv* env, jobject thiz, jint value1, jint value2 ) { return value1 + value2; }
関数名が長くなっていますがこれは “Java_パッケージ名_クラス名_メソッド名” というメソッド名の規約があるためです。これを間違えていると実行時にエラーになります。
-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);
これでネイティブコードでの実装に置き換えることが出来ます。