Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

Windows - WHPX(Windows Hypervisor Platform)를 이용한 Android Emulator 가속

MAUI 프로젝트를 Emulator 설정으로 Visual Studio 환경에서 (F5 디버깅처럼) 실행하면 잘 모르고 지나갈 수도 있는데요, 대신 "Tools" / "Android" / "Android Device Manager..." 메뉴를 통해 에뮬레이터를 직접 시작하는 경우 다음과 같은 경고창이 뜰 수도 있습니다.

This emulator does not have hardware acceleration enabled, and its performance will be impacted.
We recommend to either:

- Turn on "Hyper-V" feature to switch to the Native Hypervisor and accelerate your emulator.

- Configure hardware acceleration following the instructions to Enable Hardware Acceleration

- Try using a physical Android device for development.

- You can try and start the emulator anyway running unaccelerated, however this is NOT recommended.

문서를 봤더니,

How to enable hardware acceleration with Android emulators (Hyper-V & AEHD)
; https://learn.microsoft.com/en-us/dotnet/maui/android/emulator/hardware-acceleration

그동안 많은 변화가 있었군요. ^^; 우선 선택의 폭이 넓어져서 2가지 방법 중 하나를 선택하면 됩니다.

  1. The Windows Hypervisor Platform (WHPX). Hyper-V is a virtualization feature of Windows that makes it possible to run virtualized computer systems on a physical host computer.
  2. The Android Emulator hypervisor driver (AEHD).

과거에 유명했던 Intel HAXM은 33.x 이후의 에뮬레이터부터 권장하지 않고, 결국 위의 2번째 옵션에 해당하는 AEHD로 바뀌었다고 합니다. 일단은, AEHD가 범용성이 좋은 듯한데 그래도 윈도우 환경에서는 WHPX를 추천한다고 합니다.




해당 문서에 따르면, Windows 10 RS5 업데이트 이후부터는 Hyper-V를 설치한 경우 내부적으로 WHPX를 자동으로 활성화시키므로 굳이 "Windows Hypervisor Platform"을 켤 필요는 없다고 합니다.

whpx_enable_1.png

하지만 제 경우에 Hyper-V를 설치한 머신인데도 "This emulator does not have hardware acceleration enabled, and its performance will be impacted." 메시지가 뜬 건데요, 어쨌든 명시적으로 저 옵션을 켜고 재부팅한 이후부터는 더 이상 경고 메시지가 뜨지 않습니다. (아마도 WHPX가 나오기 이전부터 설치한 Hyper-V인 경우에는 자동 적용이 안 되는 듯합니다.)

참고로, AEHD는 Hyper-V를 지원하지 못하는 시스템에서도 사용할 수 있다고 하며, 심지어 Hyper-V를 지원한다고 해도 꺼야만 설치가 됩니다. 아마도 개발자라면 Hyper-V를 대부분 설치했을 것이므로 딱히 중요한 사항은 아니기에 자세한 사항은 문서를 참조하시면 되겠습니다.

암튼, 안드로이드 개발 환경만큼은 이젠 물리 기기가 없어도 될 정도로 쾌적해진 것 같습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 5/17/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
13139정성태10/9/202213665.NET Framework: 2057. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 모든 닷넷 모듈을 추출하는 방법파일 다운로드1
13138정성태10/8/202216264.NET Framework: 2056. C# - await 비동기 호출을 기대한 메서드가 동기로 호출되었을 때의 부작용 [1]
13137정성태10/8/202214203.NET Framework: 2055. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 닷넷 모듈을 추출하는 방법
13136정성태10/7/202214540.NET Framework: 2054. .NET Core/5+ SDK 설치 없이 dotnet-dump 사용하는 방법
13135정성태10/5/202215061.NET Framework: 2053. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프를 분석하는 방법 - 두 번째 이야기 [1]
13134정성태10/4/202212257오류 유형: 820. There is a problem with AMD Radeon RX 5600 XT device. For more information, search for 'graphics device driver error code 31'
13133정성태10/4/202213388Windows: 211. Windows - (commit이 아닌) reserved 메모리 사용량 확인 방법 [1]
13132정성태10/3/202213429스크립트: 42. 파이썬 - latexify-py 패키지 소개 - 함수를 mathjax 식으로 표현
13131정성태10/3/202217237.NET Framework: 2052. C# - Windows Forms의 데이터 바인딩 지원(DataBinding, DataSource) [2]파일 다운로드1
13130정성태9/28/202213047.NET Framework: 2051. .NET Core/5+ - 에러 로깅을 위한 Middleware가 동작하지 않는 경우파일 다운로드1
13129정성태9/27/202213660.NET Framework: 2050. .NET Core를 IIS에서 호스팅하는 경우 .NET Framework CLR이 함께 로드되는 환경
13128정성태9/23/202216592C/C++: 158. Visual C++ - IDL 구문 중 "unsigned long"을 인식하지 못하는 #import [1]파일 다운로드1
13127정성태9/22/202214859Windows: 210. WSL에 systemd 도입
13126정성태9/15/202215380.NET Framework: 2049. C# 11 - 정적 메서드에 대한 delegate 처리 시 cache 적용
13125정성태9/14/202215793.NET Framework: 2048. C# 11 - 구조체 필드의 자동 초기화(auto-default structs)
13124정성태9/13/202215585.NET Framework: 2047. Golang, Python, C#에서의 CRC32 사용
13123정성태9/8/202215632.NET Framework: 2046. C# 11 - 멤버(속성/필드)에 지정할 수 있는 required 예약어 추가
13122정성태8/26/202216038.NET Framework: 2045. C# 11 - 메서드 매개 변수에 대한 nameof 지원
13121정성태8/23/202212450C/C++: 157. Golang - 구조체의 slice 필드를 Reflection을 이용해 변경하는 방법
13120정성태8/19/202216061Windows: 209. Windows NT Service에서 UI를 다루는 방법 [3]
13119정성태8/18/202215176.NET Framework: 2044. .NET Core/5+ 프로젝트에서 참조 DLL이 보관된 공통 디렉터리를 지정하는 방법
13118정성태8/18/202212711.NET Framework: 2043. WPF Color의 기본 색 영역은 (sRGB가 아닌) scRGB [2]
13117정성태8/17/202216390.NET Framework: 2042. C# 11 - 파일 범위 내에서 유효한 타입 정의 (File-local types)파일 다운로드1
13116정성태8/4/202216844.NET Framework: 2041. C# - Socket.Close 시 Socket.Receive 메서드에서 예외가 발생하는 문제파일 다운로드1
13115정성태8/3/202217427.NET Framework: 2040. C# - ValueTask와 Task의 성능 비교 [1]파일 다운로드1
13114정성태8/2/202217293.NET Framework: 2039. C# - Task와 비교해 본 ValueTask 사용법파일 다운로드1
... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...