HelloJni.c文件中,加入头文件和函数声明。最终文件如下:
#include <jni.h> #include <string.h> #include<android/log.h> #define LOG "HelloJni" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__) // 定义LOGD类型 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__) // 定义LOGI类型 #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG,__VA_ARGS__) // 定义LOGW类型 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG,__VA_ARGS__) // 定义LOGE类型 JNIEXPORT jstring JNICALL Java_ndk_test_com_testndk_TestJni_getString(JNIEnv *env, jclass type) { LOGI("call from jni!"); return (*env)->NewStringUTF(env, "from jni"); }
记得#include<android/log.h>
除了ANDROID_LOG_INFO这个日志级别,还有如下的:
ANDROID_LOG_UNKNOWN
ANDROID_LOG_DEFAULT
ANDROID_LOG_VERBOSE
ANDROID_LOG_DEBUG
ANDROID_LOG_INFO
ANDROID_LOG_WARN
ANDROID_LOG_ERROR
ANDROID_LOG_FATAL
ANDROID_LOG_SILENT
如果出现 undefined reference to `__android_log_print'的编译异常在android studio的build文件里面
需要添加 ldLibs.addAll(['android', 'log'])
ndk { moduleName = 'hello-jni' ldLibs.addAll(['android', 'log']) }
好了,运行程序吧
工具类
#ifndef LIBJPEG_JNILOG_H #define LIBJPEG_JNILOG_H #define LOG "libimg" #define LOGOPEN 1 //日志开关,1为开,其它为关 #if(LOGOPEN==1) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__) // 定义LOGD类型 #else #define LOGD(...) NULL #endif #if(LOGOPEN==1) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__) // 定义LOGI类型 #else #define LOGI(...) NULL #endif #if(LOGOPEN==1) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG,__VA_ARGS__) // 定义LOGW类型 #else #define LOGW(...) NULL #endif #if(LOGOPEN==1) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG,__VA_ARGS__) // 定义LOGE类型 #else #define LOGE(...) NULL #endif #endif //LIBJPEG_JNILOG_H