androidndk调用java方法表单cpp 我需要打开NDK的相机,我尝试从C++文件中打开一些java方法。我不知道该怎么做!我不知道如何从本机活动或不创建java活动调用java方法

androidndk调用java方法表单cpp 我需要打开NDK的相机,我尝试从C++文件中打开一些java方法。我不知道该怎么做!我不知道如何从本机活动或不创建java活动调用java方法,java,android,c++,android-ndk,Java,Android,C++,Android Ndk,我有Tester.class import android.util.Log; public class Tester { static { System.loadLibrary("cocos2dcpp"); } public void callFromCpp(){ Log.i("DEBUGGER_TAG", "Something!"); } } mai

我有Tester.class

 import android.util.Log;

    public class Tester {

        static {
            System.loadLibrary("cocos2dcpp");
        }

        public void callFromCpp(){
            Log.i("DEBUGGER_TAG", "Something!");
        }



    }
main.c

#include "AppDelegate.h"
#include "cocos2d.h"
#include "CCEventType.h"
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>

#define  LOG_TAG    "SUPER_DEBUGGER"
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)

using namespace cocos2d;

void cocos_android_app_init (struct android_app* app) {
    LOGD("cocos_android_app_init");
    AppDelegate *pAppDelegate = new AppDelegate();
}
#包括“AppDelegate.h”
#包括“cocos2d.h”
#包括“CCEventType.h”
#包括“platform/android/jni/JniHelper.h”
#包括
#包括
#定义日志标记“超级调试程序”
#定义LOGD(…)\uuuuuAndroid\uLog\uPrint(android\uLog\uDebug、log\uTag、\uuuu VA\uArgs\uuuuu)
使用名称空间cocos2d;
void cococos_android_app_init(struct android_app*app){
LOGD(“cocos_android_app_init”);
AppDelegate*pAppDelegate=新的AppDelegate();
}
如何打开callFromCpp方法?

试试以下方法:

{
        JavaVM* jvm;
        env->GetJavaVM(&jvm);
        // now you can store jvm somewhere

        // in the new thread:
        JNIEnv* myNewEnv;
        JavaVMAttachArgs args;
        args.version = JNI_VERSION_1_6; // choose your JNI version
        args.name = NULL; // you might want to give the java thread a name
        args.group = NULL; // you might want to assign the java thread to a ThreadGroup
        jvm->AttachCurrentThread((void**)&myNewEnv, &args);
        // And now you can use myNewEnv

        jclass testClass = (*myNewEnv)->FindClass(myNewEnv,
                    "com/your/package/name/Test"); // get Class

        jmethodID constructor = (*myNewEnv)->GetMethodID(myNewEnv, cls, "<init>", "()V");

        jobject testObject = (*myNewEnv)->NewObject(myNewEnv,testClass,constructor);

        jmethodID callFromCpp = (*myNewEnv)->GetMethodID(myNewEnv,
                testClass, "callFromCpp", "()V"); //get methodid

        (*myNewEnv)->CallVoidMethod(myNewEnv,testObject,callFromCpp);

    }   
{
JavaVM*jvm;
env->GetJavaVM(&jvm);
//现在您可以将jvm存储在某个地方
//在新线程中:
JNIEnv*myNewEnv;
JavaVMAttachArgs args;
args.version=JNI\u version\u 1\u 6;//选择您的JNI版本
args.name=NULL;//您可能希望为java线程指定一个名称
args.group=NULL;//您可能希望将java线程分配给线程组
jvm->AttachCurrentThread((void**)和myNewEnv,&args);
//现在您可以使用myNewEnv了
jclass testClass=(*myNewEnv)->FindClass(myNewEnv,
“com/your/package/name/Test”);//获取类
jmethodID构造函数=(*myNewEnv)->GetMethodID(myNewEnv,cls,“,”()V”);
jobject testObject=(*myNewEnv)->NewObject(myNewEnv,testClass,构造函数);
jmethodID调用FromCPP=(*myNewEnv)->GetMethodID(myNewEnv,
testClass,“callFromCpp”,“()V”);//获取方法ID
(*myNewEnv)->CallVoidMethod(myNewEnv,testObject,callFromCpp);
}