1

我正在使用 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 应用程序中。非常感谢任何帮助。

4

0 回答 0