Android Emulator로 프록시 설정

Android 에뮬레이터에서는 프록시를 사용하여 애플리케이션 트래픽을 디버그하거나 회사 방화벽 뒤에서 인터넷에 액세스할 수 있습니다. 에뮬레이터는 이러한 다양한 사용 사례를 지원하기 위해 Android 시스템 프록시와 에뮬레이터 프록시라는 두 가지 고유한 프록시 메커니즘을 제공합니다.

적절한 프록시 선택

프록시를 구성하기 전에 두 가지 사용 사례를 이해하는 것이 중요합니다. Android 시스템 프록시는 애플리케이션 트래픽을 검사하는 데 사용되고 에뮬레이터 프록시는 네트워크 제한을 탐색하는 데 사용됩니다. 이 두 프록시는 상호 배타적이므로 한 번에 하나만 사용 설정할 수 있습니다.

기능 Android 시스템 프록시 에뮬레이터 프록시
기본 사용 사례 앱 디버깅 방화벽 우회
운영 레이어 네트워크 계층 애플리케이션 계층
구성 Android 시스템 Wi-Fi 설정 UI 에뮬레이터 확장 컨트롤 UI 또는
-http-proxy 플래그
HTTPS 디버깅 - 인증서가 설치된 경우 Charles 프록시와 같은 도구가 트래픽을
가로채도록 허용합니다.
아니요 - TCP 터널을 만들어
SSL 검사를 방지합니다.
HTTP/HTTPS가 아닌 트래픽 처리
아니요 - 주로 HTTP 및
HTTPS 트래픽만 처리합니다.
- 모든 TCP 트래픽을 전달합니다.

사용 사례 1: Android 시스템 프록시를 사용한 애플리케이션 디버깅

Charles Proxy와 같은 도구로 HTTPS 요청을 검사하는 등 애플리케이션의 네트워크 트래픽을 디버깅하려면 Android 시스템 프록시를 사용해야 합니다.

이 프록시는 Android OS 내의 애플리케이션 레이어에서 작동합니다. 이를 통해 디버깅 도구가 트래픽을 가로채고 검사할 수 있지만, 에뮬레이트된 기기에 필요한 보안 인증서를 설치해야 합니다.

Android 시스템 프록시 설정

구성

Android 시스템 프록시는 다음 두 가지 방법으로 구성할 수 있습니다.

  1. 수동 구성: 에뮬레이터에서 설정 > 네트워크 및 인터넷 > Wi-Fi로 이동하여 네트워크를 선택하고 프록시 설정을 수동으로 입력합니다.
  2. 자동 구성: 프로그래매틱 방식으로 Android 시스템 프록시를 구성할 수 있습니다. 이는 UI Automator와 같은 UI 자동화 프레임워크를 사용하여 Android 설정 앱을 열고 수동 개입 없이 프록시 구성을 적용하는 계측 테스트를 만들어 실행합니다.

사용 사례 2: 에뮬레이터 프록시를 사용하여 회사 방화벽 우회

많은 회사 네트워크에서는 네트워크 관리자가 인터넷 직접 연결을 거부하며 대신 특정 프록시를 통과해야 합니다. 이러한 제한된 네트워크 내에서 외부 리소스에 액세스하려면 에뮬레이터 프록시를 사용해야 합니다.

이 메커니즘은 하위 네트워크 수준에서 작동하며 에뮬레이트된 기기의 모든 TCP 트래픽을 지정된 프록시를 통해 라우팅하므로 방화벽 통과에 적합합니다. 프록시에 전송하기 전에 가상 기기의 HTTP 요청을 투명하게 다시 작성하여 올바르게 작동하도록 합니다.

구성

Android 스튜디오 내에서 에뮬레이터를 사용할 때는 Android 스튜디오 메뉴(Settings > Appearance & Behavior > System Settings > HTTP Proxy)의 설정으로 프록시를 구성할 수 있습니다. 자세한 내용은 Android 스튜디오 문서의 Android 스튜디오 프록시 설정을 참고하세요.

에뮬레이터를 독립형 (Android 스튜디오 외부)으로 사용하는 경우 다음 방법 중 하나를 사용하여 에뮬레이터 프록시를 구성할 수 있습니다.

  1. 명령줄 플래그: -http-proxy <proxy> 플래그를 사용하여 명령줄에서 에뮬레이터를 실행합니다. <proxy> 정보는 http://<machineName>:<port> 또는 http://<username>:<password>@<machineName>:<port> 형식으로 지정할 수 있습니다.

    emulator -http-proxy http://<machineName>:<port>
    

    또는

    emulator @MyAvd -http-proxy http://<username>:<password>@<machineName>:<port>
    
  2. 환경 변수: 프록시 설정으로 http_proxy 환경 변수를 정의합니다. 에뮬레이터는 시작 시 이 변수를 확인하고 정의된 경우 그 값을 자동으로 사용합니다.

  3. 확장 컨트롤: 에뮬레이터의 확장 컨트롤을 열고 설정 > 프록시로 이동한 후 HTTP 프록시 구성을 수동으로 입력합니다. 에뮬레이터는 기기의 이러한 설정을 저장하고 다시 시작할 때 복원합니다.

    에뮬레이터 프록시 설정

에뮬레이터 프록시는 네트워크 계층에서 작동합니다. TCP를 통해 HTTPS 트래픽을 터널링하지만 이 트래픽은 복호화 없이 전달되므로 HTTPS 검사가 방지됩니다. 에뮬레이터 프록시는 UDP 리디렉션을 지원하지 않습니다.

Android 스튜디오와의 상호작용

Android 스튜디오에는 업데이트와 라이브러리를 다운로드하기 위한 자체 프록시 구성 대화상자가 있습니다. Android 스튜디오에서 에뮬레이터를 실행하면 IDE의 프록시 설정을 한 번 읽어 에뮬레이터 프록시 구성을 채웁니다. 하지만 이 설정은 Android 시스템 프록시에는 영향을 미치지 않습니다.