2012-09-08 1 views
1

현재 휴대 전화에서 실행중인 HID 드라이버에 데이터를 쓰려고합니다. (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 루트 앱 에코가 장치 드라이버와 작동하지 않습니다.

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 작은 따옴표가 인쇄되지만 다른 것은 표시되지 않습니다. 루트 권한으로 만 액세스 할 수있는 위치에 파일을 작성하여 앱이 루트 권한을 얻고 있음을 증명했습니다.

그렇다면이 명령은 쉘에서 프로세스 클래스를 던진 것과 같은 방식으로 작동하지 않습니다. 그리고 아무도 내 장치 드라이버에 데이터를 보내야하는 방법에 대한 제안이 있습니까?

감사 아드리안

내가 또한 shell.exec("echo -e \\x00\\x00\\x07\\x04\\x16\\x06\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0");을 시도했지만이 나에게 아무것도주지 않는다 PS는

자바 스트림을 처리 한 후, 쉘이 명령보고있다

답변

1

:

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

즉, 자바는 이중 백 슬래시 자체를 처리합니다. 셸이 실제로 하나의 이스케이프 된 백 슬래시를 볼 수 있도록 다른 이스케이프 된 백 슬래시 집합을 추가해야합니다. 할 수있어

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

관련 문제