No se puede escribir en el archivo en el emulador de Android
Descripción del problema
Estoy escribiendo la aplicación para Android y uso código nativo, y probarlo en Android-Emulator . Con el fin de ver lo que sucede en el código JNI crear archivo en Android / data / LogTest / carpeta y escribir mi información de registro en ella.
FILE * pFile; pFile = fopen ("/data/LogTest/Log.txt"", "w"); // .... // Write some logs to file ... // ....
Cuando corro en la aplicación de la primera vez Android todo va bien, puedo ver los registros en el archivo Log.txt. Pero cuando cierre la aplicación de Android y ejecutarlo de nuevo no pasa nada. Al igual que la aplicación no puede escribir registros en el archivo segunda vez.
- Bloquear el cuadro de diálogo desde el código JNI
- Mi codificador JNI JPEG para Android es muy lento
- Acceda al objeto JNI a la capa de Java como puntero de referencia
- Llamar a un objeto java guardado a través de JNI desde un hilo diferente
- JNI ERROR (bug de la aplicación): desbordamiento de la tabla de referencia local (máx = 512)
Ideas de uno mismo
Pienso que la razón principal de este problema es que , cuando creo el archivo en la primera vez el nombre de la aplicación del creador está para el ex. 456 después de cuando intento escribir algo más de información a la aplicación de archivo Nombre es para ex. 856 y por lo tanto la aplicación 856 no puede escribir en el archivo que ha creado la aplicación 456 .
Pregunta
- Cómo puedo lanzar la aplicación con el mismo nombre, en el orden Android dejarme escribir al archivo en segundo tiempo.
- O tal vez el principal motivo o problema no es que la aplicación cada vez obtener rundom nombres.
- Android NDK, ninguna regla para hacer objetivo
- JNI: Llamar a GetStaticMethodID explotar
- Cómo pasar una estructura como un argumento a la función java o volver a java de jni
- Android: 'No se pudo cargar Foo: findLibrary returned null'
- Se produjo un error al agregar a la tabla ref de matrices JNI fijada (1024 entradas)
- Android JNI APK Embalaje
- JNI Warnig tipo de retorno esperado 'L' calling LocationManager.requestLocationUpdates
- ¿Cómo puedo copiar mis bibliotecas .so en el dispositivo Android?
Creo que no se le permite escribir en esa carpeta. Lee las respuestas aquí. Utilice la tarjeta sdk o el directorio de su aplicación para almacenar archivos.
Operaciones de archivos en Android NDK
Su código está generando un error en mi emulador. Pero tu dices
Cuando corro en la primera aplicación Android de tiempo todo va Bien, puedo ver los registros en el archivo Log.txt
Tal vez usted podría enviarnos más de su código, para que podamos reproducir el error.
Este es mi intento de reproducir tu pregunta
#include<stdio.h> #include<jni.h> #include<android/log.h>//allow android logging #include<errno.h>//for errors #include<string.h> #define LOG_TAG "DEO MSG"//all my logs are labeled with this #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) void Java_com_deo_MyActivity_writeLogFileUsingC(JNIEnv * env, jobject thisObject) { char filename[]="/data/LogTest/Log.txt"; LOGE("native method started");//is used exactly like the usual printf() FILE * pFile; LOGE("trying to open file for writing"); pFile= fopen(filename, "w"); if(pFile==NULL) { LOGE("Failed to open the file %s in mode 'w'.(DETAILS)%s ",filename,strerror(errno)); } else { LOGE("trying to write to file"); fprintf(pFile,"logExample "); //example of a log. fclose(pFile);//safely close our file LOGE("file writing done"); } }
El error que genera en logcat es
ERROR/DEO MSG(816): Failed to open the file /data/LogTest/Log.txt in mode 'w'.(DETAILS)No such file or directory
Creo que mi problema con su código puede ser permisos. Descríbelo más para nosotros.
PD:
- Personalmente prefiero usar el logcat para depurar en comparación con los archivos de registro
- ¿Cómo compartir una variable entre Java y C en android JNI?
- Mantener un registro de los SMS enviados en Android