Nic*_*ick 3 file-io android-ndk native-activity
我正在努力将PC OpenGL应用程序移植到Android上.我选择使用那个NDK android_native_app_glue框架的东西.据我所知,它将允许我继续使用C++并且甚至不编写单个JAVA代码行.它听起来很有希望.
第一个不清楚的事情是数据保存/加载.我的应用程序的数据格式是二进制的,我原来的PC相关代码使用简单的"stdio.h"FILE操作:fopen,fread,fwrite等来创建,写入和读取"mygame.bin"文件.如何将其移植到Android上?
谷歌搜索它,我发现我必须存储然后使用"java环境"变量:
JNIEnv *g_jniEnv = 0;
void android_main(struct android_app* state) {
g_jniEnv = state->activity->env;
}
Run Code Online (Sandbox Code Playgroud)
但是,我仍然没有意识到如何使用此g_jniEnv来执行文件操作.
更新: 好的,我发现在Java中,可以按如下方式执行数据保存:
String string = "hello world!";
FileOutputStream fos = openFileOutput("mygame.bin", Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:给定一个指向JNIEnv的指针,如何在C++中重写这段代码片段?
您仍然可以在NDK项目中使用stdio.h.#include and pound away.
唯一的技巧是获取应用程序私有数据文件夹的路径.它可以state->activity->internalDataPath在android_main.在该路径之外,该应用程序没有文件系统权限.
你JNIEnv最终可能会以某种方式需要你.本机子系统没有镜像整个Java API; 所以坚持下去env.但原生文件I/O就在那里.