應用程式鎖定

使用者可以透過應用程式鎖定功能,使用專屬 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-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>

支援暫停至 RAM

如要支援暫停至 RAM,您必須將 App Lock 服務新增至 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>