앱 잠금을 사용하면 사용자가 고유한 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>