ADB 구현 지침
Android 디버그 브리지(ADB)는 다음 용도로 사용됩니다.
일반적으로 모든 작업은 다음 구성 요소를 통해 수행됩니다.
이는 다음에서 실행되는 디버거입니다. 호스트 백그라운드 프로세스. 그 목적은 장치가 연결/제거되는 시기와 에뮬레이터 인스턴스가 시작/중지되는 시기를 알기 위해 USB 포트를 감지하는 것입니다.
"연결된 장치" 목록을 유지 관리하고 각 장치에 오프라인, 부트로더, 복구 또는 온라인(자세한 내용은 아래 참조)과 같은 '상태'를 할당해야 합니다.
ADB 서버는 실제로 클라이언트, 서비스 및 장치 간의 데이터(실제로는 패킷) 교환을 조율하는 것이 목적인 거대한 멀티플렉싱 루프입니다.
'adbd'는 Android 기기 또는 에뮬레이터 시스템 내에서 백그라운드 프로세스로 실행됩니다. 그 목적은 ADB 서버에 연결하고(장치의 경우 USB를 통해, 에뮬레이터의 경우 TCP를 통해) 호스트 시스템에서 실행되는 클라이언트에 일부 서비스를 제공하는 것입니다.
ADB 서버가 장치 내부의 adbd에 성공적으로 연결되면 장치가 ONLINE인 것으로 간주합니다. 그렇지 않으면 장치가 오프라인 상태입니다. 이는 ADB 서버가 새 장치/에뮬레이터를 감지했지만 adbd 데몬에 연결할 수 없음을 의미합니다.
BOOTLOADER 및 RECOVERY 상태는 부트로더 또는 복구 모드에 있는 장치의 해당 상태에 해당합니다.
'adb' 명령줄 프로그램은 셸이나 스크립트에서 adb 명령을 실행하는 데 사용됩니다. 먼저 호스트에서 ADB 서버를 찾으려고 시도하고, 서버가 있으면 자동으로 시작합니다.
그런 다음 클라이언트는 ADB 서버에 서비스 요청을 보냅니다. 알 필요는 없습니다.
현재 단일 'adb' 바이너리가 서버와 클라이언트로 모두 사용됩니다. 이렇게 하면 서버 배포 및 시작이 더 간단해집니다.
기본적으로 클라이언트가 상호 작용할 수 있는 서비스는 두 가지입니다.
호스트 서비스:
로컬 서비스:
이러한 서비스는 adbd 데몬 내에서 실행되거나 기기에서 시작됩니다. ADB 서버는 adbd 내에서 실행되는 클라이언트와 서비스 간의 스트림을 다중화하는 데 사용됩니다. 이 경우 해당 역할은 연결을 초기화한 다음 데이터 채널 역할을 하는 것입니다.
ADB 클라이언트와 ADB 서버 자체 사이에 사용되는 프로토콜은 여기에 자세히 설명되어 있습니다. ADB 서버는 TCP:localhost:5037을 수신합니다.
클라이언트는 다음 형식으로 요청을 보냅니다.
예를 들어 ADB 서버에 내부 버전 번호를 쿼리하기 위해 클라이언트는 다음 작업을 수행합니다.
'host:' 접두사는 요청이 서버 자체로 전달됨을 나타내는 데 사용됩니다(다른 종류의 요청에 대해서는 나중에 논의하겠습니다). 콘텐츠 길이는 디버깅을 용이하게 하기 위해 ASCII로 인코딩됩니다.
서버는 다음 방법 중 하나로 요청에 응답해야 합니다.
OKAY 후에도 연결은 계속 유지되므로 클라이언트가 다른 요청을 수행할 수 있습니다. 그러나 어떤 경우에는 OKAY가 연결 상태를 변경하기도 합니다.
예를 들어 'host:transport:
SERVICES.TXT 파일에는 현재 ADB가 구현하는 모든 서비스가 나열되어 있습니다.
ADB 전송은 ADB 서버와 장치 또는 에뮬레이터 간의 연결을 모델링합니다.
현재 두 가지 유형의 전송이 있습니다:
이론적으로는 ADB 서버와 다른 시스템에 연결되어 실행되는 장치/에뮬레이터 간의 연결을 프록시하는 로컬 전송을 작성하는 것이 가능해야 합니다. 아직 완료되지 않았지만.
각 전송은 하나 이상의 클라이언트와 클라이언트가 가리키는 장치/에뮬레이터 간에 다중화된 사용 스트림을 전달할 수 있습니다. ADB 서버는 예상치 못한 전송 중단을 적절하게 처리해야 합니다(예: 장치가 물리적으로 제거되는 경우).
원문 번역