안드로이드 개발 질문/답변
(글 수 45,052)
일단 자바의 메소드는 아래와 같습니다.
public String returnSDCardPath(){
String sdcard = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
return sdcard;
}
sd카드의 패스를 받아오는 메소드인데요..
이것을 JNI에서 const char*로 리턴받아 사용하려고 합니다. 그래서..
Java -> JNI 연결을 해주고 아래와 같이 코딩했습니다.
const char* CallJavaDefaultReturnSDCardPath()
{
..........
//call method
jstring javaString = (jstring)javaEnv->CallObjectMethod( g_javaUpdaterObj, javaMethod, num);
char* nativeString = strdup(javaEnv->GetStringUTFChars(javaString, 0));
std::string result(nativeString);
free(nativeString);
javaEnv->ReleaseStringUTFChars(javaString, nativeString);
return result.c_str();
}
jstring으로 위 메소드의 리턴값인 String을 받아와서 GetStringUTFChars로 변환하여,
char*에 카피해주고, char*는 free해주는 코드입니다.
메모리릭을 피하기 위해 std::string에 다시 받아서 .c_str()로 리턴했구요..
문제는 이렇게 하면 쓰레기값이 나옵니다. std:string으로 받는 부분은 아닌 것 같습니다만 혹시
스트링을 쉽게 리턴받아 사용할 수 있는 방법을 아시는 고수님 계시면 알려주시면 감사하겠습니다. 좋은하루 되세요~!