Tradefed에서 장치 감지

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

새 장치 연결은 아직 이해할 가치가 없는 명확하지 않은 일련의 비동기 이벤트를 트리거합니다.

물리적으로 연결됨

Tradefed는 ddmlib 라이브러리(Java adb 라이브러리)를 사용하여 adb 및 장치와의 기본 상호 작용을 제공합니다. 이 솔루션의 일부는 다음과 같은 새 장치 이벤트를 수신할 수 있는 IDeviceChangeListener 인터페이스 입니다.

  • deviceConnected : adb 에서 새 장치를 볼 때
  • deviceDisconnected : 장치가 더 이상 adb 에 보고하지 않는 경우
  • deviceChanged : 주요 장치 상태가 발생할 때(예: 장치 오프라인 또는 장치 온라인)

이러한 이벤트는 장치가 연결, 온라인 또는 오프라인 상태인지 여부를 결정하기에 adb 합니다. 그러나 테스트 장치의 경우 장치가 테스트 실행을 시작할 준비가 되었는지 확인하려면 이보다 더 강력한 상태가 필요합니다. 새로 연결된 장치에서 발생할 수 있는 잠재적인 상태 취약성의 영향을 받지 않아야 합니다.

다음은 Tradefed의 이벤트 순서입니다.

  1. 장치가 deviceConnected 로 인식되고 adb 의 일반 이벤트에 열려 있습니다.
  2. 다음을 수행하는 내부 Tradefed 이벤트가 생성됩니다.

    • 장치가 이미 알려져 있는지 확인하십시오. Tradefed는 TF가 무작위로 추적하는 것을 방지하기 위해 일부 장치(특히 현재 할당되고 실행 중인 테스트)에 대한 내부 참조를 유지합니다.
    • 장치가 ONLINE 또는 OFFLINE 인지 확인하십시오.
  3. 장치가 다음과 같은 경우:

    • OFFLINE : 장치가 아직 테스트를 실행할 수 없는 Tradefed CONNECTED_OFFLINE 상태로 전환됩니다. 장치가 나중에 온라인 상태가 되면 ONLINE 주기를 거칩니다. deviceDisconnect 이벤트를 수신하면 장치가 목록에서 제거됩니다.

    • ONLINE (adb에서 볼 수 있음): 장치는 CONNECTED_ONLINE 상태가 되며 테스트 할당에 대한 가용성이 checking_availability 됩니다.

  4. availability 확인에 성공하면 장치가 테스트 할당에 사용할 수 있는 것으로 표시됩니다. 테스트를 실행할 수 있을 것입니다. 그렇지 않은 경우 장치는 할당할 수 unavailable 것으로 표시되고 테스트를 받을 수 없습니다.

이러한 모든 상태는 다음을 통해 장치를 나열할 때 Tradefed 콘솔에 반영됩니다. tf> list devices

장치가 현재 테스트에 할당되어 있을 때 위의 대부분은 발생하지 않으며 Tradefed는 내부적으로 장치 상태를 결정합니다. 따라서 장치가 Tradefed에 의해 나열되는 동안 adb devices 에서 사라질 수 있습니다. 예를 들어 테스트가 장치를 재부팅할 때 발생할 수 있습니다.

"adb connect"를 통해 연결된 가상 장치

원격 가상 장치가 생성되면 Tradefed는 adb connect 를 사용하여 이에 연결합니다. 이것은 일반적으로 adb devices<some ip>:<port number> 로 표시되는 장치를 트리거하고 물리적으로 연결된 장치와 동일한 순서를 따릅니다.

deviceConnected 이벤트 발생 시 장치 추적

deviceConnected 가 발생하면 ddmlib 는 새로 연결된 장치를 추적하기 위해 새 참조 IDevice 를 만듭니다.

Tradefed는 이 참조를 사용하고 장치 인터페이스 ITestDevice 의 자체 구현에 이를 래핑하여 고급 서비스를 제공합니다. 그러나 기본 IDevice는 항상 ddmlib 에서 오는 것입니다.

즉, 새 장치가 연결되면 새 ITestDevice가 생성되어 IDevice와 연결됩니다. 이것이 호출 중에 발생하고 ITestDevice가 사용 중일 때 기본 IDevice는 계속 교체되므로 적절한 참조에서 테스트를 진행할 수 있습니다. 이것은 장치가 연결 해제/재연결될 때마다 원활하게 수행됩니다(예: 재부팅 중).