2012-09-08 17 views
1

我目前正在嘗試將數據寫入到我在手機上運行的HID驅動程序。如果我在shell(通過adb)中運行以下命令echo -e \\x00\\x00\\x07\\x04\\x00\\x00\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0,則在連接到設備的計算機上輸入正確的字符,在本例中爲da。然而,如果我在Android應用程序發送相同的命令,像這樣Android根應用程序回聲不能使用設備驅動程序

Runtime shell = Runtime.getRuntime(); 
Process p = shell.exec("su"); 
DataOutputStream out = new DataOutputStream(p.getOutputStream()); 
out.writeBytes("echo -e \\x00\\x00\\x07\\x04\\x00\\x00\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0\n"); 

2個單引號印刷,但沒有別的。我已經證明,該應用程序正在通過將文件寫入只能由root加以認可的位置來獲得root權限。

那麼,爲什麼像這樣的命令不像在拋出流程類的shell中採用相同的方式呢?有沒有人有任何建議,我應該如何發送數據到我的設備驅動程序?

感謝 阿德里安

PS我也有試過shell.exec("echo -e \\x00\\x00\\x07\\x04\\x16\\x06\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0");但是這給我什麼

回答

1

Java進程流後,外殼是看到這個命令:

echo -e \x00\x00\x07\x04\x00\x00\x00... 

即Java是處理雙反斜槓本身。您需要添加另一組轉義反斜槓,以便shell實際看到一個轉義反斜槓。你可以做

out.writeBytes("echo -e \\\\x00\\\\x00...") 

但這看起來很可怕。只需通過一個帶引號的字符串到外殼

out.writeBytes("echo -e '\\x00\\x00\\x07\\x04\\x00\\x00\\x00' > /dev/hidg0 && echo -e '\\x00\\x00\\x00\\x00\\x00\\x00\\x00' > /dev/hidg0\n"); 
+0

完美工作。不能相信我沒有看到它。謝謝 – Darc

相關問題