jstring return_string_test(JNIEnv *env)
{ jclass clsEnv =(*env)->FindClass (env,"android/content/pm/ApplicationInfo");
jfieldID getDir = (*env)->GetFieldID(env, clsEnv, "sourceDir","Ljava/langString;");
jstring path_test = (jstring)(*env)->GetObjectField(env,clsEnv,getDir); //clsEnv 이 부분에 jobject 가 들어가야 하는데 어떤 값을 넣어야 하는지 모르겠습니다. //여기에 들어가는 jobject가 java 파일에서 받는게 아니라 여기서 만들어야 하거든요~
return path_test;
}
무척 사소한 문제 같은데 저기에서 GetObjectField에서 에러가 납니다.
sourceDir이 메소드이면 object가 안들어가서 쉽게 만들 수 있는데 getObjectField는 jobject 값을 입력해야 하니..ㅠㅠ
이것 때문에 3일을 헤메고 있네요..ㅠㅠ
문제는 이것입니다.
'FindClass 가져온 클래스의 Object 정보를 어떻게 구하는가..!!'
...어떻게 해야 할지 몰라서 문의드립니다. ㅠㅠ
아..그런가요..ㅠㅠ
FindClass로 찾은 클래스에 대해 오브젝트를 생성하면 될 것 같은데..라는 생각이 들어서..
jobject jobj = (*env)->NewObject(env,clsEnv,(*env)->GetMethodID(env,clsEnv,"<init>","()V"));
jstring file_path = (jstring)(*env)->GetObjectField(env,jobj,getDir);
..이 두개를 추가해 봤습니다.
그래도 안되네요..ㅠㅠ
...문제는 자바 파일에서 불러오지 않고..
FindClass (env,"android/content/pm/ApplicationInfo");로 찾은 android 클래스에서..
sourceDir 정보를 가져오는건데...어렵네요..ㅜ
...해결하였습니다.
ObjectClass에 FindClass를 통해 얻은 필드 값을 붙여서 GetObjectField 를 쓰면 되네요~ ㅎㅎ~
힌트가 된 사이트입니다.
http://blog.naver.com/PostView.nhn?blogId=dadasi73&logNo=20114653110




GetObjectField는 Object의 포인터를 인자로 넘겨야 합니다.
FindClass는 단순히 Class의 포인터를 가져온것이죠.
특정 Object의 Field값을 가져오고 싶다면, Java에서 C로 Object를 넘겨주셔야 할 것 같은데요.