我正在为Android编写应用程序并使用本机代码,并在 Android-Emulator 上进行测试。为了查看JNI代码中发生的情况,我在Android / data / LogTest / 文件夹中创建文件,并在其中写入我的日志信息。
FILE * pFile;
pFile = fopen ("/data/LogTest/Log.txt"", "w");
// ....
// Write some logs to file ...
// ....
当我第一次运行Android应用程序时,一切正常,我可以看到Log.txt文件中的日志。但当我关闭Android应用程序并再次运行它没有任何事情发生。就像应用程序无法第二次将日志写入文件一样。
我认为这个问题的主要原因是 ,当我第一次创建文件时,创建者应用程序名称是ex。 456之后,当我尝试将更多信息写入文件应用程序名称是为了ex。 856因此 应用程序856无法写入已创建应用程序456的文件 。
答案 0 :(得分:1)
您的代码在我的模拟器上生成错误。但你说
当我第一次在Android上运行时 申请一切顺利,我 可以在Log.txt文件中看到日志
也许您可以向我们发送更多代码,以便我们重现错误。
这是我尝试复制你的问题
#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");
}
}
它在logcat中生成的错误是
ERROR/DEO MSG(816): Failed to open the file /data/LogTest/Log.txt in mode 'w'.(DETAILS)No such file or directory
我认为我的代码问题可能是权限问题。更多地为我们描述它 PS:
答案 1 :(得分:0)
我认为你不能写在那个文件夹中。在这里阅读答案。使用sdk卡或应用程序目录来存储文件。