안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

안드로이드 오토 미러링 작업중 차에 계속 내려가거나, 계속 있기에는 여러모로 불편합니다. 그래서 테스트를 위한 안드로이드 오토 에뮬레이터를 소개해드릴려고 합니다. PC에서 바로 테스트가 가능하니 차에 왔다갔다 하지 않아도 되죠.

사용법은 간단하지만 폰에서 간단한 설정을 해주셔야 정상적으로 작동합니다.

그럼 시작하겠습니다.

1. 파일 다운로드

drive.google.com/file/d/1Ms8E4_cIETdkOFIOclEXUR7wHvq8sFPx/view?usp=sharing

AAEmu.zip

drive.google.com

위의 파일을 받고 압축을 풀어주세요.

필독파일에도 설명해놓았지만 이 글에서 사진으로 자세하게 설명하겠습니다.

2. USB 디버깅 활성화

설정-휴대전화 정보-소프트웨어 정보-빌드번호 연타

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

그럼 사진과 같이 개발자 모드가 활성화되고 뒤로가기버튼을 눌러서 나가주시면

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

이렇게 개발자 옵션이 활성화됩니다. 

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

스크롤 살짝 내리면 USB디버깅이 나오는데 클릭하여 켜줍니다.

3. 안드로이드 오토 설정

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

오른쪽 위 설정버튼 클릭

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

스크롤을 쭉 내려 버전 칸을 연타

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

개발자 설정 허용창 뜨면 확인 클릭

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

이후 오른쪽 위 점세개 클릭

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

헤드 유닛 서버 시작 클릭

3. 에뮬레이터 실행

처음에 다운받았던 AAEmu 폴더에 '1. 연결'이라는 배치파일을 실행시켜줍니다.

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

실행시키면 휴대폰 화면에 'USB 디버깅을 허용하시겠습니까?'라는 창이 뜰건데, 허용버튼을 눌러줍니다.

창은 5초뒤 자동으로 닫히니 냅두시면 됩니다.

이제 '2. 실행'이라는 배치파일을 실행하시면...

안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

이렇게 에뮬레이터가 실행됩니다. 이제 귀찮게 차량까지 내려가지 않고 바로바로 테스트하실수있습니다.

가시는길에 댓글,공감 하나씩 부탁드립니다. 

자동차 앱을 테스트하면 사용자에게 예상치 못한 결과가 발생하거나 사용자 환경이 저하되는 것을 막을 수 있습니다. 앱을 테스트하는 방법은 앱이 Android Auto에서 실행되는지 Android Automotive OS에서 실행되는지에 따라 다릅니다.

시작하려면 다음 섹션 중 하나를 참고하세요.

  • Android Auto용 앱 테스트
  • Android Automotive OS용 앱 테스트

Android Auto용 앱 테스트

데스크톱 헤드 단위(DHU)를 사용하면 개발 머신에서 Android Auto 헤드 단위를 에뮬레이션할 수 있으므로 Android Auto 앱을 실행하고 테스트할 수 있습니다. DHU는 Windows, macOS, Linux 시스템에서 실행됩니다.

이 섹션에서는 개발 머신에서 DHU를 설치하고 실행하여 앱을 테스트하는 방법에 관해 설명합니다. DHU를 설치한 후 DHU 실행에서 설명하는 지원되는 연결 방법 중 하나를 통해 휴대기기를 DHU에 연결하여 Android Auto 앱을 테스트할 수 있습니다.

DHU 관련 버그를 신고하거나 기능을 요청하려면 이 Issue Tracker를 사용하세요.

DHU 설치

사용 가능한 최신 버전의 DHU는 2.0입니다. 설치하여 사용하도록 권장되는 이 버전에는 이전 버전(1.1)에서 사용할 수 없는 기능이 포함되어 있습니다. 버전 2.0에 문제가 발생하는 경우 대신 버전 1.1을 설치해도 됩니다.

DHU 버전 2.0 설치

다음 단계를 따라 개발 머신에 DHU 2.0을 설치합니다.

  1. 온디바이스 개발자 옵션 사용 설정에 설명된 대로 Android 6.0(API 수준 23) 이상을 실행하는 휴대기기에서 개발자 모드를 사용 설정합니다.
  2. 기기에서 앱을 컴파일하고 설치합니다.
  3. 기기에 Android Auto를 설치합니다. Android Auto가 이미 설치되어 있으면 최신 버전을 사용 중인지 확인합니다.
  4. Android 스튜디오를 열고 베타 채널을 사용하도록 Android 스튜디오를 전환합니다. 최신 버전의 Android 스튜디오로 업데이트하라는 메시지가 표시되는 경우 업데이트를 무시해도 됩니다.
  5. SDK Manager를 열고 SDK Tools 탭으로 이동한 다음 Android Auto Desktop Head Unit Emulator 패키지 버전 2.0을 다운로드합니다.

    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

    DHU는 SDK_LOCATION/extras/google/auto/ 디렉터리에 설치됩니다. 다운로드가 완료된 후 다른 도구의 베타 채널 버전을 사용하지 않으려면 Android 스튜디오를 공개 버전 채널로 다시 전환하면 됩니다.

  6. Linux 또는 macOS 시스템에서 다음 명령어를 실행하여 DHU 바이너리가 실행 가능한지 확인합니다.

    chmod +x ./desktop-head-unit
    
Linux 전용 추가 단계

Linux 시스템에서 버전 2.0을 실행하는 경우 추가 라이브러리를 설치해야 합니다. DHU 바이너리는 GLIBC 버전 2.32 이상에 종속됩니다. 다음 명령어를 실행하여 시스템의 GLIBC 버전을 확인할 수 있습니다.

ldd --version

버전이 2.32보다 낮으면 GLIBC를 2.32 이상으로 업데이트하거나 OS를 GLIBC 2.32 이상과 호환되는 버전으로 업그레이드해야 합니다.

libc++1libc++abi1 라이브러리도 설치해야 합니다. 설치 절차는 Linux 배포판에 따라 다릅니다. 예를 들어 Debian 계열 Linux 배포판에서는 다음 명령어를 사용하여 라이브러리를 설치할 수 있습니다.

sudo apt-get install libc++1 libc++abi1

DHU 버전 1.1 설치

버전 2.0에 문제가 발생하면 다음 단계를 따라 개발 머신에 DHU 1.1을 설치하세요.

  1. 온디바이스 개발자 옵션 사용 설정에 설명된 대로 Android 6.0(API 수준 23) 이상을 실행하는 휴대기기에서 개발자 모드를 사용 설정합니다.
  2. 기기에서 앱을 컴파일하고 설치합니다.
  3. 기기에 Android Auto를 설치합니다. Android Auto가 이미 설치되어 있으면 최신 버전을 사용 중인지 확인합니다.
  4. Android 스튜디오를 열고 Android 스튜디오에서 공개 버전 채널을 사용하고 있는지 확인합니다.
  5. SDK Manager를 열고 SDK Tools 탭으로 이동한 다음 Android Auto Desktop Head Unit Emulator 패키지 버전 1.1을 다운로드합니다.

    DHU는 SDK_LOCATION/extras/google/auto/ 디렉터리에 설치됩니다. 다운로드가 완료된 후 다른 도구의 공개 버전 채널 버전을 사용하지 않으려면 Android 스튜디오를 다른 업데이트 채널로 다시 전환하면 됩니다.

  6. Linux 또는 macOS 시스템에서 다음 명령어를 실행하여 DHU 바이너리가 실행 가능한지 확인합니다.

    chmod +x ./desktop-head-unit
    
Linux 전용 추가 단계

Linux 시스템에서 버전 1.1을 실행하는 경우 추가 라이브러리를 설치해야 합니다. portaudio, libpng, sdl2, sdl2_ttf 라이브러리를 설치합니다. 설치 절차는 Linux 배포판에 따라 다릅니다. 예를 들어 Debian 계열 Linux 배포판에서는 다음 명령어를 사용하여 라이브러리를 설치할 수 있습니다.

sudo apt-get install libsdl2-2.0-0 libsdl2-ttf-2.0-0 libportaudio2 libpng12-0

DHU 실행

DHU를 설치한 후 USB로 휴대기기와 워크스테이션을 연결하여 Android Auto 앱을 테스트할 수 있습니다. 액세서리 모드(DHU 2.0에 권장) 또는 ADB 터널링을 통해 휴대기기를 개발 머신에 연결하여 DHU를 실행합니다.

액세서리 모드를 사용하여 연결(DHU 2.0만 해당)

Android Auto는 다음 명령어를 사용하여 Android Open Accessory(AOA) 프로토콜로 DHU에 연결하는 것을 지원합니다.

./desktop-head-unit --usb

기본적으로 DHU는 사용 가능한 USB 기기 목록을 검색하여 첫 번째 호환되는 기기에 연결하려고 시도합니다. 특정 기기를 타겟팅하려면 다음과 같이 --usb 명령어의 일부로 기기 ID를 포함합니다.

./desktop-head-unit --usb=[DEVICE_ID]

ADB 터널링을 사용하여 연결

이 방법을 사용하려면 Android 디버그 브리지(ADB)를 통해 Android Auto 헤드 단위 서버에 연결해야 합니다. 다음 단계를 따라 터널링을 설정하고 DHU를 실행합니다.

  1. 기기에서 실행되는 Android 버전에 따라 다음 중 하나를 실행하여 Android Auto 설정을 엽니다.

    • Android 10 이상: 기기에서 설정 > 앱 및 알림 > 앱 모두 보기 > Android Auto > 고급 > 앱 내 추가 설정을 탭합니다.
    • Android 9 이하: Android Auto 앱에서 메뉴, 설정을 차례로 탭합니다.
  2. 아래쪽에 있는 정보 섹션이 나올 때까지 스크롤한 다음 버전을 탭하여 버전 및 권한에 관한 모든 정보를 표시합니다.

  3. 버전 및 권한 정보 섹션을 10번 탭합니다.

    그러면 개발자 설정을 허용하시겠습니까? 대화상자가 표시됩니다.

  4. 확인을 탭합니다.

    이제 개발자 모드가 사용 설정되었으므로 더보기 메뉴에서 개발자 옵션에 액세스할 수 있습니다. Android Auto 앱을 처음 실행할 때에만 개발자 모드를 사용 설정하면 됩니다.

  5. 헤드 단위 서버가 아직 실행되고 있지 않은 경우 화면 오른쪽 상단에 있는 점 3개를 탭하여 더보기 메뉴를 열고 헤드 단위 서버 시작을 선택합니다(그림 1 참고).

    기기의 알림 영역에 서버가 실행 중이라고 나타내는 포그라운드 서비스가 표시됩니다(그림 2 참고).

    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

    그림 1. 개발자 옵션이 있는 컨텍스트 메뉴

    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

    그림 2. 헤드 단위 서버가 실행 중이라는 알림.

  6. Android Auto 앱의 설정 상단에서 이전에 연결된 자동차를 탭하고 Android Auto에 새 자동차 추가가 사용 설정되어 있는지 확인합니다.

  7. USB를 통해 휴대기기를 개발 머신에 연결합니다.

  8. 휴대기기의 화면이 잠금 해제되어 있는지 확인합니다. 해제되어 있지 않으면 DHU를 실행할 수 없습니다.

  9. 개발 머신에서 다음 adb 명령어를 실행하여 소켓 연결을 개발 머신의 포트 5277에서 Android 기기의 동일한 포트 번호로 전달합니다. 이렇게 구성하면 DHU는 TCP 소켓을 통해 휴대전화에서 실행되는 헤드 단위 서버에 연결할 수 있습니다.

    adb forward tcp:5277 tcp:5277
    
  10. SDK_LOCATION/extras/google/auto/ 디렉터리에서 명령어 desktop-head-unit.exe(Windows의 경우) 또는 ./desktop-head-unit(macOS 또는 Linux의 경우)을 실행하여 DHU를 시작합니다.

    cd SDK_LOCATION/extras/google/auto
    desktop-head-unit.exe # Windows
    ./desktop-head-unit # macOS or Linux
    

    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

  11. DHU에 휴대기기를 연결하는 것이 처음이라면 휴대기기의 화면을 확인하여 서비스 약관에 동의하고 필요에 따라 권한 설정을 조정합니다.

DHU를 시작한 후 DHU 콘솔 명령어를 사용하여 앱을 실행하고 테스트할 수 있습니다.

명령줄 옵션

기본적으로 헤드 단위 서버에서는 포트 5277을 통해 연결합니다. 호스트나 포트를 재정의(예: SSH를 통해 전달)하려면 다음 예와 같이 --adb=<[localhost:]port> 플래그를 사용합니다.

./desktop-head-unit --adb=5999

기본적으로 DHU는 터치스크린 사용자 인터페이스를 사용하는 Android Auto 호환 헤드 단위를 에뮬레이션합니다. 마우스로 DHU를 클릭하여 사용자 터치를 시뮬레이션할 수 있습니다. 입력에 로터리 컨트롤러를 사용하는 헤드 단위를 에뮬레이션하려면 다음 예와 같이 -i controller 플래그를 사용하면 됩니다.

./desktop-head-unit -i controller

DHU가 로터리 컨트롤러 모드인 경우 단축키를 사용하여 컨트롤러 작업을 시뮬레이션할 수 있습니다. 자세한 내용은 로터리 컨트롤러를 참고하세요. DHU는 로터리 컨트롤러 모드에서 마우스 클릭을 무시합니다. 따라서 시뮬레이션된 로터리 컨트롤러 작업으로 Android Auto를 작동해야 합니다.

DHU에서 지원하는 전체 명령줄 옵션은 사용하는 버전이 2.0인지 1.1인지에 따라 다릅니다.

버전 2.0
옵션설명
c, --config=FILE 지정된 구성 .ini 파일을 사용합니다. 자세한 내용은 DHU 구성 섹션을 참고하세요.
i, --input=INPUT 지정된 입력 모드 touch, rotary, hybrid 중 하나를 사용합니다.
-a, --adb=HOSTPORT ADB 전송(선택사항 host:port 또는 port)을 사용합니다. 기본값은 포트 5277입니다.
-a, --usb=DEVICE_ID USB(AOA) 전송(선택사항 DEVICE_ID)을 사용합니다.
v, --version 버전 정보를 표시합니다.
l, --licenses 오픈소스 라이선스를 표시합니다.
h, --headless 헤드리스 모드(UI 없음)에서 실행합니다.
?, --help 이 도움말 목록을 표시합니다.
버전 1.1
옵션설명
i, --input=INPUT 지정된 입력 모드 touch, rotary 중 하나를 사용합니다.
-a, --adb=HOSTPORT ADB 전송(선택사항 host:port 또는 port)을 사용합니다. 기본값은 포트 5277입니다.
v, --version 버전 정보를 표시합니다.
l, --licenses 오픈소스 라이선스를 표시합니다.
h, --headless 헤드리스 모드(UI 없음)에서 실행합니다.

DHU 사용자 가이드(2.0)

이 섹션에서는 DHU 버전 2.0에서 지원하는 기능과 그 사용법을 설명합니다.

명령어는 DHU를 시작한 터미널 창에 입력됩니다. 여러 명령어를 ;으로 구분하여 같은 줄에서 실행할 수 있습니다.

시스템

명령어설명
help [command] 전체 명령어 집합을 표시합니다. 명령어 이름이 지정된 경우(예: help day) 이 명령어에 관한 도움말이 표시됩니다.
quit
exit
Alt+Q 헤드 단위를 종료합니다.
sleep [seconds] 1초 동안 절전 모드가 됩니다. 지연 시간을 지정하면 그 seconds 동안 절전 모드로 전환됩니다. 예를 들어 CI 환경에서 헤드 단위(./desktop-head-unit < script.txt)를 스크립팅하는 데 사용할 수 있습니다.
screenshot filename.png 스크린샷을 filename.png.에 저장합니다.
licenses DHU에서 사용되는 라이브러리의 라이선스를 표시합니다.
keycode keycode 키 코드 섹션에 나열된 이름 중 하나인 keycode를 전송합니다.

터치 및 터치패드

터치나 터치패드가 사용 설정된 경우 디스플레이 창(터치의 경우)이나 터치패드 창(터치패드의 경우)을 클릭하면 터치 이벤트로 등록됩니다.

터치의 경우 첫 번째 손가락 위치를 마우스 오른쪽 버튼으로 클릭하고 두 번째 손가락의 경우 오른쪽 버튼을 길게 클릭하여 멀티터치를 시뮬레이션할 수 있습니다. 두 손가락의 중심점은 고정된 채로 유지되고 마우스를 움직이면 가운데를 중심으로 손가락을 회전하거나 안팎으로(또는 둘 다) 모으거나 벌릴 수 있습니다.

터치패드의 경우 왼쪽 버튼을 길게 클릭하여 화면의 다양한 UI 요소 사이를 스크롤합니다. 오른쪽 버튼을 클릭하면 현재 포커스가 있는 요소가 선택됩니다.

명령어설명
tap x y 지정된 좌표에서 터치 이벤트를 시뮬레이션합니다.

로터리 컨트롤러

DHU는 로터리 컨트롤러를 지원합니다. 컨트롤러를 사용 설정하면 다음 작업이 지원됩니다.

  • D패드의 위, 아래, 왼쪽, 오른쪽
  • 시계 방향 및 시계 반대 방향으로 회전
  • 휙 돌리기(한 번에 5단계) 실행
  • 컨트롤러를 클릭한 다음 컨트롤러를 다시 사용

명령어와 키 바인딩은 아래에 나와 있습니다.

마우스의 스크롤 휠은 dpad rotate 명령어를 전송하고 가운데 마우스 버튼 클릭(일반적으로 스크롤 휠)은 dpad click 명령어를 전송합니다.

대다수 자동차에는 터치스크린이 있습니다. 로터리 컨트롤러만 있는 자동차도 있고 하이브리드 터치 및 컨트롤러가 있는 자동차도 있습니다. 자동차는 지도 화면 이동 및 텍스트 입력에 사용할 수 있는 터치패드도 지원할 수 있습니다. 여러 차량 헤드 단위를 시뮬레이션할 때는 이러한 다양한 구성에 유의하세요.

명령어설명
dpad {up|down|left|right} 화살표 키 로터리 컨트롤러의 이동입니다.
dpad {ur|dl|ul|dr} 로터리 컨트롤러의 이동입니다.
dpad soft {left|right} Shift + 화살표 키 일부 로터리 컨트롤러에서 사용할 수 있는 사이드 버튼입니다.
dpad click Return 키 로터리 컨트롤러를 누릅니다.
dpad back 백스페이스 일부 로터리 컨트롤러에서 사용할 수 있는 뒤로 버튼입니다.
dpad rotate left 1 로터리 컨트롤러의 왼쪽(시계 반대 방향) 이동입니다.
dpad rotate right 2 로터리 컨트롤러의 오른쪽(시계 방향) 이동입니다.
dpad flick left Shift+1 로터리 컨트롤러의 빠른 시계 반대 방향 회전입니다.
dpad flick right Shift+2 로터리 컨트롤러의 빠른 시계 방향 회전입니다.
dpad 0-9*#+ 숫자 패드

마이크

DHU는 음성 입력에 마이크 사용 또는 사전 녹음된 음성 트랙 재생을 지원합니다. 편의를 위해 일반 음성 명령에 다음과 같은 사운드 파일을 제공했습니다. 이러한 사운드 파일은 SDK_LOCATION/extras/google/auto/voice/ 디렉터리에 설치됩니다.

파일 이름텍스트
navhome.wav 집까지 경로 안내
navwork.wav 직장까지 경로 안내
navsoh.wav 시드니 오페라 하우스까지 경로 안내
navgoogle.wav 서울특별시 강남구 테헤란로 152까지 경로 안내
exitnav.wav 내비게이션 종료
howlong.wav 거기까지 얼마나 걸려?
showtraffic.wav 교통정보 표시
showalternateroute.wav 대체 경로 보여 줘
pause.wav 음악 일시중지
nextturn.wav 다음 회전은 언제야?

DHU 프롬프트에서 개별 .wav 파일을 실행하려면 다음 안내를 따르세요.

mic play /path/to/filename.wav
명령어설명
mic begin M 마이크를 활성화하고(핸들 버튼을 클릭하는 것과 같음) 컴퓨터 마이크의 입력을 기다립니다.
mic play filename.wav 마이크를 활성화하고 지정된 WAV 파일 녹음을 재생합니다. 참고: WAV 파일이 재생되는 소리는 들리지 않지만 Android Auto의 응답은 들립니다.
mic repeat mic play와 함께 사용된 마지막 녹음을 반복합니다.
mic reject {on|off} 마이크 요청 거부를 사용 설정하거나 사용 중지합니다. 사용 설정하면 모든 마이크 요청이 거부됩니다.

센서

DHU는 다음 명령어를 사용하여 차량 센서 데이터의 변경사항 시뮬레이션을 지원합니다. 센서 데이터를 모의 처리하여 Android Auto에 전송하려면 DHU를 시작할 때 구성 .ini 파일로 상응하는 센서를 사용 설정해야 합니다.

명령어설명
fuel [percentage] 연료 잔량을 지정된 비율로 설정하거나 연료 잔량을 사용 중지하는 값을 전달하지 않습니다.
range [km] 주행 거리를 지정된 킬로미터로 설정하거나 주행 거리 데이터를 사용 중지하는 값을 전달하지 않습니다.
lowfuel [{on|off}] 연료 부족 경고 센서를 설정하거나 센서를 사용 중지하는 값을 전달하지 않습니다.
accel [x] [y] [z] 가속도계를 지정된 x, y, z 값(m/s^2)으로 설정하거나 가속도계 데이터를 설정 해제하는 매개변수를 전달하지 않습니다. 필요하다면 NAN을 전달하여 선택적 매개변수를 건너뜁니다.
compass bearing [pitch] [roll] 나침반을 지정된 방위, 피치, 롤 값(도)으로 설정합니다. 필요하다면 NAN을 전달하여 선택적 매개변수를 건너뜁니다.
gyro [x] [y] [z] 자이로스코프를 지정된 x, y, z 회전 속도(rad/s)로 설정하거나 자이로스코프 데이터를 설정 해제하는 매개변수를 전달하지 않습니다. 필요하다면 NAN을 전달하여 선택적 매개변수를 건너뜁니다.
location lat long [accuracy] [altitude] [speed] [bearing] 위치를 선택적 정확도(m), 고도(m), 속도(m/s), 방위(도)와 함께 지정된 위도와 경도 값으로 설정합니다. 필요하다면 NAN을 전달하여 선택적 매개변수를 건너뜁니다.
odometer km [current_trip_km] 주행 거리계를 선택적 현재 트립 킬로미터 값과 함께 지정된 킬로미터로 설정합니다.
speed [speed] 차량 속도를 지정된 값(m/s)으로 설정하거나 센서를 사용 중지하는 값을 전달하지 않습니다.
tollcard {insert|remove} 통행료 카드의 삽입 여부를 나타냅니다.

주간/야간 모드

DHU는 다음 명령어와 키 결합을 통해 주간 모드와 야간 모드 간 변경 시뮬레이션을 지원합니다.

명령어설명
day Shift+N 주간 모드(높은 밝기, 전체 색상)를 활성화합니다.
night Ctrl+N 야간 모드(낮은 밝기, 고대비)를 활성화합니다.
daynight
nightday
N 현재 주간 또는 야간 모드를 전환합니다.

포커스 관리

DHU는 다음 명령어를 사용하여 Android Auto에서 헤드 단위에 포커스를 두는지 시뮬레이션하는 것을 지원합니다.

명령어설명
focus video {on|off|toggle} Android Auto에서 헤드 단위에 동영상 포커스를 두는지를 사용 설정하거나 사용 중지합니다. 동영상 포커스를 사용 중지하면 기본 모드로 전환되는 헤드 단위를 시뮬레이션합니다.
focus audio {on|off|toggle} Android Auto에서 헤드 단위에 오디오 포커스를 두는지를 사용 설정하거나 사용 중지합니다. 오디오 포커스를 사용 중지하면 자체 오디오 소스를 재생하는 헤드 단위를 시뮬레이션합니다.
focus nav {on|off|toggle} Android Auto에서 헤드 단위에 탐색 포커스를 두는지를 사용 설정하거나 사용 중지합니다. 탐색 포커스를 사용 중지하면 자체 탐색 시스템을 실행하는 헤드 단위를 시뮬레이션합니다.

제한사항/운전 상태

DHU는 차량 이동 시 키보드 사용 중지와 휴대전화 구성 금지와 같은 특정한 제한사항의 시뮬레이션을 지원합니다.

명령어설명
restrict none U 모든 제한사항을 사용 중지합니다.
restrict all Shift+U 모든 제한사항(예: 운전 시뮬레이션)을 사용 설정합니다.

계기판

DHU는 다음 도로 이름이나 거리/시간, 회전 화살표 등 내비게이션 중에 다음 회전에 관한 기본 정보와 진행 중인 전화 통화에 관한 정보가 표시되는 계기판(핸들 뒤에 일반적으로 위치함) 에뮬레이션을 지원합니다.

구성 파일의 instrumentcluster 항목을 사용하거나 각 기능을 별도로 제어하는 navcluster 또는 phonecluster 항목으로 사용 설정할 수 있습니다.

미디어 재생 상태

DHU는 미디어 재생 상태(예: 재생 중인 트랙)를 보여 주는 추가 정보 표시를 지원합니다.

구성 파일의 playbackstatus 항목을 사용하여 사용 설정할 수 있습니다.

키 코드

DHU는 다양한 차량에서 일반적으로 사용할 수 있는 단축키 버튼 집합을 시뮬레이션하는 일련의 기본 키 코드를 제공합니다. 예를 들어 home 키 코드를 다음과 같이 DHU 프롬프트에서 트리거할 수 있습니다.

keycode home
키 코드설명
home 홈 화면으로 이동합니다.
back 뒤로 이동
call
endcall
전화를 걸거나 끊습니다.
search 검색을 트리거합니다.
media_play_pause
media_play
media_pause
미디어를 재생하거나 일시중지합니다.
media_next
media_previous
다음 미디어 트랙이나 이전 미디어 트랙으로 이동합니다.
media 기본 미디어 앱으로 이동합니다.
navigation 기본 내비게이션 앱으로 이동합니다.
tel 기본 전화 앱으로 이동합니다.

DHU 구성

DHU는 사용할 수 있는 입력 모드(터치, 컨트롤러), 프레임 속도, 해상도, 헤드 단위가 휴대전화에서 요청하는 DPI를 변경하는 구성 .ini 파일을 지원합니다.

구성 파일의 기본 위치는 ~/.android/headunit.ini입니다. 시스템에서 헤드 단위의 구성을 변경하려면 이 파일을 수정하면 됩니다.

-c 플래그를 사용하여 로드할 구성 파일도 지정할 수 있습니다.

./desktop-head-unit -c /path/to/config.ini
샘플 구성
[general]
touch = true
touchpad = false
controller = false
instrumentcluster = false
resolution = 800x480
dpi = 160
framerate = 30
fueltypes = unleaded,electric,hydrogen
evconnectors = supercharger

샘플 구성 파일은 SDK_LOCATION/extras/google/auto/config/ 폴더에서 확인할 수 있고 테스트할 수 있는 다양한 헤드 단위 설정을 보여 줍니다. 고급 사용 사례는 아래 지원되는 설정을 참고하세요.

입력 구성
이름기본유형설명
inputmode default 문자열 입력 모드를 정의합니다. touch, rotary, hybrid 옵션은 터치스크린과 로터리 지원을 사용 설정 및 사용 중지하고 기본 키 코드를 적절하게 설정하는 반면 default는 아래 touchcontroller 옵션을 따릅니다.
controller false 부울 로터리 컨트롤러 입력을 사용 설정합니다. inputmodedefault가 아니면 무시됩니다.
touch true 부울 터치스크린을 사용 설정합니다. inputmodedefault가 아니면 무시됩니다.
touchpad false 부울 터치패드를 사용 설정합니다.
touchpadnavigation false 부울 터치패드를 UI 내비게이션에 사용하도록 설정합니다.
touchpadtapasselect false 부울 true인 경우 터치패드를 탭하는 것이 선택 이벤트입니다.
touchpaduiabsolute false 부울 touchpadnavigationtrue이면 터치를 절댓값으로 간주해야 하는지 또는 동작으로 간주해야 하는지 설정합니다.
동영상 구성

Android Auto는 세 가지 동영상 해상도를 지원합니다.

  1. 480p(800x480 -- 기본값)
  2. 720p(1280x720)
  3. 1080p(1920x1080)

위 세 가지 이외의 다른 가로세로 비율을 지원하기 위해 헤드 단위는 필요에 따라 레터박스/필러박스에 여백을 지정할 수 있습니다. 예를 들어 1000x600 화면을 원한다면 해상도를 720p(1280x720), 여백 너비를 280, 여백 높이를 120으로 설정합니다. 이렇게 하면 왼쪽과 오른쪽 가장자리에 모두 140px 여백이, 상단과 하단에 60px가 추가되는 효과가 있습니다.

일반적인 6인치 화면(750x450)을 에뮬레이션하는 구성 예:

[general]
...
resolution = 800x480
marginwidth = 50
marginheight = 30

와이드 스크린:

[general]
...
resolution = 1280x720
marginwidth = 0
marginheight = 220
이름기본유형설명
resolution 800x480 문자열 800x480, 1280x720, 1920x1080 중 하나입니다.
dpi 160 정수
normalizedpi false 부울 true이면 더 큰 DPI 값을 고려하여 DHU 창 크기를 줄입니다. false이면 DPI 값이 클수록 창이 더 커집니다(실제 디스플레이를 모방하지 않지만 시각적 콘텐츠를 더 쉽게 검사할 수 있음).
realdpi 160 정수 동영상 구성에 사용됩니다.
framerate 30 정수 동영상 구성에 사용됩니다.
marginheight 0 정수 동영상 구성에 사용됩니다.
marginwidth 0 정수 동영상 구성에 사용됩니다.
margins 0,0,0,0 문자열 동영상 구성에 사용되고 marginwidthmarginheight가 있으면 재정의합니다. 형식은 상단, 하단, 왼쪽, 오른쪽입니다.
contentinsets 0,0,0,0 문자열 동영상 구성에 사용됩니다. 형식은 상단, 하단, 왼쪽, 오른쪽입니다.
stablecontentinsets 0,0,0,0 문자열 동영상 구성에 사용됩니다. 기본값은 contentinsets입니다. 형식은 상단, 하단, 왼쪽, 오른쪽입니다.
cropmargins false 부울 margins, marginheight 또는 marginwidth가 지정되면 이 설정의 true 값이 표시된 동영상에서 이러한 여백을 삭제합니다. 이는 최종 사용자가 보는 대상을 더 자세히 반영합니다.
pixelaspectratio 1.0 부동 소수점 수 동영상 구성에 사용됩니다.
센서 구성

센서 데이터를 모의 처리하여 Android Auto에 전송하려면 아래 옵션을 사용하여 상응하는 센서를 사용 설정해야 합니다. 센서가 사용 중지되면 DHU 명령어를 사용하여 센서에 전송된 데이터가 무시됩니다.

이름기본유형설명
accelerometer false 부울 가속도계 센서 데이터를 사용 설정합니다.
compass false 부울 나침반 센서 데이터를 사용 설정합니다.
driving_status false 부울 운전 상태 센서 데이터를 사용 설정합니다.
fuel false 부울 연료 센서 데이터를 사용 설정합니다.
gyroscope false 부울 자이로스코프 센서 데이터를 사용 설정합니다.
location false 부울 차량 위치 센서 데이터를 사용 설정합니다.
night_mode false 부울 야간 모드 센서 데이터를 사용 설정합니다.
odometer false 부울 주행 거리계 센서 데이터를 사용 설정합니다.
speed false 부울 속도 센서 데이터를 사용 설정합니다.
toll_card false 부울 통행료 카드 센서 데이터를 사용 설정합니다.
기타
이름기본유형설명
instrumentcluster false 부울 계기판을 사용 설정합니다. UI에 창을 추가하여 내비게이션 및 휴대전화 상태를 표시합니다.
navcluster false 부울 계기판을 사용 설정합니다. UI에 창을 추가하여 내비게이션 상태를 표시합니다.
phonecluster false 부울 계기판을 사용 설정합니다. UI에 창을 추가하여 휴대전화 상태를 표시합니다.
playbackstatus false 부울 재생 상태를 사용 설정합니다. UI에 창을 추가하여 재생 상태 메시지를 표시합니다.
driverposition left 문자열 left, center, right 중 하나입니다.
windowleft 정수 기본 창의 왼쪽 위치를 설정합니다.
windowtop 정수 기본 창의 상단 위치를 설정합니다.
fueltypes unleaded 문자열 다음 중 하나 이상(콤마로 구분)입니다.
  • unleaded
  • leaded
  • diesel-1
  • diesel-2
  • biodiesel
  • e85
  • lpg
  • cng
  • lng
  • hydrogen
  • electric
  • other
  • unknown
evconnectors 문자열 다음 중 0개 이상(콤마로 구분)입니다.
  • j1772
  • mennekes
  • chademo
  • combo-1
  • combo-2
  • roadster
  • hpwc
  • gbt
  • supercharger
  • other
  • unknown
fueltypeselectric이 포함된 경우에만 설정해야 합니다.

DHU 사용자 가이드(1.1)

DHU 명령어를 사용하여 음성 입력 재생 또는 주야간 디스플레이 모드 전환과 같은 Android Auto 기능으로 앱을 테스트할 수 있습니다. DHU를 실행한 터미널 창에서 DHU에 명령어를 실행할 수 있습니다. DHU 창을 선택하고 단축키를 사용하여 명령어를 실행할 수도 있습니다. 모든 컨트롤의 DHU 명령어 및 키 바인딩은 DHU 명령어 및 키 바인딩에 나열되어 있습니다.

주야간 모드 전환

Android Auto는 주간과 야간에 서로 다른 색 구성표를 지원합니다. 따라서 주간 모드와 야간 모드에서 앱을 테스트해야 합니다. 다음 방법 중 한 가지로 야간 모드와 주간 모드 간 전환을 할 수 있습니다.

  • DHU를 실행한 터미널에서 daynight 명령어를 실행합니다.
  • DHU 창을 선택하고 N 키를 누릅니다.

마이크 테스트

DHU는 음성 입력에 마이크 사용을 지원합니다. 마치 DHU가 마이크를 통해 트랙을 들은 것처럼 사전 녹음된 음성 트랙을 입력으로 취급하도록 DHU에 지시할 수도 있습니다.

사전 녹음된 사운드 파일을 입력으로 사용하려면 다음 명령어를 입력하세요.

mic play <sound_file_path>/<sound_file>.wav

편의를 위해 일반 음성 명령에 다음과 같은 사운드 파일을 제공하였습니다. 이러한 사운드 파일은 <sdk>/extras/google/auto/voice/ 디렉터리에 설치됩니다.

파일 이름텍스트
navhome.wav 집까지 경로 안내
navwork.wav 직장까지 경로 안내
navsoh.wav 시드니 오페라 하우스까지 경로 안내
navgoogle.wav 서울특별시 강남구 테헤란로 152까지 경로 안내
exitnav.wav 내비게이션 종료
howlong.wav 거기까지 얼마나 걸려?
showtraffic.wav 교통정보 표시
showalternateroute.wav 대체 경로 보여 줘
pause.wav 음악 일시중지
nextturn.wav 다음 회전은 언제야?
DHU 명령어 및 키 바인딩

DHU에서는 다음 명령어를 지원합니다.

표 1. 명령어 및 키 바인딩

카테고리명령어하위 명령어인수단축키설명
시스템 help [명령어] 전체 명령어 집합을 표시합니다. 명령어 이름(예: help day)을 지정하면 이 명령어에 관한 도움말이 시스템에 표시됩니다.
종료 Alt + q 헤드 단위를 종료합니다.
sleep [초] 1초 동안 절전 모드가 됩니다. 인수(예: sleep 30)를 지정하면 시스템이 지정된 시간(초) 동안 절전 모드가 됩니다. 이 명령어는 DHU용 스크립트를 작성하는 경우에 유용합니다. 명령줄에서 I/O 리디렉션을 사용하여 스크립트를 실행할 수 있습니다. ./desktop-head-unit < script.txtscript.txt 파일에서 명령어를 로드합니다.
스크린샷 filename.png 스크린샷을 filename.png로 저장합니다.
마이크 mic begin m 마이크를 활성화하고(핸들에서 마이크 버튼을 누르는 것과 동일) 컴퓨터 마이크의 입력을 기다립니다.
재생 filename.wav 마치 사운드가 마이크를 통해 전달된 것처럼 DHU에서 filename.wav를 음성 입력으로 취급하게 합니다. 사운드 파일이 재생되는 소리는 들리지 않지만 Android Auto의 응답은 들립니다.
반복 마치 동일한 사운드 파일 매개변수를 사용하여 mic play를 다시 호출한 것처럼 마지막 mic play 명령어를 반복합니다.
입력 dpad 위쪽
아래쪽
왼쪽
오른쪽 화살표
화살표 키 로터리 컨트롤러 이동을 시뮬레이션합니다.
소프트 왼쪽
소프트 오른쪽
Shift + 화살표 키 어떤 로터리 컨트롤러에 제공된 사이트 버튼 누르기를 시뮬레이션합니다.
click Return 키 로터리 컨트롤러 누르기를 시뮬레이션합니다.
back 백스페이스 일부 로터리 컨트롤러에 제공된 뒤로 버튼 누르기를 시뮬레이션합니다.
왼쪽으로 회전
오른쪽으로 회전
1
2
로터리 컨트롤러를 왼쪽(시계 반대 방향) 또는 오른쪽(시계 방향)으로 회전하기를 시뮬레이션합니다.
왼쪽으로 휙 돌리기
오른쪽으로 휙 돌리기
Shift+1
Shift+2
로터리 컨트롤러가 왼쪽(시계 반대 방향) 또는 오른쪽(시계 방향)으로 빠르게 회전하는 것을 시뮬레이션합니다.
x y 지정된 좌표에서 터치 이벤트를 시뮬레이션합니다. 예: tap 50 100
주간/야간 day Shift + N 주간 모드(높은 밝기, 전체 색상)를 활성화합니다.
night Control + N 야간 모드(낮은 밝기, 고대비)를 활성화합니다.
daynight n 현재 주간/야간 모드 간에 전환합니다.

문제 해결

최초 연결 시 빈 화면이 표시되는 DHU

이는 알려진 문제로 현재 Google에서 해결 중입니다. 이 문제를 해결하려면 다음 단계를 따르세요.

  1. DHU를 닫습니다.
  2. DHU 실행에 설명된 5단계를 따라 헤드 단위 서버를 중지했다가 다시 시작합니다.
  3. DHU를 다시 시작합니다.
  4. 전화 화면에 추가 권한 부여 단계가 있을 수 있습니다. 그러한 단계를 완료하면 DHU가 한 번 더 종료될 수 있습니다.
  5. DHU를 다시 시작합니다.

Android Automotive OS에서 앱 테스트

Android Emulator를 사용해 운전자 최적화 앱이 Android Automotive OS 차량 디스플레이에서 어떻게 실행되는지 테스트할 수 있습니다. 이 섹션에서는 Android Virtual Device(AVD)를 설정하여 앱을 테스트하는 방법을 설명합니다.

미디어 앱의 실행 구성 수정

Automotive OS 앱의 미디어 앱은 다른 Android 앱과 다릅니다. Android Automotive OS는 명시적 인텐트를 사용하고 미디어 브라우저 서비스에 호출을 전송하여 미디어 앱과 상호작용합니다.

앱을 테스트하려면 앱의 매니페스트에 실행 활동이 없는지 확인하고 다음 단계에 따라 자동차 모듈이 활동으로 실행되는 것을 방지하세요.

  1. Android 스튜디오에서 Run > Edit Configurations를 선택합니다.

    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

  2. 앱의 모듈 목록에서 자동차 모듈을 선택합니다.

  3. Launch Options > Launch에서 Nothing을 선택합니다.

  4. Apply를 클릭한 후 OK를 클릭합니다.

시스템 이미지 추가

특정 제조업체 하드웨어와 일치하는 AVD를 생성하려면 먼저 Android 스튜디오 SDK Manager를 통해 이러한 기기의 시스템 이미지를 추가해야 합니다. 그런 다음 AVD를 만들 때 이 시스템 이미지를 다운로드하여 AVD와 함께 사용할 수 있습니다.

자동차 제조업체의 시스템 이미지 추가

현재 Polestar 2 및 Volvo의 경우 OEM별 시스템 이미지를 추가할 수 있습니다. 다음 단계를 따라 시스템 이미지를 추가하세요.

  1. Android 스튜디오에서 Tools > SDK Manager를 선택합니다.
  2. SDK Update Sites 탭을 클릭합니다.
  3. Add
    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo
    를 클릭합니다.
  4. 다음 이름URL을 입력한 다음 OK를 클릭합니다.

    이름: Polestar 2 System Image

    URL: https://developer.polestar.com/sdk/polestar2-sys-img.xml

    이름: Volvo 시스템 이미지

    URL: https://developer.volvocars.com/sdk/volvo-sys-img.xml

  5. Apply를 클릭한 후 OK를 클릭합니다.

일반 시스템 이미지 설치

Android 스튜디오에는 앱 테스트에 사용할 수 있는 Android Automotive OS용 일반 시스템 이미지도 포함되어 있습니다. 이 일반 시스템 이미지에는 Google 어시스턴트가 포함되어 있으므로 앱 통합을 테스트할 수 있습니다.

다음 단계를 따라 일반 시스템 이미지를 설치하세요.

  1. Android 스튜디오에서 Tools > SDK Manager를 선택합니다.
  2. SDK Platforms 탭을 클릭합니다.
  3. Show Package Details를 클릭합니다.
  4. Android 9.0 (Pie)에서 Automotive Intel x86 Atom System Image를 선택합니다.
  5. Apply를 클릭한 후 OK를 클릭합니다.

    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo

자동차 AVD 생성 및 에뮬레이터 실행

다음 단계에 따라 Android Automotive OS 차량을 대표하는 AVD(Android Virtual Device)를 만든 후 이 AVD를 사용하여 에뮬레이터를 실행하세요.

  1. Android 스튜디오에서 Tools > AVD Manager를 선택합니다.
  2. Create Virtual Device를 클릭합니다.
  3. Select Hardware 대화상자에서 Automotive를 선택한 다음 기기를 선택하고 Next를 클릭합니다.
  4. Android 9.0 (Automotive)과 같이 Automotive를 타겟으로 한 시스템 이미지를 선택하고 Next를 클릭합니다.
  5. AVD에 이름을 지정하고 맞춤설정하고 싶은 다른 옵션을 선택한 다음 Finish를 클릭합니다.
  6. 도구 창 모음에서 Android Automotive OS AVD를 배포 타겟으로 선택합니다.
  7. Run
    안드로이드 오토 에뮬레이터 - andeuloideu oto emyulleiteo
    을 클릭합니다.

휴대전화 화면에서 앱 테스트

아래 단계에 따라 앱을 스마트폰에 사이드로드하고 테스트하세요.

1단계: Android Auto 앱에서 개발자 모드 및 알 수 없는 소스를 사용 설정

  1. 스마트폰에 Google Play에서 제공하는 Android Auto 앱을 설치합니다. Android Auto가 이미 설치되어 있으면 최신 버전을 사용 중인지 확인합니다.
  2. Android Auto 앱에서 햄버거 메뉴를 탭한 다음 설정을 탭합니다.
  3. 하단 근처에 있는 정보 섹션이 나올 때까지 스크롤한 다음 버전을 탭하여 버전 및 권한에 관한 모든 정보를 표시합니다.
  4. 버전 및 권한 정보 섹션을 10번 탭합니다.

    그러면 개발자 설정을 허용하시겠습니까? 대화상자가 표시됩니다.

  5. 확인을 탭합니다.
  6. 화면 오른쪽 상단에 있는 점 3개를 탭하여 더보기 메뉴를 열고 개발자 설정을 탭합니다.
  7. 애플리케이션 모드를 탭하고 개발자를 선택합니다.

    이렇게 하면 앱이 개발자 설정 목록으로 다시 이동합니다.

  8. 알 수 없는 소스가 표시될 때까지 아래로 스크롤하고 체크박스를 탭합니다.
  9. Android Auto를 다시 시작합니다.

2단계. 휴대전화에서 USB 디버깅 사용 설정

  1. 설정 > 휴대전화 정보에서 빌드 번호를 7번 탭하여 개발자 옵션을 사용 설정합니다.
  2. 설정 > 개발자 옵션으로 돌아가 USB 디버깅을 사용 설정합니다.

3단계: 휴대전화에 앱을 설치하고 테스트

  1. 개발 중에 앱을 컴퓨터에 직접 설치할 수 있도록 USB를 통해 컴퓨터에 휴대전화를 연결합니다. adb devices 명령어를 사용하여 USB를 통해 기기를 연결할 때 개발용 컴퓨터가 기기를 감지할 수 있도록 합니다.
  2. 기기를 설정하고 USB를 통해 연결하고 나면 SDK의 platform-tools/ 디렉터리로 이동하고 다음 명령어를 실행하여 기기에 .apk를 설치합니다.

    adb -d install path/to/your/app.apk
    

    이제 앱을 테스트하고 모든 것이 제대로 작동하는지 확인할 수 있습니다.

미디어 앱을 위한 추가 테스트 요구사항

미디어 앱을 테스트하는 경우 Android Auto나 Android Automotive OS 또는 둘 다에서 앱을 테스트하는 것 외에도 이 섹션에서 다루는 시나리오를 테스트해야 합니다.

MediaBrowseService 시작 시나리오 테스트

운전자와 승객을 안전하게 보호하기 위해 사용자가 운전 중에 앱과 상호작용할 수 있는 방법에는 추가 제한사항이 적용됩니다. 이러한 이유로 Android Auto 및 Android Automotive OS에는 사용자가 운전하는 동안 콘텐츠를 계속 즐길 수 있도록 앱에서 처리할 수 있어야 하는 MediaBrowserService 시작 시나리오가 있습니다.

앱을 테스트하여 다음 각 시나리오를 처리할 수 있는지 확인합니다.

  • MediaBrowserServiceActivity가 열리기 전에 실행됩니다.
  • MediaBrowserService는 표시할 수 있는 Activity가 없을 때 실행됩니다.
  • MediaBrowserService는 사용자가 로그인하지 않으면 실행됩니다.

이러한 시나리오를 테스트하는 동안 다음 방법을 시도해야 합니다.

  • 미디어 앱을 강제 종료한 다음 Android Auto나 Android Automotive OS를 실행합니다.
  • 미디어 앱 데이터를 지운 다음 Android Auto나 Android Automotive OS를 실행합니다.

또한 필요에 따라 적절한 오류 메시지를 설정해야 합니다.

미디어 테스트 도구

미디어 컨트롤러 테스트 앱을 사용하면 Android에서 미디어 재생과 관련된 복잡한 문제를 테스트하고 미디어 세션 구현을 확인할 수 있습니다. 이 도구를 시작하려면 미디어 컨트롤러 테스트 앱 사용을 참고하세요.