C语言中打印log到android控制台

一、引入log库

  • 1.如果是使用android.mk的方式手动生成so库,在android.mk的配置文件中加入配置:

      LOCAL_LDLIBS += -llog
    
  • 2.如果是使用构建脚本的方式生成so库,需要在build.gradle文件的ndk闭包中配置:

      defaultConfig {
          applicationId "com.huyingzi.xxxx"
          minSdkVersion 15
          targetSdkVersion 22
          versionCode 1
          versionName "1.0"
    
          testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
          ndk{
              moduleName "helloword"
              abiFilters "armeabi","armeabi-v7a","x86"
    
              ldLibs "log"  //引入log库
          }
      }
    

3.如果是使用Cmake的方式构建so库,在CMakeLists.txt文件里面已经默认引入log库不需要再自行配制

二、C代码中引入头文件

#include <android/log.h>
#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

三、打印日志的代码(跟C语言中printf的使用方式一样)

    //打印logcat
    LOGD("name=%s age=%f\n",name,age);

四、给jni日志添加开关

#include <android/log.h>
#define DEBUG 0 //日志开关,1为开,其它为关
#if(DEBUG==1)
#define LOG_TAG "JNI"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#else
#define LOGV(...) NULL
#define LOGD(...) NULL
#define LOGI(...) NULL
#define LOGE(...) NULL
#endif

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 122,440评论 15 533
  • Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI...
    AlphaGL阅读 2,000评论 0 22
  • 一、NDK产生的背景 Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于J...
    Ten_Minutes阅读 2,230评论 1 27
  • 从前旧事休再提 往事从此尽 各走天涯 以往回忆随风吹 心中各挂念 不再泛起 痴情此一朝 花开不再恋 梦里往痴他朝笑...
    甘古阅读 42评论 1 1
  • 一,图片排成一排,向左一直切换,或向右一直切换,左右滚动无限循环原理 二,左右滚动无限循环 代码预览 三,淡入淡出...
    从前慢pearl阅读 190评论 0 0