我正在使用 android NDK 编写一个插件。现在我已经完成了以下工作: 1- 用 C++ 编写了简单的函数并制作了一个 .so(共享库)。代码如下:
#include <jni.h>
#include <string.h>
#include <android/log.h>
#define DEBUG_TAG "NDK_AndroidNDK1SampleActivity"
extern "C" {
static JavaVM *gJavaVM;
static JNIEnv *env;
static jobject gInterfaceObject, gDataObject;
JNIEXPORT jstring JNICALL Java_com_gvs_tes_NdkTestActivity_getNumbr(JNIEnv * env,jobject obj);
JNIEXPORT void JNICALL Java_com_gvs_tes_NdkTestActivity_getActivity(JNIEnv * env, jobject obj);};
JNIEXPORT jstring JNICALL Java_com_gvs_tes_NdkTestActivity_getNumbr(JNIEnv * env,jobject obj)
{
jboolean isCopy;
jstring szLogThis =(jstring) "hellog";
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", szLogThis);
return szLogThis;
}
JNIEXPORT void JNICALL Java_com_gvs_tes_NdkTestActivity_getActivity(JNIEnv * env, jobject obj)
{
jstring logs =(jstring) "Function Started";
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", logs);
if(env)
{
jstring logs =(jstring) "env not null";
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", logs);
}
jclass interfaceClass = env->FindClass("com/gvs/tes/testClass");
if(!interfaceClass)
{
jstring logThis =(jstring) "Activity Class Could not be get";
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", logThis);
return;
}
jmethodID altmethod = env->GetMethodID(interfaceClass, "<init>","()V");
jobject objClas = env->NewGlobalRef(env->NewObject(interfaceClass, altmethod));
jmethodID method = env->GetMethodID(interfaceClass, "chekClas","(I)V");
if(!method)
{
jstring logThis =(jstring) "Function Could not be get";
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", logThis);
return;
}
jint val = 3;
env->CallVoidMethod(objClas, method, val);
logs =(jstring) "Function Ended";
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", logs);
}
2- 我将 .so 文件复制到 [myUnityProject]/Assets/Plugins/Android 文件夹。3-然后我编写了以下脚本来调用函数
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class myScript : MonoBehaviour {
//[DllImport ("ndktest")]
//private static extern string Java_com_gvs_tes_NdkTestActivity_getNumbr();
[DllImport ("ndktest")]
private static extern void Java_com_gvs_tes_NdkTestActivity_getActivity();
// Use this for initialization
void Start () {
print("hello start");
//print ("CHECKING return value : "+Java_com_gvs_tes_NdkTestActivity_getNumbr().ToString());
Java_com_gvs_tes_NdkTestActivity_getActivity(); // PROBLEM OCCURS HERE
print("after Function call inside script");
}
// Update is called once per frame
void Update () {
}
}
现在我的主要问题是“如何访问我的 Android 项目中存在的 Java 文件”。如果我做的愚蠢错误,请指出我正确的方向因为我唯一的目的是能够使用 SDK(在 java 中为 android 构建)在我的 Unity 应用程序中。非常感谢任何帮助。