การล็อกแอปช่วยให้ผู้ใช้รักษาความปลอดภัยของแต่ละแอปด้วยรหัส 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 Media App จาก 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
เนื่องจากการล็อกแอปใช้ Car UI Library ดังนั้น RRO ของ Car UI Library ที่มีอยู่จึงใช้กับการล็อกแอปได้ด้วย
ปุ่มกด 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,
}
เนื่องจากโหมดผู้ใช้ระบบแบบไม่มี UI (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>