짧은의 출력을 소모 자바에서 프로세스를 실행 : 자바에서 프로세스를 호출하고 출력이 JNI를 통해 호출되는 C++ 기능에 의해 소비 될 수있는 가장 좋은 방법은 무엇입니까.는 C++
긴 : 에 대한 로그 판독기 응용 프로그램으로 실험 중입니다. Android. 이를 위해서는 logcat
명령을 실행하고 출력을 구문 분석해야합니다. 나는 에서 Java을 시도했지만 수행 된 메모리 할당량은 프로세스가 완전히 느려지지는 않을뿐만 아니라 매우 많은 로그가 동일한 로그를 GC 관련 항목과 겹치게합니다.
그 이유로 저는 모든 구문 분석 관련 연산을 C++에 구현했습니다. 그러나, 보통 fork/exec
관용구를 사용하여 C++ 쪽에서 을 호출 할 때는 NDK으로 실제로 지원되지 않습니다. 대신, 내가 에서 Java의 프로세스를 시작하고 어떤 식 으로든 C++ 코드에 해당 출력을 액세스 할 수있게해야합니다. 이상적으로는이 파이프를 사용하지만 ProcessBuilder
의 redirectOutput
메소드는 에서 안드로이드 중 하나에서 사용할 수 없습니다.
내가 지금까지 함께 온 가장 좋은 방법은 (logcat > tempfile
를 사용하여) 임시 파일에 출력을 리디렉션 프로세스를 시작하고, 그 파일에서 읽은 C++ 코드를 가지고있다. 그러나 이것은 이상과는 거리가 멀다. 거기에 더 나은 방법은 네이티브 코드에서 프로세스의 출력에 액세스 할 수 있습니다 에서 시작 자바?
모두 좋은 점입니다. 4.1에서 소개 된 제한 사항을 알지 못했습니다. Dalvik이 NDK에서 프로세스를 시작하는 문제는 Dalvik이 해당 프로세스에 대해 알지 못한다는 것이 었습니다. –