Android(Java):jni写文件打印调试信息
16lz
2021-01-23
Printf属于linux应用的打印机制,在androd系统当中没有对应的输出机制,只有在终端下执行时才能回显出来。
LOGE属于android专门定义的机制Android logger,专门打印除kernel外的所有应用的log输出。
AndroidNDK 开发时,想要在 .c 文件中打印一些调试信息的话,是不能使用 printf() 方法的,NDK 根本不支持,就算写了,在
LogCat 中也不会显示,正确的方式应该是 调用NDK 下的log.h 来打印Log 日志,具体方法如下:
1. 导入log头文件:在你使用的 .c/ .cpp 文件中,导入 log.h 头文件: #include<android/log.h>
在android.mak加上LOCAL_LDLIBS:=-llog
注意android.mak里有一行include$(CLEAR_VARS)
必须把LOCAL_LDLIBS:=-llog放在它后面才有用,否则相当于没写
2. 定义LOG 函数:先定义一个全局变量,再定义一些输出的LOG函数:
- #defineLOG"ffmpegDemo-jni"//这个是自定义的LOG的标识
- #defineLOGD(...)__android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__)//定义LOGD类型
- #defineLOGI(...)__android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__)//定义LOGI类型
- #defineLOGW(...)__android_log_print(ANDROID_LOG_WARN,LOG,__VA_ARGS__)//定义LOGW类型
- #defineLOGE(...)__android_log_print(ANDROID_LOG_ERROR,LOG,__VA_ARGS__)//定义LOGE类型
- #defineLOGF(...)__android_log_print(ANDROID_LOG_FATAL,LOG,__VA_ARGS__)//定义LOGF类型
上述代码中定义的函数,分别对应于Android 的Java代码中的 Log.d(), Log.i(), Log.w(),Log.e(), Log.f()等方法;
3. 使用上述方法:在.c 代码中直接按照一下方式书写:
- LOGD(LOG,"这是Debug的信息");
- LOGE(LOG,"程序错误!!!");
除此之外,更可以给在打印时带上一些变量:
- intwidth=10;
- intheight=20;
- LOGI(LOG,"长和宽分别为%d,%d“,width,height);
这种方式更加灵活,非常类似于 C语言中的 printf()函数。
今天在做项目的过程中,发现通过Jni不能往文件sd卡上写文件,后来发现要androidmanifest.xml中添加上读写文件的权限,手机自带的内存卡不需要此权限。<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
更多相关文章
- android构建自定义的视图组件
- Android配置----DDMS 连接真机(己ROOT),用file explore看不到data/
- android sqlLite 及Adapter 自定义和Adapter 改变UI
- 浅析Android下的Android.mk文件
- 在Android下创建文件夹
- Android自定义控件解析
- Android Launcher开发(一)LiveFolder(实时文件夹) 完全解析