2014-04-18 3 views
0

android Activity에서 adb로 데이터를 보낼 수 있습니까? ADB를 통해 활동을 시작하고 데이터를 전달하고 작업을 수행 한 다음 결과를 읽으 려합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?ADB를 통해 Android 활동에서 PC로 데이터 전송

예를 들어

: adb.exe 쉘 오전 시작 -n com.example/com.example.Adder --ei operand1 10 --ei Operand2의 20 이 10 + 20 .. 저장 총 30 어떻게 추가 그 값을 가져올 수 있습니까?

내 연구에서 얻은 이러한 제안은 옵션이 아닙니다. 1. 파일에 쓰기 다음 pull을 사용하여 adb에서 읽습니다. [내 휴대 전화에는 내 SD 카드가 없습니다. android 4.3에 버그가 있습니다. 커맨드가 작동하지 않는 것처럼] 2. 소켓을 열어 데이터를 보내면 [네트워크에 의존하고 싶지 않습니다]

업데이트 : 그래서 Chris가 제안한대로 앞으로 adb를 통해 뭔가를 할 수있었습니다. 먼저 adb 전달을 시작하십시오 : adb 전달 tcp : 10000 tcp : 10000;

다음 내 안드로이드 응용 프로그램에서 ... 서버 소켓을 만들고 차단하십시오. serverSocket.accept(); 그러면 클라이언트가 연결되고 TCP/IP 소켓에서와 같이 데이터를 앞뒤로 보낼 수 있습니다.

ADB에는 설명되어 있지 않은 문제가 하나 있습니다. 포워드가 설정되면 클라이언트는 안드로이드 측에서 아직 설정되지 않은 경우에도 서버 소켓에 연결하는 것처럼 보입니다. 그 이유는 무엇입니까? 일단 clientSocket이이 "섀도우"소켓에 연결되면 serverSocket이 아직 설정되지 않았 음을 감지 할 수 있습니까?

+0

소켓 사용은 네트워크가 아닌 adb 전달을 통해 수행 할 수 있습니다. 유닉스 도메인 소켓을 사용하면 인터넷 허가가 필요하지 않습니다. adb 전달을 사용하면 전화기가 서버 여야하고 클라이언트가 PC 여야합니다.하지만 adb를 통해 시작 인 텐트를 보낸 직후부터 반복적으로 연결을 시도하여 필요를 채우기 위해 사용할 수 있습니다. 사소한 일이라면 logcat에서 응답을 grep 할 수도 있습니다. –

+0

더 자세히 설명해 주실 수 있습니까? 내 활동에서 할 수있는 : "server = new ServerSocket (portNumber); 소켓 클라이언트 = server.accept(); PrintWriter pr = new PrintWriter (client.getOutputStream(), true); pr .print (dataToWrite) 이것은 어떻게 adb로 전달 될까요?전화가 서버이면 어떤 시점에서 accept()가 반환합니까 ?? – firdseven

+0

ADB 문서를 읽으십시오. –

답변

2

내가 my blog을 읽어 보시기 바랍니다 alredy 그렇게 코드가, 스페인어,하지만 코드는 보편적 인 언어입니다 : D 내가 WebSocket을을 사용

하는 안드로이드 장치에서 웹 소켓 서버와 웹 소켓 클라이언트 자바 스크립트를 통한 웹 페이지.

안드로이드 장치는 USB debbuging 모드에 있어야하며 PC의 명령 줄에서 'adb forward tcp : 38300 tcp : 38300'을 실행하여 WebSocket 연결을 허용하는 '터널'을 만들어야합니다.

1

응용 프로그램에 표준 Log 클래스를 사용하고 adb logcat을 사용하여 캡처 할 내용을 필터링하여 출력을 읽으십시오.

+0

이 간단한 접근 방식이 실제로 잘 작동합니다. http://stackoverflow.com/a/41512862/1778421 –

0

ADB 포워딩에 대한 많은 문서는 없지만 실제로는 ADB가 SSH 세션에서 예상하는 트래픽을 실제로 터널링하지 않는다고 생각합니다. 그것은 단지 PC의 TCP 리스너와 장치의 TCP 클라이언트를 쳐다 보며 하나에서 다른 곳으로 데이터를 보냅니다. 단점은 해당 포트에서 수신 대기중인 Android 앱이 없더라도 PC가 항상 전달 된 포트에서 연결을 허용한다는 것입니다.

+0

참으로 이것은 문제가되었습니다. 나는 정말로 그것을 해결할 방법을 찾지 못했지만 TCP/IP 상단에 둔기를 사용했고 소켓을 열고 닫는 것에 대해 걱정할 필요가 없었습니다. – firdseven

관련 문제