נעילת האפליקציות מאפשרת למשתמשים לאבטח אפליקציות ספציפיות באמצעות קוד אימות ייחודי. כך נמנעת גישה למידע אישי רגיש על ידי אורחים או משתמשים משניים, במיוחד כשהמשתמש הראשי לא נמצא ברכב.
נעילת האפליקציות פועלת בנפרד מנעילת הפרופיל. העיצוב הזה מאפשר למשתמשים לאבטח אפליקציות רגישות ספציפיות בלי צורך לנעול את כל פרופיל המשתמש.
נעילת האפליקציות זמינה כאפליקציה נפרדת ב-Android 14 (רמת API 34) ומעלה. אפשר לפתח את האפליקציה הזו בנפרד מפלטפורמת הליבה של Android Automotive OS (AAOS). עם זאת, צריך לפרוס את אפליקציית נעילת האפליקציות כאפליקציה עם הרשאות חתימה על הפלטפורמה, שכלולה בתמונת הפלטפורמה.
המשתמשים מקבלים מידע על התכונה 'נעילת אפליקציות' כשהם מתקינים אפליקציות:
איור 1. ההתראה על נעילת האפליקציה מוצגת אחרי התקנת האפליקציה.
נעילת האפליקציות מושבתת כברירת מחדל. אחרי שמפעילים את התכונה, המשתמש מתבקש להגדיר קוד אימות. לאחר מכן נדרש קוד האימות הזה כדי לגשת לכל אפליקציה שמוגנת על ידי נעילת האפליקציות:
איור 2. הגדרות של נעילת האפליקציה.
כשמשתמש מנסה לפתוח אפליקציה נעולה, הוא מתבקש להזין את קוד האימות של נעילת האפליקציה:
איור 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 של Car-apps-release ומעלה. אם אתם לא תומכים בגרסה 17 של 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.
נעילת האפליקציות משתמשת בספריית ממשק המשתמש שברכב, ולכן אפשר להחיל עליה גם את ה-RROs הקיימים של ספריית ממשק המשתמש שברכב.
המקשים בלוח המקשים של קוד האימות משתמשים באותו סגנון שמוגדר ב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
כדי לתמוך בהשהיה ל-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>
תצורת build
כדי להשתמש בנעילת האפליקציות, צריך הרשאות מערכת. פלטפורמות שתומכות בנעילת אפליקציות צריכות גם להצהיר על תכונת המערכת 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>