2012-09-21 5 views
3

나는 PC OpenGL 응용 프로그램을 Android에 이식하려고합니다. 그 NDK android_native_app_glue 프레임웍을 사용하기로했습니다. 내가 알기로는, 그것은 C++에 머 무르며 단일 JAVA 코드 라인도 작성하지 못하게한다. 그리고 그것은 유망한 것으로 보였다.android ndk data save/load

나에게 처음으로 불투명 한 것은 데이터 저장/불러 오기입니다. 내 응용 프로그램의 데이터 형식은 바이너리이며 원래의 PC 관련 코드는 일반 "stdio.h"FILE 연산을 사용합니다 : fopen, fread, fwrite 등은 "mygame.bin"파일을 만들고 쓰고 읽습니다. Android에 이식하는 방법은 무엇입니까?

JNIEnv *g_jniEnv = 0; 
void android_main(struct android_app* state) { 
    g_jniEnv = state->activity->env; 
} 

그러나, 나는 여전히 파일 작업을 수행하려면이 g_jniEnv을 사용하는 방법을 모르고 :

내가 저장 한 후 변수가 "Java 환경"을 사용해야합니다 발견, 그것을 봤 데.

업데이트 : 좋아, 나는 다음과 같은 자바, 데이터 저장을 수행 할 수 있다는 것을 발견 :

String string = "hello world!"; 
FileOutputStream fos = openFileOutput("mygame.bin", Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

을 그래서 내 질문은 : JNIEnv의 포인터 주어진, 어떻게이 코드 조각을 다시 않습니다 C++에서?

답변

9

여전히 NDK 프로젝트에서 stdio.h를 사용할 수 있습니다. #include 및 pound away.

유일한 속임수는 응용 프로그램의 개인 데이터 폴더에 대한 경로를 얻는 것입니다. android_mainstate->activity->internalDataPath으로 표시됩니다. 이 경로 외의 앱에는 파일 시스템 권한이 없습니다.

아마도 JNIEnv이 필요합니다. 네이티브 서브 시스템에서는 Java API 전체가 미러링되지 않습니다. 그래서 env을 붙잡아 라. 하지만 네이티브 파일 I/O가 바로 거기에 있습니다.

+1

"경로 밖에서는 앱에 파일 시스템 권한이 없습니다." 반드시 필요한 것은 아니지만 앱에 외부 저장 권한이 있는지 여부가 가장 분명합니다. –

+0

긴 날이 끝날 때'internalDataPath'에 의해 저장됩니다. 건배. –