قفل برنامه به کاربران امکان میدهد برنامههای جداگانه را با یک کد پین منحصر به فرد ایمن کنند. این امر از دسترسی مهمانان یا کاربران ثانویه، به ویژه هنگامی که کاربر اصلی در وسیله نقلیه نیست، به دادههای حساس محافظت میکند.
قفل برنامه مستقل از قفل پروفایل عمل میکند. این طراحی به کاربران این امکان را میدهد که بدون نیاز به قفل کردن کل پروفایل کاربر، برنامههای حساس خاص را ایمن کنند.
قفل برنامه به عنوان یک برنامهی مستقل در اندروید ۱۴ (سطح API ۳۴) و بالاتر در دسترس است. میتوانید این برنامه را جداگانه از پلتفرم اصلی سیستم عامل اندروید خودرو (AAOS) توسعه دهید. با این حال، باید برنامهی قفل برنامه را به عنوان یک برنامهی دارای امتیاز امضا شده توسط پلتفرم که همراه با تصویر پلتفرم شما ارائه میشود، مستقر کنید.
کاربران هنگام نصب برنامهها از ویژگی قفل برنامه مطلع میشوند:

شکل ۱. اعلان قفل برنامه که پس از نصب برنامه نشان داده میشود.
قفل برنامه به طور پیشفرض غیرفعال است. پس از فعال کردن این ویژگی، از کاربر خواسته میشود که یک پین تنظیم کند. این پین متعاقباً برای دسترسی به هر برنامهای که توسط قفل برنامه محافظت میشود، مورد نیاز است:

شکل ۲. تنظیمات قفل برنامه.
هنگام تلاش برای باز کردن یک برنامه قفل شده، از کاربر خواسته میشود کد پین قفل برنامه را وارد کند:

شکل ۳. درخواست قفل برنامه هنگام تلاش برای باز کردن یک برنامه قفل شده.
قفل برنامه را پیکربندی کنید
برای اعمال پیکربندیهای برنامه، 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 Media App نسخه ۱۷ یا بالاتر پشتیبانی کند، میتوان برنامههای رسانهای را قفل کرد. اگر از Car-apps-release ۱۷ یا بالاتر پشتیبانی نمیکند، میتوانید قفل برنامه رسانهای را غیرفعال کنید:
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>
یک جریان بازیابی تنظیم کنید
ممکن است کاربران پین قفل برنامه خود را فراموش کنند. config_recoveryAccountType برای سفارشیسازی نوع حساب کاربری مورد استفاده برای بازیابی پین استفاده کنید.
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
قفل برنامه، پین را بازنشانی میکند و دادههای خصوصی برنامه را هنگامی که کاربر با حسابی با نوع منطبق با config_recoveryAccountType احراز هویت میکند، پاک میکند.
کد مرجع را استایلبندی کنید
برای سفارشیسازی کد مرجع، از پوششهای منابع زمان اجرا (RRO) برای پوشش SensitiveAppLockOverlayableResources استفاده کنید.
از آنجا که App Lock از کتابخانه رابط کاربری خودرو استفاده میکند، RRO های موجود در کتابخانه رابط کاربری خودرو شما نیز میتوانند در App Lock اعمال شوند.
کلیدهای پینپد از همان سبکی که در 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>
همچنین میتوانید ابعاد پین پد را تعریف کنید:
<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
برای پشتیبانی از قابلیت suspend-to-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>