AdbHelper

public final class AdbHelper
extends Object

java.lang.Object
   ↳ com.android.tradefed.device.server.AdbHelper


adb에 대한 요청과 연결을 처리하는 도우미 클래스

AndroidDebugBridge는 adb에 연결하는 공개 API이고 AdbHelper는 하위 수준 작업을 실행합니다.

현재 스핀 대기 비블로킹 I/O를 사용합니다. 선택기가 더 효율적이지만 여기서는 과도한 것 같습니다.

요약

중첩된 클래스

class AdbHelper.AdbResponse

ADB의 응답입니다. 

상수

String HOST_TRANSPORT

필드

public static final Charset DEFAULT_CHARSET

공개 메서드

static void createForward(InetSocketAddress adbSockAddr, IDevice device, String localPortSpec, String remotePortSpec)

로컬 포트와 원격 포트 간에 포트 포워딩을 만듭니다.

static AdbCommandRejectedException createHiddenException(String message, boolean errorDuringDeviceSelection)
static AdbCommandRejectedException createHiddenException(String message)
static byte[] createJdwpForwardRequest(int pid)

jdwp 프로세스에 대한 포트 전달 요청을 만듭니다.

static SocketChannel createPassThroughConnection(InetSocketAddress adbSockAddr, String deviceSerialNumber, int pid)

호스트에서 기기의 포트로 새로운 패스 스루 소켓을 만들고 연결합니다.

static void createReverse(InetSocketAddress adbSockAddr, IDevice device, String remotePortSpec, String localPortSpec)

원격 포트와 로컬 포트 간에 포트 반전을 만듭니다.

static void executeRemoteCommand(InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeToOutputResponse, TimeUnit maxTimeUnits)

기기에서 셸 명령어를 실행하고 출력을 가져옵니다.

static void executeRemoteCommand(InetSocketAddress adbSockAddr, AdbHelper.AdbService adbService, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits, InputStream is)

기기에서 원격 명령어를 실행하고 출력을 가져옵니다.

static void executeRemoteCommand(InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits)

기기에서 셸 명령어를 실행하고 출력을 가져옵니다.

static byte[] formAdbRequest(String payloadString)

4개의 16진수 숫자가 앞에 오는 ASCII 문자열을 만듭니다.

static String getFeatures(IDevice device)

기기에서 지원되는 기능 집합을 쿼리합니다.

static RawImage getFrameBuffer(InetSocketAddress adbSockAddr, IDevice device, long timeout, TimeUnit unit)

지정된 제한 시간으로 기기에서 프레임 버퍼를 가져옵니다.

static String getHostFeatures()

ADB 호스트에서 지원되는 기능 집합을 쿼리합니다.

static SocketChannel open(InetSocketAddress adbSockAddr, IDevice device, int devicePort)

호스트에서 기기의 포트로 새 패스스루 소켓을 만들고 연결합니다.

static SocketChannel rawAdbService(InetSocketAddress socketAddress, IDevice device, String command, AdbHelper.AdbService service)

원격 기기에서 서비스를 호출합니다.

static SocketChannel rawExec(InetSocketAddress socketAddress, IDevice device, String executable, String[] parameters)

원격 기기에서 host:exec 서비스를 호출합니다.

static AdbHelper.AdbResponse readAdbResponse(SocketChannel chan, boolean readDiagString)

명령어 후 ADB의 응답을 읽습니다.

static void reboot(String into, InetSocketAddress adbSockAddr, IDevice device)

기기를 재부팅합니다.

static void removeForward(InetSocketAddress adbSockAddr, IDevice device, String localPortSpec)

로컬 포트와 원격 포트 간의 포트 전달을 삭제합니다.

static void removeReverse(InetSocketAddress adbSockAddr, IDevice device, String remotePortSpec)

원격 포트와 로컬 포트 간의 반전을 삭제합니다.

static void root(InetSocketAddress adbSockAddr, IDevice device)

adb 데몬이 기기에서 루트가 되도록 요청합니다.

static void setDevice(SocketChannel adbChan, IDevice device)

IDevice가 주어지면 일련번호를 가져와 adb에 해당 기기와 통신하도록 지시합니다.

static void setDevice(SocketChannel adbChan, String deviceSerialNumber)

adb에 특정 기기와 통신하도록 지시합니다.

static void write(SocketChannel chan, byte[] data, int length, int timeout)

'data'의 모든 데이터가 작성되거나 선택적 길이에 도달하거나 시간 제한이 만료되거나 연결이 실패할 때까지 작성합니다.

static void write(SocketChannel chan, byte[] data)

'data'의 모든 데이터가 작성되거나 연결이 실패하거나 시간 초과될 때까지 작성합니다.

상수

HOST_TRANSPORT

public static final String HOST_TRANSPORT

상수 값: "host:transport:"

필드

DEFAULT_CHARSET

public static final Charset DEFAULT_CHARSET

공개 메서드

createForward

public static void createForward (InetSocketAddress adbSockAddr, 
                IDevice device, 
                String localPortSpec, 
                String remotePortSpec)

로컬 포트와 원격 포트 간에 포트 포워딩을 만듭니다.

매개변수
adbSockAddr InetSocketAddress: adb에 연결할 소켓 주소

device IDevice: 포트 포워딩을 실행할 기기

localPortSpec String: 전달할 로컬 포트의 사양입니다. 형식은 tcp:

remotePortSpec String: 전달할 원격 포트의 사양입니다. 다음 중 하나입니다. tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (원격만 해당)

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

매개변수
message String

errorDuringDeviceSelection boolean

반환 값
AdbCommandRejectedException

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message)

매개변수
message String

반환 값
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

jdwp 프로세스에 대한 포트 전달 요청을 만듭니다. 그러면 '####jwdp:{pid}'가 포함된 배열이 반환됩니다.

매개변수
pid int: 기기의 jdwp 프로세스 pid입니다.

반환 값
byte[]

createPassThroughConnection

public static SocketChannel createPassThroughConnection (InetSocketAddress adbSockAddr, 
                String deviceSerialNumber, 
                int pid)

호스트에서 기기의 포트로 새로운 패스 스루 소켓을 만들고 연결합니다.

매개변수
deviceSerialNumber String: 연결할 기기 일련번호입니다. null이거나 비어 있을 수 있으며, 이 경우 연결은 사용 가능한 첫 번째 기기로 이루어집니다.

pid int: 연결할 프로세스 pid입니다.

반환 값
SocketChannel

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

createReverse

public static void createReverse (InetSocketAddress adbSockAddr, 
                IDevice device, 
                String remotePortSpec, 
                String localPortSpec)

원격 포트와 로컬 포트 간에 포트 반전을 만듭니다.

매개변수
adbSockAddr InetSocketAddress: adb에 연결할 소켓 주소

device IDevice: 포트 반전을 실행할 기기

remotePortSpec String: 반전할 원격 포트의 사양입니다. 다음 중 하나입니다. tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (원격만 해당)

localPortSpec String: 로컬 포트 사양입니다. tcp:

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

executeRemoteCommand

public static void executeRemoteCommand (InetSocketAddress adbSockAddr, 
                String command, 
                IDevice device, 
                IShellOutputReceiver rcvr, 
                long maxTimeToOutputResponse, 
                TimeUnit maxTimeUnits)

기기에서 셸 명령어를 실행하고 출력을 가져옵니다. 출력은 도착하는 대로 rcvr에 전달됩니다.

매개변수
adbSockAddr InetSocketAddress: adb에 대한 ERROR(/InetSocketAddress)입니다.

command String: 실행할 셸 명령어

device IDevice: 명령어를 실행할 IDevice입니다.

rcvr IShellOutputReceiver: 셸 명령어의 출력을 수신할 IShellOutputReceiver

maxTimeToOutputResponse long: 명령어 출력 간 최대 시간입니다. 명령어 출력 사이에 시간이 더 지나면 메서드는 ShellCommandUnresponsiveException를 발생시킵니다. 값이 0이면 메서드가 명령어 출력을 무한정 기다리고 예외를 발생시키지 않음을 의미합니다.

maxTimeUnits TimeUnit: 0이 아닌 maxTimeToOutputResponse 값의 단위입니다.

생성 값
TimeoutException 명령어를 전송할 때 연결이 시간 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
ShellCommandUnresponsiveException 셸 명령어가 maxTimeToOutputResponse보다 긴 기간 동안 출력을 전송하지 않는 경우
연결에 I/O 오류가 있는 경우

executeRemoteCommand

public static void executeRemoteCommand (InetSocketAddress adbSockAddr, 
                AdbHelper.AdbService adbService, 
                String command, 
                IDevice device, 
                IShellOutputReceiver rcvr, 
                long maxTimeout, 
                long maxTimeToOutputResponse, 
                TimeUnit maxTimeUnits, 
                InputStream is)

기기에서 원격 명령어를 실행하고 출력을 가져옵니다. 출력은 도착하는 대로 rcvr에 전달됩니다. 이 명령어는 adbService 매개변수로 식별되는 원격 서비스에 의해 실행됩니다.

매개변수
adbSockAddr InetSocketAddress: adb에 대한 ERROR(/InetSocketAddress)입니다.

adbService AdbHelper.AdbService: 명령어를 실행하는 데 사용할 AdbHelper.AdbService입니다.

command String: 실행할 셸 명령어

device IDevice: 명령어를 실행할 IDevice입니다.

rcvr IShellOutputReceiver: 셸 명령어의 출력을 수신할 IShellOutputReceiver

maxTimeout long: 전체 명령어가 실행되는 최대 제한 시간입니다. 값이 0이면 제한 시간이 없음을 의미합니다.

maxTimeToOutputResponse long: 명령어 출력 간 최대 시간입니다. 명령어 출력 사이에 시간이 더 지나면 메서드는 ShellCommandUnresponsiveException를 발생시킵니다. 값이 0이면 메서드가 명령어 출력을 무한정 기다리고 예외를 발생시키지 않음을 의미합니다.

maxTimeUnits TimeUnit: 0이 아닌 maxTimeoutmaxTimeToOutputResponse 값의 단위입니다.

is InputStream: 명령어를 호출한 후 응답을 가져오기 전에 스트리밍할 선택적 ERROR(/InputStream)입니다.

생성 값
TimeoutException 명령어를 전송할 때 연결이 시간 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
ShellCommandUnresponsiveException 셸 명령어가 maxTimeToOutputResponse보다 긴 기간 동안 출력을 전송하지 않는 경우
연결에 I/O 오류가 있는 경우

executeRemoteCommand

public static void executeRemoteCommand (InetSocketAddress adbSockAddr, 
                String command, 
                IDevice device, 
                IShellOutputReceiver rcvr, 
                long maxTimeout, 
                long maxTimeToOutputResponse, 
                TimeUnit maxTimeUnits)

기기에서 셸 명령어를 실행하고 출력을 가져옵니다. 출력은 도착하는 대로 rcvr에 전달됩니다.

매개변수
adbSockAddr InetSocketAddress: adb에 대한 ERROR(/InetSocketAddress)입니다.

command String: 실행할 셸 명령어

device IDevice: 명령어를 실행할 IDevice입니다.

rcvr IShellOutputReceiver: 셸 명령어의 출력을 수신할 IShellOutputReceiver

maxTimeout long: 명령어가 반환되는 최대 시간입니다. 값이 0이면 최대 제한 시간이 적용되지 않습니다.

maxTimeToOutputResponse long: 명령어 출력 간 최대 시간입니다. 명령어 출력 사이에 시간이 더 지나면 메서드는 ShellCommandUnresponsiveException를 발생시킵니다. 값이 0이면 메서드가 명령어 출력을 무한정 기다리고 예외를 발생시키지 않습니다.

maxTimeUnits TimeUnit: 0이 아닌 maxTimeoutmaxTimeToOutputResponse 값의 단위입니다.

생성 값
TimeoutException 명령어를 전송할 때 연결이 시간 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
ShellCommandUnresponsiveException 셸 명령어가 maxTimeToOutputResponse보다 긴 기간 동안 출력을 전송하지 않는 경우
연결에 I/O 오류가 있는 경우

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

4개의 16진수 숫자가 앞에 오는 ASCII 문자열을 만듭니다. 여는 '####'은 나머지 문자열의 길이이며 ASCII 16진수로 인코딩됩니다 (대소문자는 중요하지 않음).

매개변수
payloadString String

반환 값
byte[]

getFeatures

public static String getFeatures (IDevice device)

기기에서 지원되는 기능 집합을 쿼리합니다.

매개변수
device IDevice: 포트 포워딩을 실행할 기기

반환 값
String

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

getFrameBuffer

public static RawImage getFrameBuffer (InetSocketAddress adbSockAddr, 
                IDevice device, 
                long timeout, 
                TimeUnit unit)

지정된 제한 시간으로 기기에서 프레임 버퍼를 가져옵니다. 제한 시간 0은 무한정 대기함을 나타냅니다.

매개변수
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

반환 값
RawImage

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

getHostFeatures

public static String getHostFeatures ()

ADB 호스트에서 지원되는 기능 집합을 쿼리합니다.

반환 값
String

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

열기

public static SocketChannel open (InetSocketAddress adbSockAddr, 
                IDevice device, 
                int devicePort)

호스트에서 기기의 포트로 새 패스스루 소켓을 만들고 연결합니다.

매개변수
device IDevice: 연결할 기기입니다. null일 수 있으며, 이 경우 연결은 사용 가능한 첫 번째 기기로 이루어집니다.

devicePort int: 열고 있는 포트

반환 값
SocketChannel

생성 값
TimeoutException 연결 시간이 초과되는 경우
연결에 I/O 오류가 있는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우

rawAdbService

public static SocketChannel rawAdbService (InetSocketAddress socketAddress, 
                IDevice device, 
                String command, 
                AdbHelper.AdbService service)

원격 기기에서 서비스를 호출합니다. 실행 중인 프로세스에 연결된 소켓 채널을 반환합니다.

ddlmib는 반환된 SocketChannel의 소유권을 포기하며 사용 후 명시적으로 닫아야 합니다.

매개변수
device IDevice: 연결할 기기입니다. null일 수 있으며, 이 경우 연결은 사용 가능한 첫 번째 기기로 이루어집니다.

command String: 실행할 명령어

service AdbHelper.AdbService: 명령어를 실행하는 데 사용할 AdbHelper.AdbService입니다.

반환 값
SocketChannel

생성 값
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

rawExec

public static SocketChannel rawExec (InetSocketAddress socketAddress, 
                IDevice device, 
                String executable, 
                String[] parameters)

원격 기기에서 host:exec 서비스를 호출합니다. 실행 중인 프로세스에 연결된 소켓 채널을 반환합니다. 실행 서비스는 stdout과 stderr을 구분하지 않으므로 소켓에서 읽은 내용은 두 출력에서 모두 가져올 수 있으며 인터리브될 수 있습니다.

ddlmib는 반환된 SocketChannel의 소유권을 포기하며 사용 후 명시적으로 닫아야 합니다.

매개변수
device IDevice: 연결할 기기 null일 수 있으며, 이 경우 연결은 사용 가능한 첫 번째 기기에 연결됩니다.

executable String: 실행할 실행 파일의 절대 경로

parameters String: 실행 파일을 실행할 때 제공되는 매개변수

반환 값
SocketChannel

생성 값
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

readAdbResponse

public static AdbHelper.AdbResponse readAdbResponse (SocketChannel chan, 
                boolean readDiagString)

명령어 후 ADB의 응답을 읽습니다.

매개변수
chan SocketChannel: adb에 연결된 소켓 채널입니다.

readDiagString boolean: true인 경우 OKAY 응답 뒤에 진단 문자열이 올 것으로 예상됩니다. 그렇지 않으면 진단 문자열이 FAIL을 따를 것으로 예상됩니다.

반환 값
AdbHelper.AdbResponse

생성 값
TimeoutException 연결 시간이 초과되는 경우
연결에 I/O 오류가 있는 경우

재부팅

public static void reboot (String into, 
                InetSocketAddress adbSockAddr, 
                IDevice device)

기기를 재부팅합니다.

매개변수
into String: 재부팅할 대상 (복구, 부트로더) 또는 재부팅만 하려면 null입니다.

adbSockAddr InetSocketAddress

device IDevice

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

removeForward

public static void removeForward (InetSocketAddress adbSockAddr, 
                IDevice device, 
                String localPortSpec)

로컬 포트와 원격 포트 간의 포트 전달을 삭제합니다.

매개변수
adbSockAddr InetSocketAddress: adb에 연결할 소켓 주소

device IDevice: 포트 포워딩을 삭제할 기기

localPortSpec String: 포워드된 로컬 포트의 사양입니다. tcp:

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

removeReverse

public static void removeReverse (InetSocketAddress adbSockAddr, 
                IDevice device, 
                String remotePortSpec)

원격 포트와 로컬 포트 간의 반전을 삭제합니다.

매개변수
adbSockAddr InetSocketAddress: adb에 연결할 소켓 주소

device IDevice: 포트 반전을 삭제할 기기

remotePortSpec String: 원격 포트가 반전된 사양입니다. 다음 중 하나입니다. tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (원격만 해당)

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

루트

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

adb 데몬이 기기에서 루트가 되도록 요청합니다. 이 작업은 자동으로 실패할 수 있으며 개발자 빌드에서만 성공할 수 있습니다. 자세한 내용은 'adb root'를 참고하세요. 성공 여부를 알아야 하는 경우 'echo \$USER_ID'에서 executeRemoteCommand의 결과를 확인할 수 있습니다. 결과가 0이면 adbd가 루트로 실행되고 있는 것입니다.

매개변수
adbSockAddr InetSocketAddress

device IDevice

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

IDevice가 주어지면 일련번호를 가져와 adb에 해당 기기와 통신하도록 지시합니다.

매개변수
adbChan SocketChannel: adb에 대한 소켓 연결입니다.

device IDevice: 대화할 기기입니다.

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

adb에 특정 기기와 통신하도록 지시합니다.

매개변수
adbChan SocketChannel: adb에 대한 소켓 연결

deviceSerialNumber String: 통신할 기기의 일련번호입니다. null인 경우 선택된 기본 기기는 adb에서 선택한 기기입니다.

생성 값
TimeoutException 연결 시간이 초과되는 경우
AdbCommandRejectedException adb에서 명령어를 거부하는 경우
연결에 I/O 오류가 있는 경우

도와줘

public static void write (SocketChannel chan, 
                byte[] data, 
                int length, 
                int timeout)

'data'의 모든 데이터가 작성되거나 선택적 길이에 도달하거나 시간 제한이 만료되거나 연결이 실패할 때까지 작성합니다. 모든 데이터가 작성된 경우 'true'를 반환합니다.

매개변수
chan SocketChannel: 쓰기를 수행할 열린 소켓입니다.

data byte: 전송할 버퍼입니다.

length int: 쓸 길이 또는 전체 버퍼를 전송하려면 -1입니다.

timeout int: 제한 시간 값입니다. 제한 시간이 0이면 '무한정 대기'를 의미합니다.

생성 값
TimeoutException 연결 시간이 초과되는 경우
연결에 I/O 오류가 있는 경우

도와줘

public static void write (SocketChannel chan, 
                byte[] data)

'data'의 모든 데이터가 작성되거나 연결이 실패하거나 시간 초과될 때까지 작성합니다.

기본 시간 제한 값을 사용합니다.

매개변수
chan SocketChannel: 쓰기를 수행할 열린 소켓입니다.

data byte: 전송할 버퍼입니다.

생성 값
TimeoutException 연결 시간이 초과되는 경우
연결에 I/O 오류가 있는 경우