4

我正在将 PC OpenGL 应用程序移植到 Android 上。我选择使用 NDK android_native_app_glue 框架的东西。据我了解,它可以让我继续使用 C++,甚至不用编写任何 JAVA 代码行。这听起来很有希望。

对我来说,第一个不清楚的是数据保存/加载。我的应用程序的数据格式是二进制的,我的原始 PC 相关代码使用普通的“stdio.h”文件操作:fopen、fread、fwrite 等来创建、写入和读取“mygame.bin”文件。如何将其移植到 Android 上?

谷歌搜索后,我发现我必须存储然后使用“java环境”变量:

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++ 重写这个代码片段?

4

1 回答 1

9

您仍然可以在 NDK 项目中使用 stdio.h。#include 并删除。

唯一的技巧是获取应用程序私有数据文件夹的路径。它可以state->activity->internalDataPathandroid_main. 在该路径之外,应用程序没有文件系统权限。

JNIEnv最终可能需要一种或另一种方式。整个 Java API 没有为本地子系统镜像;所以坚持下去env。但是本机文件 I/O 就在那里。

于 2012-09-21T17:42:05.617 回答