Android之jni日志如何输出
2017-05-13 17:59
288 查看
1、写日志输出帮助文件
先看我之间的例子 http://blog.csdn.net/u011068702/article/details/71375920 Android之JNI动态注册native方法和JNI数据简单使用
然后在jni文件集里面写log_help.h文件,内容如下
// // Created by chenyu on 5/13/17. // #ifndef TEST_LOG_HELP_H #define TEST_LOG_HELP_H #include <android/log.h> #define debug_on 1 #ifdef debug_on #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) // 定义LOGD类型 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) // 定义LOGI类型 #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__) // 定义LOGW类型 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__) // 定义LOGE类型 #define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__) // 定义LOGF类型 #endif #endif //TEST_LOG_HELP_H
2、在Android.mk里面配置
在Android.mk配置文件里面加上下面的代码LOCAL_LDLIBS :=-llog
注意Android.mk里有一行include $(CLEAR_VARS) 必须把LOCAL_LDLIBS :=-llog放在它后面才有用, 否则相当于没写
3、怎么使用
比如在我的上个例子JniClient.c文件导入#include <log_help.h>文件,加上TAG#define TAG "JniClient"
我一开始是这样写的
#define TAG JniClient
编译的时候出现了这个问题
所以要加上双引号,但是我自己在用vim里面写了简单C文件,可以不要双引号编译成功。
删除日志的代码如下:
jstring get_str(JNIEnv* env, jobject thiz) { LOGD("hello chenyu"); char * str = "this is first LOGD"; LOGD("hello chenyu %s", str); return (*env)->NewStringUTF(env, "I am chenyu, 动态注册JNI"); }
jint add_int(JNIEnv* env, jobject jobj, jint num1, jint num2) { LOGD("nums + num2 is %d", num1 + num2); return num1 + num2; }
/* * System.loadLibrary("lib")时调用 * 如果成功返回JNI版本, 失败返回-1 */ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { LOGD("this is jni start and will exec JNI_OnLoad methos"); JNIEnv* env = NULL; jint result = -1; if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) { return -1; } assert(env != NULL); if (!registerNatives(env)) {//注册 return -1; } //成功 result = JNI_VERSION_1_4; return result; }
如果日志加上了TAG
LOGD(TAG, "hello I am chenyu from jni");那么在log_help.h文件这样定义LOGD
#define LOGI(tag, fmt, ...) __android_log_print(ANDROID_LOG_INFO, (tag), (fmt), ## __VA_ARGS__)
#define LOGD(tag, fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, (tag), (fmt), ## __VA_ARGS__)
#define LOGW(tag, fmt, ...) __android_log_print(ANDROID_LOG_WARN, (tag), (fmt), ## __VA_ARGS__)
#define LOGE(tag, fmt, ...) __android_log_print(ANDROID_LOG_ERROR, (tag), (fmt), ## __VA_ARGS__)
4、运行结果
相关文章推荐
- Cocos2d-x 中如何输出 Android手机下 带Tag的Log日志
- 在android jni中添加输出日志Log
- Android 本地代码如何输出日志
- Android 如何统一管理log日志,在发布版本时不输出任何日志信息。
- Android 本地代码如何输出日志
- Android 本地代码如何输出日志
- android应用如何在发布市场时关掉所有的Log日志输出
- [转]Android 本地代码如何输出日志
- android应用如何在发布市场时关掉所有的Log日志输出
- android应用如何在发布市场时关掉所有的Log日志输出
- android应用如何在发布市场时关掉所有的Log日志输出
- 如何减少Jboss控制台和日志的信息输出 4.2版
- 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
- Android JNI打印c\c++日志信息
- Android中默认不输出stdout stderr,如何输出?最简单的方法
- android中怎样让手机测试的日志在logCat输出?
- 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
- android 如何在JNI编程中使用logCat
- android单元测试用例和日志输出
- 如何在Windows下实现将System.out输出到指定日志文件