아...jni때문에 힘드네요..ㅠ.ㅠ
jni 에서 java에서 c 함수 불러오는건 되는데.. c에서 자바 메소드 불러오는거 테스트 하다가 안되서 질문올려봅니다.
바로 아래있는건 자바 소스고... 자바 소스 밑에 있는 c 소스입니다.
뭐때문인지..폰에서 실행하니깐...바로 어플이 꺼져버리더군요..ㅠ.ㅠ 뭐 잘못된거라도 있나요??
c에서 이 TestCCallJava11() 함수를 실행안하면..이상없이 잘 됩니다..ㅠ.ㅠ
TestCCallJava11 여기서 뭐가 잘못된건지 좀 꼬집어주세요..ㅠ.ㅠ
package com.cocos2dx.TestJNI;
import java.io.File;
public class TestJNI {
public TestJNI(){
}
static {
System.loadLibrary("JNITest");
}
public native void loadFile();
public void createFolder(){
try{
File file = new File("data/data/com.cocos2dx.Box2dTest/Testfolder");
if(!file.exists())
file.mkdir();
}catch (Exception e){
System.out.println(e);
}
}
}
#include <jni.h>
#include <stdio.h>
#include "JNITest.h"
#include "JniTestC.h"
static JavaVM *g_VM;
static jclass jNativesCls;
void TestCCallJava11();
JNIEXPORT void JNICALL Java_com_cocos2dx_TestJNI_TestJNI_loadFile
(JNIEnv *env, jobject clazz){
JniTestC* a1 = new JniTestC();
a1->setJniTest();
env->GetJavaVM(&g_VM);
TestCCallJava11();
}
void TestCCallJava11(){
JNIEnv *env;
if (!g_VM)
return;
g_VM->AttachCurrentThreadAsDaemon(&env, NULL);
jclass jNCls = env->FindClass("com/cocos2dx/TestJNI/TestJNI");
if (jNCls == 0)
{
return;
}
jNativesCls = (jclass)env->NewGlobalRef(jNCls);
env->DeleteLocalRef(jNCls);
jmethodID jFinishMethodID;
if (!jFinishMethodID) {
jFinishMethodID = env->GetStaticMethodID(jNativesCls, "createFolder", "()V");
}
if (jFinishMethodID) {
env->CallStaticVoidMethod(jNativesCls, jFinishMethodID);
}
}




Class에서 바로 레퍼런스 가지고와서 실행하는거 보니까 static메소드 호출하는 문장으로 보이는데요
createFolder가 static이 아닌데요....