Android Automotive OS용 동영상 앱 빌드

Android Automotive OS를 사용하면 자동차가 주차되어 있는 동안 사용자가 자동차의 인포테인먼트 시스템에서 동영상 앱을 실행할 수 있습니다.

Android Automotive OS 에뮬레이터에서 기존 앱 테스트

Android Automotive OS용 앱 빌드를 시작하려면 먼저 Android Automotive OS 에뮬레이터에서 스마트폰 및 태블릿용으로 제작된 기존 모바일 앱을 테스트해야 합니다. 에뮬레이터를 설정하려면 자동차용 Android 앱 테스트의 단계를 따르세요. 그런 다음, 안내에 따라 앱을 실행할 수 있습니다.

앱을 실행할 때 다음과 같은 호환성 문제가 있는지 주의해서 보아야 합니다.

  • 인포테인먼트 화면의 방향은 고정되어 있습니다. 자동차 앱 품질 가이드라인에 따라 앱은 세로 모드와 가로 모드를 모두 지원해야 합니다.
  • 다른 기기에서 사용할 수 있는 API도 Android Automotive OS에서는 사용하지 못할 수 있습니다. 예를 들어 일부 Google Play 서비스 API는 Android Automotive OS에서 사용할 수 없습니다. 이러한 문제를 해결하는 방법에 관한 자세한 내용은 기능 사용 중지를 참고하세요.

앱의 매니페스트 파일 구성

Android Automotive OS를 타겟팅하기 위해 앱이 보유해야 하는 여러 가지 매니페스트 항목이 있습니다. 이러한 항목을 보유하며 Android Automotive OS를 타겟팅하는 앱을 별도의 Automotive 폼 팩터를 사용하여 Play 스토어에 제출할 수 있으며, 이러한 앱은 자동차에서 사용하기에 안전한지 확인하기 위한 수동 검토 프로세스를 거칩니다. 자세한 내용은 자동차용 Android 앱 배포를 참고하세요.

Android Automotive OS 기능 지원

자동차의 Play 스토어에 표시되기 위해서는 Android Automotive OS용으로 빌드된 동영상 앱에 AndroidManifest.xml 파일 내 <uses-feature><uses-library> 요소가 포함되어야 합니다.

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
    <application ...>
        ...
        <uses-library
            android:name="android-automotive-video"
            android:required="true"/>
        ...
    </application>
</manifest>

자동차가 아닌 트랙에 제출된 앱은 자동차 관련 하드웨어에 종속될 수 없으므로 위의 <uses-feature> 요소를 선언할 수 없습니다. 따라서 자동차 기기와 자동차가 아닌 기기에 모두 동일한 앱을 출시하려면 앱이 자동차 기기용 앱과 휴대기기용(예: 스마트폰, 태블릿) 앱, 이렇게 최소 두 가지 버전을 생성해야 합니다. 이처럼 서로 다른 버전을 만드는 방법을 자세히 알아보려면 다음 문서를 참고하세요.

앱의 두 버전은 동일한 패키지 이름을 공유할 수 있지만, 다른 버전 코드를 사용해야 합니다. Play 스토어 트랙에 별도로 업로드되기 때문입니다.

또는 앱에서 별도의 버전을 사용하는 대신 모바일과 자동차 APK에 별도의 패키지 이름을 사용하거나 App Bundle을 사용하면 됩니다. 각 방법의 장단점을 알아보려면 미디어 앱 개발자 가이드의 패키지 이름을 참고하세요.

이전에 언급된 요소 외에도 Android Automotive OS용으로 빌드된 앱은 루트 <manifest> 요소에 다음 <uses-feature> 요소를 포함해야 합니다.

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

이러한 기능을 필수가 아닌 것으로 명시적으로 설정하면 앱이 Android Automotive OS 기기에서 사용할 수 있는 하드웨어 기능과 충돌하지 않습니다.

앱을 동영상 앱으로 표시

동영상을 지원하는 자동차 앱이 있음을 나타내려면 automotive_app_desc.xml이라는 XML 파일을 프로젝트의 res/xml/ 디렉터리에 추가합니다. 이 파일에는 다음 내용이 포함되어야 합니다.

<automotiveApp>
  <uses name="video"/>
</automotiveApp>

그런 다음, 매니페스트의 <application> 요소 내에 XML 파일을 참조하는 다음 <meta-data> 요소를 추가합니다.

<meta-data
  android:name="com.android.automotive"
  android:resource="@xml/automotive_app_desc"/>

주의 분산 행동 최적화 활동이 없는지 확인

동영상 앱은 현재 주차 중에만 사용할 수 있습니다. 따라서 <activity> 요소에 다음 <meta-data> 요소가 포함되어서는 안 됩니다.

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

이 메타데이터가 없으면 운전자의 주의가 분산되는 것을 줄이기 위해 자동차가 운전 모드로 전환될 때 OS에서 앱의 활동을 자동으로 차단합니다. 이 작업은 앱에서 onPause 수명 주기 콜백으로 발생하며 이 기간에는 앱의 동영상 및 오디오 재생이 모두 일시중지되도록 해야 합니다.

Android Automotive OS에서 앱 최적화

사용자에게 최상의 환경을 제공하려면 앱이 자동차에서 실행되는지 아닌지에 따라 특정 기능을 사용 설정하거나 중지해야 할 수 있습니다.

기능 사용 중지

기존 모바일 앱이 Android Automotive OS에서 사용할 수 있도록 설계되었다면 특정 기능은 관련이 없거나 사용할 수 없을 수도 있습니다. 예를 들어 자동차는 일반적으로 카메라 액세스를 제공하지 않습니다. 또한 Android Automotive OS에서는 Google Play 서비스 중 일부만 사용할 수 있습니다. 자세한 내용은 자동차용 Google Play 서비스를 참고하세요.

FEATURE_AUTOMOTIVE 기능을 검사하여 앱이 Android Automotive OS에서 실행되고 있는지 감지하려면 PackageManager.hasSystemFeature API를 사용하면 됩니다.

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

자바

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

또는 앱에 Android Auto 구성요소가 포함되어 있으면 앱이 Android Automotive OS나 Android Auto에서 실행 중인지 또는 자동차에 전혀 연결되어 있지 않은지를 감지하기 위해 자동차 앱 라이브러리에서 CarConnection API를 사용할 수도 있습니다.

PIP 모드의 경우 설정된 권장사항에 따라 기능의 사용 가능 여부를 확인하고 적절히 대응할 수 있습니다.

오프라인 시나리오 처리

자동차의 인터넷 연결이 증가하고 있지만, 앱은 다음과 같이 인터넷 연결이 없는 경우에도 실행을 처리할 수 있어야 합니다.

  • 자동차 제조업체는 정기 결제 패키지의 일부로 모바일 데이터를 제공할 수도 있습니다(사용자가 구매할 수도 있고 구매하지 않을 수도 있음).
  • 사용자가 모바일 데이터를 사용 설정했더라도, 휴대전화와 마찬가지로 특정 지역에서는 액세스가 제한될 수 있습니다.
  • 자동차에 Wi-Fi 무선 기능이 있을 수도 있고 없을 수도 있습니다. Wi-Fi 기능이 있는 경우에도, 자동차가 Wi-Fi 범위로 들어오지 않거나 OEM에서 셀룰러 네트워크를 위해 Wi-Fi를 사용 중지했을 수 있습니다.

앱은 이러한 시나리오를 처리하고 오프라인 콘텐츠를 제공하는 등 단계적으로 성능이 저하되도록 준비해야 합니다. 자세한 내용은 네트워킹 최적화를 위한 권장사항을 참고하세요.

Android Automotive OS에서 동영상 앱 테스트

일반적으로 개발자는 자동차용 Android 앱 테스트에서 제공되는 안내를 따를 수 있습니다. 현재 Android 스튜디오를 통해 사용할 수 있는 SDK 30 및 32 에뮬레이터에만 android-automotive-video 라이브러리가 포함되어 있으므로 앱의 Automotive OS 빌드를 테스트하려면 이를 사용해야 합니다. 하위 SDK 에뮬레이터에는 이 라이브러리가 없으므로 라이브러리가 필요한 앱의 adb 설치가 실패합니다. 이 라이브러리는 OS 수준이 낮은 프로덕션 차량에 포함될 수 있습니다.

자주 묻는 질문(FAQ)

Widevine DRM이 지원되나요?

예, Android Automotive OS에서는 Widevine DRM L3이 지원됩니다.