android—–JNI中的log打印

1. 導入log頭文件

在你使用的 .c/ .cpp 文件中

導入 log.h 頭文件

 #include<android/log.h>

 

2.在Android.mk 中

加上

LOCAL_LDLIBS :=-llog

註意Android.mk裡有一行include $(CLEAR_VARS)

必須把LOCAL_LDLIBS :=-llog放在它後面才有用,

否則相當於沒寫。

 

3. 定義LOG 函數

先定義一個全局變量,再定義一些輸出的LOG函數:

 #define TAG "myDemo-jni" // 這個是自定義的LOG的標識   
#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類型  

#define TAG "myDemo-jni" // 這個是自定義的LOG的標識
#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類型

上述代碼中定義的函數

分別對應於Android 的Java代碼中的

 Log.d(), Log.i(), Log.w(),Log.e(), Log.f()等方法.

 

4.舉例

 

#include <jni.h>  
#include <string.h>  
#include <android/log.h>  
 
#define TAG    "myhello-jni-test" // 這個是自定義的LOG的標識  
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__) // 定義LOGD類型  
 
 extern "C" { 
     JNIEXPORT jstring JNICALL Java_com_snail_helloworld_MainActivity_myhello(JNIEnv * env, jobject obj); 
 }; 
 
 JNIEXPORT jstring JNICALL Java_com_snail_helloworld_MainActivity_myhello(JNIEnv * env, jobject obj) 
 { 
     int i = 0; 
     LOGD("########## i = %d", i); 
     return env->NewStringUTF("Hello From CPP"); 
 } 

#include <jni.h>
#include <string.h>
#include <android/log.h>

#define TAG    "myhello-jni-test" // 這個是自定義的LOG的標識
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__) // 定義LOGD類型

 extern "C" {
     JNIEXPORT jstring JNICALL Java_com_snail_helloworld_MainActivity_myhello(JNIEnv * env, jobject obj);
 };

 JNIEXPORT jstring JNICALL Java_com_snail_helloworld_MainActivity_myhello(JNIEnv * env, jobject obj)
 {
  int i = 0;
  LOGD("########## i = %d", i);
  return env->NewStringUTF("Hello From CPP");
 }

 

Android.mk

 

  

LOCAL_PATH := $(call my-dir) 
 
include $(CLEAR_VARS) 
 
LOCAL_MODULE    := hello 
LOCAL_SRC_FILES := hello.cpp 
LOCAL_LDLIBS :=-llog 
 
include $(BUILD_SHARED_LIBRARY) 

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello.cpp
LOCAL_LDLIBS :=-llog

include $(BUILD_SHARED_LIBRARY)


 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *