visual studio samples prebuilt examples ejemplos ejemplo apps file-io android-ndk native-activity

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í.