要想在 jni native 代码中看打印信息,printf 是不行的,需使用 __android_log_print,如下所示。
__android_log_print(ANDROID_LOG_INFO, "ProjectName", "I am : %d/n", n);
该函数与 printf 用法相似,使用格式字符。打印的结果通过 logcat 查看。
注意,使用时需要将头文件 android/log.h 包含进来。
为方便使用,往往定义一些宏
LOG_H.H:
#include <android/log.h>
#ifndef LOG #define LOG "IPTV"// "ffmpegDemo-jni" // 这个是自定义的LOG的标识 #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类型 #define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,LOG,__VA_ARGS__) // 定义LOGF类型 #endif
Usage:LOGD("HELLO WORLD");
- int width=10;
- int height=20;
- LOGI(LOG, "长和宽分别为 %d ,%d“,width,height);
ANDROID.MK :LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := YOU_LIB_NAME (the same to android code) LOCAL_SRC_FILES := \ JavaToC.c \ Operate.c LOCAL_LDLIBS := -llog LOCAL_C_INCLUDES += system/core/include/cutils LOCAL_SHARED_LIBRARIES := libcutils include $(BUILD_SHARED_LIBRARY)生成的库在out/../system/lib 下面 /********************************************************/ 在运行android 时出现 E/AndroidRuntime(7975): java.lang.UnsatisfiedLinkError: add 要在Z:\linux\HiSTBAndroidV400R001C00SPC050B012\out\target\product\godbox\obj\SHARED_LIBRARIES\你的库名_intermediates\LINKED下找 库名必须要加前缀lib才进一步push /system/lib C/C++ 函数要加上 JAVA_包名_你的函数名