การล็อกแอปช่วยให้ผู้ใช้รักษาความปลอดภัยของแอปแต่ละแอปด้วยรหัส 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-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>
การล็อกแอปจะรีเซ็ต PIN และล้างข้อมูลแอปส่วนตัวเมื่อผู้ใช้ตรวจสอบสิทธิ์ด้วยบัญชีที่มีประเภทตรงกับ config_recoveryAccountType
จัดรูปแบบรหัสอ้างอิง
หากต้องการปรับแต่งรหัสอ้างอิง ให้ใช้การซ้อนทับทรัพยากรขณะรันไทม์ (RRO) เพื่อซ้อนทับ
SensitiveAppLockOverlayableResources
เนื่องจาก App Lock ใช้ไลบรารี UI ของรถยนต์ คุณจึงใช้ RRO ของไลบรารี UI ของรถยนต์ที่มีอยู่กับ App Lock ได้ด้วย
ปุ่มกด 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 คุณต้องเพิ่มบริการการล็อกแอปไปยัง
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>