androidndk调用java方法表单cpp 我需要打开NDK的相机,我尝试从C++文件中打开一些java方法。我不知道该怎么做!我不知道如何从本机活动或不创建java活动调用java方法
我有Tester.classandroidndk调用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
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);
}