Nie mogę pobrać Nexusa S (z systemem Android 4.0), aby przekierować macierzystą wiadomość wyjściową do logcat. Czytałem, że muszę to zrobić:Przekieruj stdout na logcat w systemie Android NDK
$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start
To jednak nie działa. (Robi złamać JUnit choć, jak wspomniano here, więc to nie jest bez efektu).
Dla porównania, tutaj jest mój kod:
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");
}
}
a plik .c JNI:
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);
}
I kompilacja tego jest dostępna pod numerem.. Natywna metoda jest wywoływana poprawnie, ale nie otrzymuję z niej żadnego logu (nawet w pełnym rozmiarze). Dostaję dane wyjściowe dziennika z Javy ("Ta wiadomość pochodzi z Java.").
Jakieś wskazówki na temat tego, co robię źle?
PS: Mam założyć małą Mercurial repozytorium, który pokazuje problem: https://bitbucket.org/skrysmanski/android-ndk-log-output/
Sprawdź moją odpowiedź w tym questino - http : //stackoverflow.com/questions/10274920/how-to-get-printf-messgaes-written-in-ndk-application/10275209#10275209 – Shaiful
Jestem świadomy tego rozwiązania (i właśnie to wykorzystałem). Jednak pierwotne pytanie pozostaje nadal. Może to tylko błąd. –
Czy próbowałeś usunąć wywołanie setvbuf? Mam printf po tym, jak fflush pokazuje się w logu poprawnie w kodzie, który nie używa setvbuf. –