2010-09-21 62 views
2

我想在使用Process.start()的NDK上運行tcpdump並希望將此輸出捕獲到緩衝區。任何人都可以告訴我該如何做到這一點?同樣是在同一過程中創建的進程Dalvik Vm作爲JNI調用還是它在不同的VM?運行本機進程的Android NDK

回答

4

運行本機進程並不是真正支持ndk的使用,但您不會是第一個執行此操作的人。

另請注意,tcpdump可能需要以root或setuid root身份運行纔能有用。你有一個版本的tcpdump編譯和鏈接適當的android?

我認爲你實際上想要的是android.os.Exec.createSubprocess這是這個,而不是公開的,而不是Process.start。有一種使用反射的正確方法,通過將Exec.java(具有本地方法的聲明)複製到項目中是錯誤的方法。您可以使用管道來恢復結果,也可以通過shell啓動它並將輸出重定向到您從java讀取的文件。

查看帶有本地shell選項的android終端模擬器的源代碼,瞭解如何執行此操作的示例。

(實際上,我應該重申一下 - 正確的做法是在您自己的jni庫中複製非公開Exec方法的本地功能,以便您不受非公開部分中的更改影響的平臺)。

+0

將嘗試...感謝您的幫助 – Jony 2010-09-23 05:50:42

相關問題