NDKアプリケーションで書かれたprintfメッセージを取得するには?



Javaファイルでそのような関数を定義している場合


  /** 
* Adds two integers, returning their sum
*/
public native int add( int v1, int v2 );

だから私はCファイルでコーディングする必要があります


JNIEXPORT jint JNICALL Java_com_marakana_NativeLib_add
(JNIEnv * env, jobject obj, jint value1, jint value2) {
printf("\n this is log messge \n");
return (value1 + value2);
}

次に、このprintfがどこからメッセージを出力しますか?
logcate でわかりませんか?


ログメッセージを出力して NDK アプリケーションをデバッグするにはどうすればよいですか?


答え:


__android_log_print() を使用 代わりは。ヘッダー <android/log.h> を含める必要があります


サンプル例。 __android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "\n this is log messge \n");


printf のような書式指定子を使用することもできます -


__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "Need to print : %d %s",int_var, str_var);

Android.mk ファイルで、ログ ライブラリにもリンクしていることを確認してください。


  LOCAL_LDLIBS := -llog

ああ..忘れた..出力は Logcat に表示されます タグ LOG_TAG 付き


簡単なアプローチ


次の行を共通ヘッダー ファイルに追加します。


#include <android/log.h>
#define LOG_TAG "your-log-tag"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
// If you want you can add other log definition for info, warning etc

LOGD("Hello world") or LOGE("Number = %d", any_int) を呼び出すだけです printf in c のように .


共通ヘッダー ファイルを含めることを忘れないでください。


ログを削除


LOGD(...) を定義すると 空の場合、すべてのログがなくなります。 LOGD(...) の後にコメントするだけです .


#define LOGD(...) // __android_log..... rest of the code