file io - studio - android ndk data save/load
xamarin prebuilt apps (1)
Estoy trabajando en portar la aplicación PC OpenGL en Android. Elegí usar ese NDK android_native_app_glue framework cosas. Según entendí, me permitiría quedarme en C ++ y no escribir ni una sola línea de código JAVA. Y sonaba prometedor.
La primera cosa poco clara para mí es el almacenamiento / carga de datos. El formato de datos de mi aplicación es binario y mi código original relacionado con PC utiliza operaciones de ARCHIVO simple "stdio.h": fopen, fread, fwrite, etc. para crear, escribir y leer desde el archivo "mygame.bin". ¿Cómo lo transfiero a Android?
Después de haberlo buscado en Google, descubrí que debo almacenar y luego usar una variable de "entorno Java":
JNIEnv *g_jniEnv = 0;
void android_main(struct android_app* state) {
g_jniEnv = state->activity->env;
}
Sin embargo, todavía no me doy cuenta de cómo usar este g_jniEnv para realizar operaciones de archivos.
Actualización: Bien, encontré que en Java, el ahorro de datos se puede realizar de la siguiente manera:
String string = "hello world!";
FileOutputStream fos = openFileOutput("mygame.bin", Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
Entonces mis preguntas son: dado un puntero a JNIEnv, ¿cómo reescribo este fragmento de código en C ++?
Aún puede usar stdio.h en un proyecto NDK. #include y libra de distancia.
El único truco es obtener la ruta a la carpeta de datos privados de su aplicación. Está disponible como state->activity->internalDataPath
en android_main
. Fuera de ese camino, la aplicación no tiene derechos de sistema de archivos.
Probablemente necesitará su JNIEnv
eventualmente de una forma u otra. La totalidad de la API de Java no se refleja para el subsistema nativo; así que agárrate a ese env
. Pero la E / S de archivos nativos está ahí.