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
_
ああ..忘れて..出力は、タグ_LOG_TAG
_でLogcat
に表示されます
簡単なアプローチ
共通ヘッダーファイルに次の行を追加します。
_#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
_
_printf in c
_のようにLOGD("Hello world") or LOGE("Number = %d", any_int)
を呼び出すだけです。
共通ヘッダーファイルを含めることを忘れないでください。
ロギングを削除する
LOGD(...)
を空に定義すると、すべてのログが消えます。 LOGD(...)
の後にコメントしてください。
#define LOGD(...) // __Android_log..... rest of the code
次の2つのオプションがあります。
1)printfを__Android_log_printに置き換えます。これは、コードの先頭で定義することで簡単に行えます。
#define printf(...) __Android_log_print(Android_LOG_DEBUG, "TAG", __VA_ARGS__);
もちろん、これにはprintfを持つすべてのソースコードを変更する必要があります。
2)stdoutとstderrをAndroid logcatにリダイレクトします(これがルート化されていないデバイスで動作するかどうかはわかりません): http://developer.Android.com/guide/developing/ debugging/debugging-log.html#viewingStd
デバイスをルート化する必要はありません。 http://developer.Android.com/guide/developing/debugging/debugging-log.html#viewingStd にアクセスすると、以下のように動作します。
$ adb Shell
$ su
$ stop
$ setprop log.redirect-stdio true
$ start
できた!