C++ in Android NDK。
次のようにlogcatにメッセージを出力できます。
__Android_log_write(Android_LOG_INFO, "tag here", "message here");
ここで、testintという整数があるとします。このintの値を印刷するにはどうすればよいですか?
このようなものは住所を表示しますが、値が欲しいです。 C++でこれを行う方法については何も見つかりませんでした。助けてくれてありがとう!
__Android_log_print(Android_LOG_INFO, "sometag", "%p", *test);
データを文字列にフォーマットするsprintf
のような構文を使用する__Android_log_print
を使用できます。
__Android_log_print(Android_LOG_INFO, "sometag", "test int = %d", testInt);
これが私が見た最も簡潔な方法です:
#include <Android/log.h>
#define LOG_TAG "someTag"
#define LOGE(...) __Android_log_print(Android_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define LOGW(...) __Android_log_print(Android_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __Android_log_print(Android_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define LOGI(...) __Android_log_print(Android_LOG_INFO,LOG_TAG,__VA_ARGS__)
...
// Now you can log very simply like this:
int foo = 42;
LOGD( "This is a number from JNI: %d", foo );
また、Android.mkのログライブラリにリンクしていることを確認してください。
LOCAL_LDLIBS := -llog
使用可能な可変長ログ印刷機能を利用してください。私自身のコードのために、LogInfo()関数を提供して簡単にします。もちろん、ここで利用できるいくつかのオプションがあります。
void LogInfo(const char *sTag, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
__Android_log_vprint(Android_LOG_INFO, sTag, fmt, ap);
va_end(ap);
}
__Android_log_print()は、フォーマット文字列と可変引数リストを取ります。符号付き整数を出力するために探している形式指定子は「%d」です。そのため、次のようなものが必要です。
int foo = 42;
__Android_log_print(Android_LOG_INFO, "SomeTag", "foo is %d", foo);
フォーマット文字列の詳細については、 sprintf manual をご覧ください。