4

PCOpenGLアプリケーションをAndroidに移植する作業をしています。私はそのNDKandroid_native_app_glueフレームワークのものを使用することを選択しました。私が理解したように、それは私がC ++にとどまり、Javaコード行を1つも書かないことを可能にするでしょう。そしてそれは有望に聞こえた。

私にとって最初の不明確なことは、データの保存/読み込みです。私のアプリケーションのデータ形式はバイナリであり、元の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->internalDataPathのように利用できますandroid_main。そのパス以外では、アプリにはファイルシステムの権限がありません。

JNIEnvおそらく、最終的には何らかの方法で必要になるでしょう。Java API全体は、ネイティブサブシステムにミラーリングされていません。だからそれを保持しenvます。しかし、ネイティブファイルI/Oはすぐそこにあります。

于 2012-09-21T17:42:05.617 に答える