Any simple way to log in Android NDK code? Any simple way to log in Android NDK code? android android

Any simple way to log in Android NDK code?


You can use the Android logging facilities:

#include <android/log.h>#define APPNAME "MyApp"__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "The value of 1 + 1 is %d", 1+1);

Make sure you also link against the logging library, in your Android.mk file:

  LOCAL_LDLIBS := -llog


No one has posted info about different log levels so far. The answer is an attempt to make the logging "picture" full.

#include <android/log.h>#define TAG "MY_TAG"#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,    TAG, __VA_ARGS__)#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,     TAG, __VA_ARGS__)#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,     TAG, __VA_ARGS__)#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,    TAG, __VA_ARGS__)

Usage:

char err[] = "wrong";LOGE("Something went %s", err);

Link Android log library as below.

Android.mk:

LOCAL_LDLIBS := -llog

CMakeLists.txt:

find_library( log-lib log )target_link_libraries( ${log-lib} )

Further reading: Logging


The easiest way is probably to redirect printf() statements to the system log (based on the "Viewing stdout and stderr" section of the official ADB reference manual.

Type these 3 commands on a command line:

adb shell stopadb shell setprop log.redirect-stdio trueadb shell start

Then you can view the output of your "printf()" statements by looking at the "LogCat" window of Eclipse Debugger, or by typing this on a command line:

adb logcat

Just be aware that since the data is buffered before transferring from the emulator or device, you should definitely flush the stdout buffer, eg:

printf("Hello, I am %d years old!\n", 30);fflush(stdout);

You should then see a log message starting with "I/stdout:"