アプリのロック

アプリロックを使用すると、ユーザーは個々のアプリを固有の 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>

メディアの一時停止を構成する

デフォルトでは、プラットフォームが 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 をサポートする

Suspend-to-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>