About
Contents
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
Materials Link
その他
PR
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
以前のリビジョンの文書です
// plugin.h extern "C" { int Hoge(); }
// plugin.cpp #include "plugin.h" int Hoge() { return 999; }
ここで一度VisualStudioでビルドしてエラーが出ないか確認します。エラーが出なければAndroid用にndk-buildします。ndk-build用のAndroid.mk ファイルを用意します。
include $(CLEAR_VARS) # override strip command to strip all symbols from output library; no need to ship with those.. cmd-strip = $(TOOLCHAIN_PREFIX)strip $1 LOCAL_ARM_MODE := arm LOCAL_PATH := $(NDK_PROJECT_PATH)/jni LOCAL_MODULE := libjni LOCAL_CFLAGS := -Werror LOCAL_SRC_FILES := jni.cpp LOCAL_SRC_FILES += ../plugin.cpp LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
plugin.cpp がlibjniに含まれる様にします。 ndk-buildでエラーが出なければ.soファイルが生成されます。
using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using System; public class JNI { [DllImport ("jni")] public static extern int Hoge(); }
これで呼び出せる様になりました。任意の場所からJNI.Hoge() とすれば999 と値が返ってきます。
実行時にEntryPointNotFoundException エラーがが出てしまう場合は関数の実態を見つけられずにいます。例えば以下の場合は関数が見つけられずエラーが出ます。
extern "C" { static int Hoge(); }
#include "plugin.h" static int Hoge() { return 999; }
static 宣言が余計に付いてます。