您的位置:首页 > 移动开发 > Android开发

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、运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: