Android Stuido Ndk-Jni開発(二):Jniにロゴ情報を印刷する

4076 ワード

Android Stuido Ndk-Jni開発(二):Jniにロゴ情報を印刷する
logヘッダファイルのインポート
logを印刷する必要があるc/c++ソースファイルにandroid/logを追加する.hヘッダファイル
#include

LOGマクロ定義の追加
android/logを導入する.hのソースファイルにLOG_を定義するTAGは、ログのマクロ定義を追加し、使いやすい:
#ifndef LOG_TAG
#define LOG_TAG "HELLO_JNI"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG ,__VA_ARGS__) //   LOGD  
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__) //   LOGI  
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG ,__VA_ARGS__) //   LOGW  
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG ,__VA_ARGS__) //   LOGE  
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,LOG_TAG ,__VA_ARGS__) //   LOGF  
#endif

上記コードで定義方法は、AndroidにおけるJavaコードのLogにそれぞれ対応する.d(), Log.i(), Log.w(),Log.e(), Log.f()などの方法.
在build.gradleにライブラリを追加
appディレクトリの下にあるbuild.gradleでロードするlogを設定し、defaultConfigに追加します.
        ndk {
            moduleName "HelloJni" //      HelloJni.so
            ldLibs "log", "z", "m"
        }

ログの印刷
コードで直接使用
LOGD("LOG from JNI");

完全なコードは次のとおりです.
//
// Created by DRAGON-JIANG on 2016/2/17.
//
#include 
#include

#ifndef LOG_TAG
#define LOG_TAG "HELLO_JNI"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG ,__VA_ARGS__) //   LOGD  
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__) //   LOGI  
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG ,__VA_ARGS__) //   LOGW  
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG ,__VA_ARGS__) //   LOGE  
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,LOG_TAG ,__VA_ARGS__) //   LOGF  
#endif

/*
 * Class:     com_dj_jni_hellojni_NativeHelper
 * Method:    getStringFromJni
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_dj_jni_hellojni_NativeHelper_getStringFromJni
        (JNIEnv *env, jobject obj){

    LOGD("LOG from JNI");

    return (*env)->NewStringUTF(env,"Hello from JNI !");
}

次に、Build->Make Project、Run->Run'appを実行します.logcat出力結果が表示されます.
ログメソッドはフォーマット出力もサポートしていますよ、また追加します
    char *name = "JNI";
    LOGD("My name is %s.", name);

logcat出力結果を表示するには、次の手順に従います.