Android-JNIでログ印刷を実現

1894 ワード

今日はAndroid-JNIがログを印刷する方式を記録して、開発しやすいです!
一、logヘッダファイルのインポート
ログを印刷する必要がある.c/.cppファイルにlogをインポートする.hファイル
 #include

二、Android.mkに加算
LOCAL_LDLIBS :=-llog

注意しろmkにはinclude$(CLEAR_VARS)が1行あり、LOCAL_LDLIBS:=-llogはその後ろに置いてから有効になります.
三、LOG関数を定義し、まずグローバル変数を定義し、出力のLOG関数を定義する.
#define TAG "dzh" //        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()等の方法
四、使用例
#include 
#include 
#include 
 
#define TAG    "dzh" //        LOG   
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__) //   LOGD  
 
 extern "C" {
     JNIEXPORT jstring JNICALL Java_com_dzh_helloworld_MainActivity_hello(JNIEnv * env, jobject obj);
 };
 
 JNIEXPORT jstring JNICALL Java_com_dzh_helloworld_MainActivity_hello(JNIEnv * env, jobject obj){
         int i = 0;
         char * str ="Im test log!"
         LOGD("log value => %d", i);
         LOGD("log value => %s", str);
     return env->NewStringUTF("jni text");
 }


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)

五、結びの言葉
以上の手順でjniでログを印刷することができます!