53

Android NDKでC++を使用してロギングを設定しました。

次のように logcat にメッセージを出力できます。

__android_log_write(ANDROID_LOG_INFO, "tag here", "message here");

ここで、 testintという整数があるとします。この int の値を出力するにはどうすればよいですか?

このようなものはアドレスを出力しますが、値が必要です。これを行う方法について、 C++で何も見つかりませんでした。助けてくれてありがとう!

__android_log_print(ANDROID_LOG_INFO, "sometag", "%p", *test);
4

4 に答える 4

71

私が見た中で最も簡潔な方法は次のとおりです。

#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
于 2013-11-21T02:10:33.880 に答える
52

データを文字列にフォーマットするような構文を__android_log_print使用する which を使用できます。sprintf

__android_log_print(ANDROID_LOG_INFO, "sometag", "test int = %d", testInt);
于 2012-08-28T12:39:21.760 に答える
14

利用可能な可変個引数ログ印刷機能を利用してください。私自身のコードでは、簡単にするために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);
}
于 2012-08-28T12:46:59.880 に答える
11

__android_log_print() は、フォーマット文字列と可変引数リストを取ります。符号付き整数を出力するために探している書式指定子は "%d" です。したがって、次のようなものが必要です。

int foo = 42;
__android_log_print(ANDROID_LOG_INFO, "SomeTag", "foo is %d", foo);

フォーマット文字列の詳細については、sprintf のマニュアルを参照してください。

于 2012-08-29T07:03:35.790 に答える