アプリロックを使用すると、ユーザーは個々のアプリを一意の PIN コードで保護できます。これにより、特にメインユーザーが車両にいない場合に、ゲストやセカンダリ ユーザーによるセンシティブ データへのアクセスを防ぐことができます。
アプリロックは、プロフィールのロックとは独立して動作します。この設計により、ユーザーはユーザー プロファイル全体をロックする必要なく、特定の機密性の高いアプリを柔軟に保護できます。
アプリロックは、Android 14(API レベル 34)以降でバンドルされていないアプリとして利用できます。このアプリは、コアの Android Automotive OS(AAOS)プラットフォームとは別に開発できます。ただし、プラットフォーム イメージに含まれるプラットフォーム署名付きの特権アプリとして、App Lock アプリをデプロイする必要があります。
アプリをインストールする際に、アプリロック機能についてユーザーに通知されます。
図 1. アプリのインストール後に表示されるアプリロックの通知。
アプリロックはデフォルトで無効になっています。この機能を有効にすると、PIN の設定を求めるプロンプトが表示されます。この PIN は、App Lock で保護されたアプリにアクセスする際に必要になります。
図 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>
メディアの停止を構成する
デフォルトでは、プラットフォームが Car-apps-release 17 以降の Car Media App をサポートしている場合、メディアアプリをロックできます。Car-apps-release 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 をオーバーレイします。
アプリロックは Car UI ライブラリを使用するため、既存の Car 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>