Redirect stdout to logcat in Android NDK
android, android-ndk
Solution
`setprop log.redirect-stdio true` redirects only output generated by java code, but not the native code. This fact is described on developer.android.com in following way:
By default, the Android system sends stdout and stderr (System.out and System.err) output to /dev/null. In processes that run the Dalvik VM, you can have the system write a copy of the output to the log file.
To get output from the native code, I really liked this solution
Problem
I can't get my Nexus S (running Android 4.0) to redirect native stdout message to logcat. I've read that I need to do this: ``` $ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start ``` However, this doesn't seem to work. (It does break JUnit though, as mentioned here, so it's not without effect.) For reference, here's my code: ``` package com.mayastudios; import android.util.Log; public class JniTester { public static void test() { Log.e("---------", "Start of test"); System.err.println("This message comes from Java."); void printCMessage(); Log.e("---------", "End of test"); } private static native int printCMessage(); static { System.loadLibrary("jni_test"); } } ``` And the JNI .c file: ``` JNIEXPORT void JNICALL Java_com_mayastudios_JniTester_printCMessage(JNIEnv *env, jclass cls) { setvbuf(stdout, NULL, _IONBF, 0); printf("This message comes from C (JNI).\n"); fflush(stdout); //setvbuf(stderr, NULL, _IONBF, 0); //fprintf(stderr, "This message comes from C (JNI).\n"); //fflush(stderr); } ``` And the Android.mk: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := jni_test LOCAL_SRC_FILES := test_jni.c include $(BUILD_SHARED_LIBRARY) ``` I'm compiling this just by calling `ndk-build`. The native method is called correctly but I don't get any log output from it (even on verbose). I do get the log output from Java though ("This message comes from Java."). Any hints of what I might be doing wrong? PS: I've set up a small Mercurial repository that demonstrates the problem: https://bitbucket.org/skrysmanski/android-ndk-log-output/
Related problems
- How to get "printf" messages written in NDK application?
- C/C++ printfs - Where's it appears in a Android native code?
- Trying to run trivial Android JUnit tests. Getting: "Test run failed: No test results" What am I missing?
- Why is redirecting stdout/stderr on android not working?
- Android Native Code Debugging