Android SDK/NDKには開発者向けにログ出力機能が備わっている。今回はそれを試しに使ってみる。
javaではandroid.util.LogをインポートすればLog.v()、Log.d()、Log.i()、Log.w()、Log.e()関数でログ出力できる。
package com.Test112; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.util.Log; public class Test112Act extends Activity { //ログを出力するならtrue、出力しないならfalse //リリースビルドではfalseにする final boolean LOCAL_LOGD = true; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv); //5種類のログを出力 if(LOCAL_LOGD) { Log.v("Tag","Test Message : Log.v() for VERBOSE"); Log.d("Tag","Test Message : Log.d() for DEBUG"); Log.i("Tag","Test Message : Log.i() for INFO"); Log.w("Tag","Test Message : Log.w() for WARN"); Log.e("Tag","Test Message : Log.e() for ERROR"); } } public native String stringFromJNI(); static { System.loadLibrary("Test112jni"); } }

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := Test112jni LOCAL_SRC_FILES := Test112jni.c LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
実際の出力は__android_log_write()や__android_log_print()で行う。__android_log_write()は固定メッセージをログ出力、__android_log_print()はprintfのように書式化して出力できる。
//ログを出力する。ログ出力しないなら次の1行をコメントアウトすること #define LOCAL_LOG #include <string.h> #include <jni.h> #ifdef LOCAL_LOG #include <android/log.h> #endif jstring Java_com_Test112_Test112Act_stringFromJNI(JNIEnv* env,jobject thiz) { #ifdef LOCAL_LOG //ログを出力 __android_log_write(ANDROID_LOG_DEBUG,"Tag","Test Message : __android_log_write() with ANDROID_LOG_DEBUG"); __android_log_print(ANDROID_LOG_DEBUG,"Tag","Test Message : __android_log_print(%s) with ANDROID_LOG_DEBUG","test string"); // int nTest = 123; // __android_log_assert("nTest == 123","Tag","Test Message : __android_log_assert(nTest == 123) with nTest=%d",nTest); // __android_log_assert("nTest != 123","Tag","Test Message : __android_log_assert(nTest != 123) with nTest=%d",nTest); #endif return (*env)->NewStringUTF(env, "Test112text"); }
ログ出力を実装して実行した。実行時の見た目は実装前と変わらない。
出力されたログを見るには、Eclipseの「DDMS」画面の「LogCat」を利用する。
ここにログ出力日時とログ出力関数を呼び出したときの引数が表示される。
ログには種別があり、上部のボタンで表示レベルを切り換えれる。
VERBOSEでは全て表示、DEBUGではVERBOSE以外を表示、INFOではVERBOSEとDEBUG以外を表示、、、とV>D>I>W>Eの順番で表示されるログ種別が多い。
フィルター機能も備え、タグなどを指定して絞り込み表示できる。
絞り込みタブを削除するには「Delete Filter」ボタンを使う
プロジェクトファイルをダウンロード