앱에 Android Automotive OS 지원 추가

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Android Automotive OS를 사용하면 사용자가 자동차에 앱을 설치할 수 있습니다. 이 플랫폼의 사용자에게 다가가려면 Android Automotive OS와 호환되며 운전자에 최적화된 앱을 배포해야 합니다. Android Auto 앱의 거의 모든 코드와 리소스를 재사용할 수 있지만, 이 페이지의 요구사항을 충족하는 별도의 빌드를 만들어야 합니다.

개발 개요

Android Automotive OS 지원 추가는 간단하여 다음 몇 단계만 거치면 됩니다.

  1. 자동차 모듈 만들기
  2. Android Automotive OS 지원 선언
  3. CarAppService 및 CarAppActivity 선언
  4. gradle 종속 항목 업데이트

모든 Automotive OS 기능을 사용 설정하려면 Android 스튜디오 Bumblebee 이상을 사용하세요.

자동차 모듈 만들기

매니페스트와 같은 Android Automotive OS의 일부 구성요소에는 플랫폼별 요구사항이 있으므로 이러한 구성요소의 코드를 프로젝트의 다른 코드(예: 휴대전화 앱에 사용된 코드)와 별도로 유지할 수 있는 모듈을 만들어야 합니다.

기존 프로젝트의 경우 프로젝트에 자동차 모듈을 추가하려면 다음 단계를 따르세요.

  1. Android 스튜디오에서 File > New > New Module을 선택합니다.
  2. Automotive Module을 선택하고 Next를 클릭합니다.
  3. Application/Library name을 입력합니다. 이것은 Android Automotive OS에서 사용자에게 표시되는 앱의 이름입니다.
  4. Module name을 입력합니다.
  5. Package name이 기존 앱과 일치하도록 조정합니다.
  6. Minimum SDK에서 API 29: Android 10 (Q)를 선택하고 Next를 클릭합니다.
  7. Add No Activity를 선택하고 Finish를 클릭합니다.

새 프로젝트를 시작하는 경우 다음 단계를 따르세요.

  1. Android 스튜디오에서 File > New > New Project를 선택합니다.
  2. Project Type에서 Automotive를 선택합니다.
  3. No Activity를 선택하고 Next를 클릭합니다.
  4. Name에서 프로젝트 이름을 지정합니다. 이것은 Android Automotive OS에서 사용자에게 표시되는 앱의 이름입니다.
  5. Package name을 입력합니다. 패키지 이름 선택에 관한 자세한 내용은 Package names 섹션을 참고하세요.
  6. Minimum SDK에서 API 29: Android 10 (Q)를 선택하고 Next를 클릭합니다.

    Android Automotive OS에서 자동차 앱 라이브러리를 지원하는 모든 자동차는 Android 10(API 수준 29) 이상에서 실행되므로 이 값을 선택하면 호환되는 모든 자동차에 적용됩니다.

Android 스튜디오에서 모듈을 만든 후 새 자동차 모듈에서 AndroidManifest.xml을 엽니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

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

</manifest>

application 요소에 일부 표준 앱 정보가 있지만, Android Automotive OS 지원을 선언하는 uses-feature 요소도 있습니다. 또한, 매니페스트에 선언된 활동이 없습니다.

다음으로 매니페스트에 아래의 uses-features 요소를 추가합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    <uses-feature
        android:name="android.software.car.templates_host"
        android:required="true" />

    <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" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

</manifest>

첫 번째 uses-feature 요소는 앱이 템플릿 호스트를 사용하여 실행한다고 선언합니다. 나머지 네 개의 uses-feature 요소를 필요하지 않은 것으로 명시적으로 설정하면 앱이 Android Automotive OS 기기에서 사용할 수 있는 하드웨어 기능과 충돌하지 않습니다.

Android Automotive OS 지원 선언

다음 매니페스트 항목을 사용하여 앱에서 Android Automotive OS를 지원한다고 선언합니다.

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

이 매니페스트 항목은 앱에서 지원하는 자동차 기능을 선언한 XML 파일을 가리킵니다. 자동차 앱 라이브러리 앱이 있음을 나타내려면 automotive_app_desc.xml이라는 XML 파일을 Android Automotive OS 모듈의 res/xml/ 디렉터리에 추가합니다. 이 파일에는 다음 내용이 포함되어야 합니다.

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

CarAppService 및 CarAppActivity 선언

Android Automotive OS는 CarAppService 구현 및 CarAppActivity 선언을 사용하여 앱을 실행합니다. CarAppService 구현과 선언에 관한 안내는 CarAppService 및 세션 만들기CarAppService 선언을 참고하세요.

Android Automotive OS에서 Screen은 자동차 앱 라이브러리에 포함된 Activity에서 렌더링되지만 매니페스트에서 다음 activity 요소를 사용하여 선언해야 합니다.

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Additionally include the category below ONLY for navigation apps -->
        <category android:name="android.intent.category.APP_MAPS" />
    </intent-filter>

    <!-- Additionally include the intent-filter below ONLY for navigation apps -->
    <intent-filter>
        <action android:name="androidx.car.app.action.NAVIGATE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="geo" />
    </intent-filter>

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

</activity>

gradle 종속 항목 업데이트

CarAppService는 전화 앱과 자동차 모듈 간에 공유하는 별도의 모듈에 유지하는 것이 좋습니다. 이 방법을 사용한다면 다음 스니펫에 표시된 대로 자동차 모듈을 업데이트하여 공유 모듈을 포함해야 합니다.

my-automotive-os-module/build.gradle

Groovy

buildscript {
    ...
    dependencies {
        ...
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation(project(":shared_module_name"))
    }
}

기타 고려사항

Android Automotive OS 앱을 개발할 때 다음과 같은 기타 고려사항에 유의하세요.

패키지 이름

Android Automotive OS용 APK를 별도로 배포하므로 모바일 앱에서 패키지 이름을 재사용하거나 새 패키지 이름을 만들 수 있습니다. 가장 큰 차이점은 패키지 이름이 다르면 앱에 완전히 별개인 두 Play 스토어 등록정보가 있는 반면 현재 패키지 이름을 재사용하면 두 플랫폼에서 모두 단일 등록정보를 보유한다는 점입니다.

이는 주로 비즈니스 측면의 의사결정입니다. 예를 들어 한 팀에서 모바일 앱을 담당하고 완전히 별개의 팀에서 Android Automotive OS 앱을 담당한다면 별도의 패키지 이름을 만들어 각 팀에서 자체 Play 스토어 등록정보를 관리하도록 하는 것이 좋을 수도 있습니다. 두 접근 방식을 사용하는 데 필요한 기술적 작업에는 큰 차이가 없습니다.

다음 표는 각 접근 방식 사이의 기타 주요 차이점을 요약하여 보여 줍니다.

기능 동일한 패키지 이름 새 패키지 이름
스토어 등록정보 한 개 여러 개
미러링 설치 예. 설정 마법사에서 '빠른 앱 재설치' 아니요
Play 스토어 검토 절차 검토 차단. 현재 한 APK에 관한 검토가 실패하면 동일한 버전에 제출된 다른 APK가 차단됩니다. 개별 검토
통계, 측정항목, vitals 결합됨. 참고: 자동차별 데이터(예: 2020년에 자동차 2대)를 기기 이름으로 필터링할 수 있습니다. 별도
색인 생성 및 검색 순위 현재 순위에서 빌드 이전되지 않음
다른 앱과 통합 두 APK 간에 미디어 코드가 공유된다고 가정하면 대부분 변경이 필요하지 않음 상응하는 앱을 업데이트해야 할 수 있음(예: Google 어시스턴트로 URI를 재생하는 경우)

오프라인 콘텐츠

해당하는 경우 앱에 오프라인 작동을 구현합니다. Android Automotive OS가 설치된 자동차에는 자체 데이터 연결이 있을 것으로 예상됩니다. 즉, 데이터 요금제가 차량 비용에 포함되어 있거나 사용자가 지불합니다. 그러나 자동차는 휴대기기보다 연결성이 더 다양할 것으로 예상됩니다. 따라서 콘텐츠에 가장 적합한 오프라인 작동 전략을 고려하는 것이 좋습니다. 자동차의 디스크 공간이 다양할 수 있으므로 사용자가 오프라인 콘텐츠를 삭제할 방법이 있는지 확인해야 합니다.

다음은 오프라인 작동 전략을 고려할 때 유의해야 할 사항입니다.

  • 가장 좋은 콘텐츠 다운로드 시기는 앱을 현재 사용하고 있을 때입니다.
  • Wi-Fi를 사용할 수 있다고 가정하지 않습니다. 자동차가 Wi-Fi 범위로 들어오지 않거나 OEM에서 셀룰러 네트워크를 위해 Wi-Fi를 사용 중지했을 수 있습니다.
  • 사용자가 사용할 것 같은 콘텐츠를 스마트하게 캐시하는 것도 괜찮지만 사용자가 이 동작을 변경하도록 허용하는 것이 좋습니다.

자주 묻는 질문(FAQ)

Android Automotive OS에 관한 자주 묻는 질문(FAQ)의 답변은 다음 섹션을 참고하세요.

서드 파티 SDK 및 라이브러리 사용에 관한 제한사항이나 권장사항이 있나요?

서드 파티 SDK 및 라이브러리 사용에 관한 특정 가이드라인은 없습니다. 서드 파티 SDK 및 라이브러리를 사용하기로 한 경우에도 모든 자동차 앱 품질 요구사항을 준수해야 합니다.

Google Play Console을 사용하여 Android Automotive OS 앱을 게시하려면 어떻게 해야 하나요?

앱 게시 프로세스는 휴대전화 앱을 게시하는 것과 비슷하지만 다른 폼 팩터를 사용합니다. 앱에서 Android Automotive OS 출시 유형을 사용하도록 선택하려면 다음 단계를 따르세요.

  1. Play Console을 엽니다.
  2. 앱을 선택합니다.
  3. 왼쪽 메뉴에서 출시 > 설정 > 고급 설정 > 출시 유형을 선택합니다.
  4. 출시 유형 추가 > Android Automotive OS를 선택하고 Play Console의 안내를 따릅니다.

문제 해결

Android Automotive OS의 일반적인 문제 해결 시나리오에 관한 도움말은 다음 섹션을 참고하세요.

시스템 설정에서 자동차 앱 라이브러리 앱을 제거한 후에도 새 버전을 설치하려고 하면 오류가 발생합니다.

앱이 제거되었는지 확인하려면 adb uninstall app.package.name 명령어를 사용합니다.