안드로이드 앱 실행하기 - AVD

프로그래밍/안드로이드 2018. 4. 2. 21:16
반응형

"안드로이드 스튜디오를 설치하기" 에서 안드로이드 스튜디오를 설치하고 Hello World! 를 출력하는 간단한 앱을 AVD(Android Virtual Device)에서 실행해 봤습니다. 앱을 실행하려면 AVD를 사용하거나 실제 휴대폰을 연결해서 테스트 해볼 수 있습니다.


"안드로이드 스튜디오를 설치하기" 에서 가상 디바이스에서 앱을 처음 실행했을때 시스템 이미지가 없어서 기본값으로 ARM EABI v7a System Image 를 다운받아 실행했었습니다. 이때 x86 컴퓨터에서는 x86 시스템 이미지를사용하는것이 더 나은 성능을 보인다는 메세지가 떴었습니다. 그래서 이번에는 AVD 를 설정하는 방법을 확인해 봅니다.


x86 시스템이미지를 설정하는 것을 보기 전에 전에 최초로 실행했을 때의 화면을 보도록 하겠습니다.

 

Deployment 타겟 선택



제일 상단에 No USB devices or running emulators detected 라는 메세지가 있습니다. 이 메세지는 최초 실행했을때 이므로 USB로 실제 휴대폰이 연결되어 있지도 않고, 에뮬레이터 즉 가상 디바이스도 생성되어 있지 않다는 뜻입니다. 휴대폰이 USB로 연결되어 있거나, AVD 가 실행되어 있다면 상단의 이부분에 나타나게 됩니다.


두 번째 줄에 VT-x is disabled in BIOS. 는 CPU 가상화 기능이 비활성화 되어 있다는 뜻입니다. CPU 가상화 기능이 비활성화 되어 있으면 64bit 시스템 이미지를 사용할 수가 없습니다. 자세한 정보는 "CPU 가상화 지원여부 확인하기" 를 참고 하십시요.


이제 AVD 관리자를 실행해 봅시다. 화면에서 처럼 툴바에서 선택하거나 메뉴에서  Tools -> Android -> AVD Manager 를 선택합니다.

 

AVD Manager 선택 메뉴



AVD Manager가 실행된 화면입니다. 화면에서는 이미 x86_64 로 설정 되어 있는데, 어떻게 변경하는지 봅시다. Actions에서 연필모양을 클릭해서 정보를 수정할 수 있습니다.

 

Virtual Device Manager



상세 보기 화면입니다. AVD 이름, 화면크기 가상 휴대폰 종류, 시스템 이미지 등을 바꿀 수 있습니다. 시작시 화면이 가로로 시작할지 세로로 시작할지도 지정할 수 있습니다. Android 5.1 x86_64 옆의  Change 버튼을 누릅니다.

 

Virtual Device 설정



시스템 이미지를 선택하는 화면 입니다. 자신에게 필요한 시스템 이미지를 선택하고 OK 버튼을 누르면 적용이 됩니다. 필요한 시스템 이미지가 아직 다운로드 되지 않았을 경우에는 Release Name 옆의  Download 를 눌러서 다운 받을 수 있습니다.

 

시스템 이미지 선택




x86_64 에뮬레이터가 제대로 성능을 내려면 HAX(Intel® Hardware Accelerated Execution) 서비스가 실행되고 있어야 합니다. 서비스가 실행되고 있는지 확인하려면 명령창에서 C:\> sc query intelhaxm 명령을 내려서 상태가 4 RUNNING이면 실행되고 있는 것입니다.


intelhaxm 명령어



만약 HAXM(Intel® Hardware Accelerated Execution Manager) 이 설치가 되어 있지 않다면 다음과 같이 설치를 합니다.


1. 시스템 요구사항

- Intel CPU 여야만 합니다. 다른 CPU에서는 동작하지 않습니다.

- VT-x 가상화 기술이 지원되어야 합니다. (지원되는 CPU 일경우 BIOS에서 활성화 합니다.)

- Execute Disable (XD) Bit 기능이 지원되어야 합니다.( DEP (Data Execution Prevention) 기능 입니다. 역시 지원되는 경우 BIOS에서 활성화 해야 합니다.)

- 적어도 4GB의 시스템 메모리가 필요합니다.

- Windows 7, 8, 8.1, 10 운영체체에서 지원합니다.


2. 안드로이드스튜디오에서 SDK Manager 를 실행합니다. SDK Tools 탭에서 Intel x86 Emulator Accelerator (HAXM installer) 를 체크해서 설치합니다.


HAXM installer



3. 위에서 Installed 라고 나왔지만 이것은 설치프로그램을 다운로드 받을 것입니다. 실제 설치는 수동으로 해야 합니다. Android  SDK 가 설치된곳의 여기에서는  D:\util\adt-bundle\sdk 입니다. 하위 디렉토리인 extras\intel\Hardware_Accelerated_Execution_Manager 폴더에 들어가면 silent_install.bat 파일이 있습니다. 이 프로그램을 실행해서 설치합니다.


설치후 컴퓨터를 재시작하고, sc query intelhaxm 명령으로 실행이 되는지 확인합니다.


4. 앱을 AVD 에서 실행을 하면 콘솔에 HAX is working and emulator runs in fast virt model. 로 출력되고, 에뮬레이터가 정상적으로 실행이 되면 모든게 제대로 된 것입니다.


HAX 동작 확인



x86 이미지를 설정하고 가상디바이스를 실행해보면 ARM 일 때보다 확실히 빨라진것을 느낄 수 있었습니다. 그럼에도 불구하고, 최초 실행시 에뮬레이터가 뜨는데는 시간이 상당히 걸립니다. 에뮬레이터가 실행되고 난 후 앱이 배포 되고 실행되는 것은 아주 빠르게 동작함을 알 수 있습니다. 



실제 휴대폰의 경우에는 휴대폰이 켜져 있으므로 에뮬레이터가 항상 실행되어 있는것과 같은 상태입니다. 역시 실제 휴대폰으로 테스트를 하는게 속도 면에서나 여러가지 에뮬레이터의 제약사항(카메라, GPS 등)을 받지 않는다는 면에서 더 유용한것 같습니다.


휴대폰을 PC와 USB 케이블로 연결하여 테스트용으로 사용하려면 몇가지 사전작업이 필요합니다. 먼저 테스트 하려는 휴대폰 제조회사에서 제공하는 USB 드라이버가 설치되어야 합니다. 그후에 휴대폰의 설정화면으로 들어가서 개발자 옵션을 켜고, USB 디버깅을 체크하여 활성화 해야 합니다.

 

USB 디버깅 설정



이제 휴대폰은 케이블에 연결하고 실행을시켜보면 다음화면 처럼 연결될 실제 휴대폰과 가상 디바이스의 목록을 보여줍니다. 실행에 사용할 디바이스를 선택하고  OK 버튼을 누르면 됩니다. 왼쪽 아래의 Use same selection for future launches 를 체크해두면 다음 부터는 이 창이 뜨지 않고 바로 선택되었던 디바이스로  실행이 됩니다.

 

연결된 디바이스 선택



실제 휴대폰에서 실행된 화면 입니다.

 

실행화면



가상디바이스에서 시스템 이미지를 변경하는 방법과 실제 휴대폰을 연결해서 테스트 하는 방법을 보았습니다. 조금만 인내심을 발휘한다면 가상디바이스를 사용하는것도 문제가 되지는 않을 수 있습니다. 하지만 실제 휴대폰에서 확인해보는것이 속도도 빠르고 더욱 확실한 방법인것 같습니다.


실제로 앱을 개발할 때는 화면크기도 다르고, CPU 도 다르고, 안드로이드 버전도 다른 다양한 종류의 휴대폰에서 실행되어질 프로그램을 작성해야 합니다. 모든 종류의 휴대폰을 구비해두고 테스트해볼 수는 없기 때문에 가상 디바이스도 적절하게 사용하고, 될 수 있으면 주 타겟이 될 휴대폰 종류는 직접 테스트 해볼 수 있다면 좋을 것입니다.

반응형

댓글을 달아 주세요

  • 1 2019.07.16 17:37  댓글주소  수정/삭제  댓글쓰기

    안드로이드 스튜디오는 3.2 베타 버전부터 AMD CPU 에 대해 공식 지원한다고 얘기했습니다.
    AMD 에서 발생하는 HAXM 에러 관련 문제 윈도우 하이퍼바이저 플랫폼 기능 활성화를 통해 해결할 수 있습니다.

    • pentode 2019.07.19 17:13 신고  댓글주소  수정/삭제

      네. 정보 감사합니다.^^ AMD CPU 에서는 Microsoft의 Hyper-V 및 하이퍼바이저 플랫폼을 이용해서 속도를 높일 수 있습니다.

      Hyper-V는 물리적 호스트 컴퓨터에서 가상화된 컴퓨터 시스템을 실행할 수 있게 해 주는 Windows의 가상화 기능입니다.

      Intel CPU이면 HAXM을 사용하고, AMD이면 Hyper-V를 사용하는 것이겠네요.