web-dev-qa-db-ja.com

C / C ++ printfs-Androidネイティブコードのどこに表示されますか?

ネイティブAndroidコードをデバッグするのはかなり難しいので、「printftrace」アプローチを使用します。

だから、私の質問は、ネイティブコードで、Androidアプリケーションを実行しているときに標準「printf( "something")」がどこに表示されるかです。

22

Logcatにログを記録します。

1)ネイティブコードでロガーを呼び出すには、ヘッダーを含めて_Android_log_write(..)を呼び出します。

#include <Android/log.h>

__Android_log_write(Android_LOG_INFO, "tag here", "message here");

2)Android.mkファイルに次のようなログライブラリを含めます。

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
41
Ryan Reeves

Logcatにログを記録するために使用できる短いマクロがあります。

_#define LOG_TAG "my_log_tag"
#include <cutils/log.h>

ALOGD("Format this %d", some_int);
_

Android.mkで、「mydroid」をビルドするときにliblogライブラリを_LOCAL_SHARED_LIBRARIES_に追加します(full Androidシステムビルド)。ndkビルドの場合LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog に使える。

_include $(CLEAR_VARS)
LOCAL_MODULE    := foo
LOCAL_SRC_FILES := foo.c
# if mydroid
LOCAL_SHARED_LIBRARIES := liblog
# in ndk, use LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog instead
include $(BUILD_EXECUTABLE)
_

ロギングのすべてのレベルに対して定義された他のさまざまなマクロがあります。 _cutils/log.h_から:

_#define ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))
...
#define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__))
_
2
gfrigon