앱 잠금

앱 잠금을 사용하면 사용자가 고유한 PIN 코드로 개별 앱을 보호할 수 있습니다. 이렇게 하면 특히 기본 사용자가 차량에 없을 때 게스트나 보조 사용자의 액세스로부터 민감한 데이터를 보호할 수 있습니다.

앱 잠금은 프로필 잠금과 독립적으로 작동합니다. 이 설계는 사용자가 전체 사용자 프로필을 잠그지 않고도 특정 민감한 앱을 보호할 수 있는 유연성을 제공합니다.

앱 잠금은 Android 14 (API 수준 34) 이상에서 번들 해제된 앱으로 사용할 수 있습니다. 이 앱은 핵심 Android Automotive OS(AAOS) 플랫폼과 별도로 개발할 수 있습니다. 하지만 앱 잠금 앱은 플랫폼 이미지에 포함된 플랫폼 서명 권한 앱으로 배포해야 합니다.

사용자가 앱을 설치하면 앱 잠금 기능에 관한 정보가 표시됩니다.

앱이 설치된 후 앱 잠금 알림이 표시됨

그림 1. 앱이 설치된 후 앱 잠금 알림이 표시됩니다.

앱 잠금은 기본적으로 사용 중지되어 있습니다. 이 기능을 사용 설정하면 사용자에게 PIN을 설정하라는 메시지가 표시됩니다. 이 PIN은 앱 잠금으로 보호되는 앱에 액세스하는 데 필요합니다.

앱 잠금 설정

그림 2. 앱 잠금 설정입니다.

잠긴 앱을 열려고 하면 사용자에게 앱 잠금 PIN 코드를 입력하라는 메시지가 표시됩니다.

잠긴 앱을 열려고 할 때 앱 잠금 메시지 표시

그림 3. 잠긴 앱을 열려고 할 때 앱 잠금 메시지가 표시됩니다.

앱 잠금 구성

앱 구성을 적용하려면 res/values/config.xml를 수정하세요.

<resources>
    <!--A customizable list of system packages that appear in the App Lock settings. -->
    <string-array name="system_lockable_packages">
        <item>com.android.car.calendar</item>
    </string-array>

    <!-- Config for allowing locking of media apps. -->
    <bool name="config_enableMediaAppsLocking">true</bool>

    <!-- Default account type used for recovering pin. -->
    <string name="config_recoveryAccountType" translatable="false">com.google</string>
</resources>

잠글 수 있는 앱 맞춤설정

기본적으로 시스템 앱은 잠글 수 없습니다. system_lockable_packages 구성을 사용하여 잠글 수 있는 시스템 앱을 지정할 수 있습니다.

설정, 탐색 앱, 음성 어시스턴트와 같은 핵심 앱은 잠글 수 없습니다. 잠그면 예측할 수 없는 시스템 동작이 발생할 수 있기 때문입니다.

시스템 앱에 앱 잠금을 사용 설정하려면 system_lockable_packages 목록을 사용하세요.

<!-- List of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
    <item>com.android.car.calendar</item>
</string-array>

미디어 정지 구성

기본적으로 플랫폼이 자동차 앱 출시 17 이상의 자동차 미디어 앱을 지원하는 경우 미디어 앱을 잠글 수 있습니다. 자동차 앱 출시 17 이상을 지원하지 않는 경우 미디어 앱 잠금을 사용 중지할 수 있습니다.

<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>

복구 흐름 설정

사용자가 앱 잠금 PIN을 잊어버릴 수 있습니다. config_recoveryAccountType를 사용하여 PIN 복구에 사용되는 계정 유형을 맞춤설정합니다.

<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>

사용자가 config_recoveryAccountType와 일치하는 유형의 계정으로 인증하면 앱 잠금은 PIN을 재설정하고 비공개 앱 데이터를 삭제합니다.

참조 코드 스타일 지정

참조 코드를 맞춤설정하려면 런타임 리소스 오버레이 (RRO)를 사용하여 SensitiveAppLockOverlayableResources를 오버레이합니다.

앱 잠금은 자동차 UI 라이브러리를 사용하므로 기존 자동차 UI 라이브러리 RRO를 앱 잠금에도 적용할 수 있습니다.

PIN 패드 키는 styles.xml에 정의된 것과 동일한 스타일을 사용합니다.

<style name="PinPadKey" parent="Widget.CarUi.Button">
    <item  name="android:textSize">@dimen/pin_pad_key_text_size</item>
    <item name="android:layout_height">@dimen/pin_pad_key_diameter</item>
    <item name="android:layout_width">@dimen/pin_pad_key_diameter</item>
    …
</style>

PIN 패드 크기를 정의할 수도 있습니다.

<resources>
  <!-- Default dimensions for PIN pad view -->
  <dimen name="pin_pad_title_text_size">44sp</dimen>
  <dimen name="pin_pad_subtitle_text_size">32sp</dimen>
  <dimen name="pin_pad_key_diameter">96dp</dimen>
  <dimen name="pin_pad_key_text_size">32sp</dimen>
  <dimen name="pin_pad_key_padding">0dp</dimen>
  <dimen name="pin_pad_row_spacing">10dp</dimen>
  <dimen name="pin_pad_col_spacing">12dp</dimen>
</resources>

Suspend-to-RAM 지원

RAM으로 일시 중지를 지원하려면 config_earlyStartupServices에 앱 잠금 서비스를 추가해야 합니다.

<string-array translatable="false" name="config_earlyStartupServices">
    <!-- App Lock Persistent Background Service -->
    <item>com.android.car.sensitiveapplock/.service.PersistentBackgroundService#bind=bind,user=foreground,trigger=userUnlocked</item>
</string-array>

빌드 구성

앱 잠금에는 시스템 독점 권한이 필요합니다. 앱 잠금을 지원하는 플랫폼은 시스템 기능 com.android.car.sensitive_app_lock도 선언해야 합니다.

com.android.car.sensitiveapplock.xml에 기능 선언과 권한을 추가합니다.

<permissions>
    <feature name="com.android.car.sensitive_app_lock"/>

    <privapp-permissions package="com.android.car.sensitiveapplock">
        <permission name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
        <permission name="android.permission.QUERY_USERS" />
        <permission name="android.permission.MEDIA_CONTENT_CONTROL" />
        <permission name="android.car.permission.CAR_POWER" />
        <permission name="android.permission.POST_NOTIFICATIONS" />
    </privapp-permissions>
</permissions>

앱 잠금은 Android.bp 파일에서 서명된 시스템 앱으로 가져와야 합니다.

android_app_import {
    name: "AppLock",
    apk: "AppLock.apk",
    certificate: "platform",
    privileged: true,
    required: [
        "privapp-com.android.car.sensitiveapplock",
    ],
    optional_uses_libs: [
        "androidx.window.extensions",
        "androidx.window.sidecar",
        "com.android.oem.tokens", /* For Android 16+ */
    ],
}

prebuilt_etc {
    name: "privapp-com.android.car.sensitiveapplock",
    sub_dir: "permissions",
    src: "com.android.car.sensitiveapplock.xml",
    filename_from_src: true,
}

헤드리스 시스템 사용자 모드 (HSUM)와 게스트 사용자는 앱 잠금을 지원하지 않으므로 보조 프로필에서만 앱 잠금을 사용 설정해야 합니다. 이 구성을 사용하여 보조 사용자에 대해 앱을 사용 설정합니다.

예를 들어 preinstalled-packages.xml에서 다음과 같이 만듭니다.


<config>
        <!-- Config for the Sensitive App Lock app -->
    <install-in-user-type package="com.android.car.sensitiveapplock">
        <!-- Sensitive App Lock is only available to secondary users. Do not install app in Guest users. -->
        <install-in user-type="android.os.usertype.full.SECONDARY" />
    </install-in-user-type>
</config>