Kurz : Wie kann man einen Prozess am besten von Java und dessen Ausgabe von einem C++ Funktion, die über JNI .
Lang : Ich experimentiere mit einer Log-Reader-Anwendung für Android . Dazu muss ich die logcat
Befehl und analysiert dessen Ausgabe. Ich habe dies versucht von Java aber die Menge der durchgeführten Speicherzuweisungen ist so groß, dass der Prozess nicht nur sehr langsam ist, sondern auch das Protokoll mit vielen Daten überfüllt. GC verwandte Einträge.
Aus diesem Grund habe ich alle mit dem Parsing verbundenen Operationen in C++ . Ich kann jedoch nicht die übliche fork/exec
Redewendung zum Aufrufen logcat
von der C++ Seite, da sie nicht wirklich von der NDK . Stattdessen muss ich den Prozess von vorne beginnen Java und machen Sie die Ausgabe irgendwie zugänglich für die C++ Code. Idealerweise würde ich dafür eine Pipe verwenden, aber die redirectOutput
Methoden aus ProcessBuilder
sind nicht verfügbar auf Android entweder.
Die beste Lösung, die ich bisher gefunden habe, ist, den Prozess zu starten und seine Ausgabe in eine temporäre Datei umzuleiten (mit logcat > tempfile
), und haben die C++ Code aus dieser Datei gelesen. Dies ist jedoch alles andere als ideal. Gibt es eine bessere Möglichkeit, nativen Code auf die Ausgabe eines Prozesses zugreifen zu lassen, der von Java ?