在Unity插件中访问Unity的java文件

时间:2012-05-17 14:46:51

标签: android plugins unity3d

我正在使用android NDK.right写一个插件现在我已经完成了以下操作:   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(专为android而建)在我的Unity应用程序内部。非常感谢帮助。

0 个答案:

没有答案