Tuỳ chỉnh Trung tâm an toàn

Bật hoặc tắt Trung tâm an toàn

Để bật hoặc tắt Trung tâm an toàn, hãy sử dụng trường boolean config_enableSafetyCenter có thể phủ trong tệp frameworks/base/core/res/res/values/config.xml.

Trên hầu hết các thiết bị, Trung tâm an toàn được hỗ trợ theo mặc định, chẳng hạn như trên điện thoại và máy tính bảng. Trên một số hệ số hình dạng, Trung tâm an toàn bị tắt theo mặc định, ví dụ: trên Auto, TV và Wear.

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- ... -->
   <!-- Determines whether SafetyCenter feature is enabled. -->
    <bool name="config_enableSafetyCenter">true</bool>
    <!-- ... -->
</resources>

Để hỗ trợ Trung tâm an toàn, hãy đặt config_enableSafetyCenter thành true. Nếu bạn không muốn hỗ trợ Trung tâm an toàn, hãy đặt giá trị này thành false để tắt Trung tâm an toàn.

Khi Trung tâm an toàn bị tắt, mọi thao tác chuyển hướng đến trang Bảo mật và quyền riêng tư sẽ mở ứng dụng Cài đặt. Mọi nỗ lực tương tác với API sẽ bị bỏ qua hoặc trả về giá trị mặc định. Thẻ Cài đặt nhanh và mục Cài đặt được liên kết cũng hiển thị hoặc ẩn tuỳ thuộc vào việc Trung tâm an toàn có được bật hay không.

Cờ DeviceConfig

Ngoài việc bật Trung tâm an toàn bằng cấu hình config_enableSafetyCenter, cờ DeviceConfig (safety_center_is_enabled) được dùng để bật hoặc tắt Trung tâm an toàn từ xa.

Trên Android 14 trở lên, bạn không cần làm gì thêm vì cờ này là true theo mặc định.

Trong Android 13, Trung tâm an toàn bị tắt theo mặc định ở phía máy chủ và được bật bằng danh sách cho phép bằng cách sử dụng cờ này. Gửi vân tay thiết bị và liên hệ với TAM để được thêm vào danh sách cho phép. Xin lưu ý rằng bạn phải thêm phiên bản chính M-2022-11 trở lên vào danh sách cho phép. Đối với hoạt động phát triển và kiểm thử cục bộ, bạn có thể bật hoặc tắt cờ cục bộ (cho đến khi khởi động lại) bằng lệnh adb. Ví dụ: để bật cờ:

adb root
adb shell device_config set_sync_disabled_for_tests until_reboot
adb shell device_config put privacy safety_center_is_enabled true

Cách xác nhận xem Trung tâm bảo mật có được bật hay không:

adb root
adb shell cmd safety_center enabled

Kết quả sẽ trả về thông tin về việc Trung tâm an toàn có được bật chính xác trên thiết bị hay không.

Cập nhật tệp cấu hình

Sử dụng tệp cấu hình safety_center_config.xml để sửa đổi nội dung của màn hình Trung tâm an toàn. Bạn có thể phủ tệp này giả sử bạn đã đáp ứng Các yêu cầu về tuỳ chỉnh.

Lớp phủ tệp cấu hình

Để phủ tệp safety_center_config.xml, hãy xem phần Thay đổi giá trị của tài nguyên của ứng dụng trong thời gian chạy để biết thông tin về cách sửa đổi lớp phủ tài nguyên thời gian chạy (RRO).

Trong Android 14, hãy nhớ phủ tệp res/raw-v34/safety_center_config.xml chứ không phải res/raw/safety_center_config.xml vì tệp trước được ưu tiên (điều này cũng áp dụng cho các tệp khác thuộc phạm vi v34, ví dụ: res/values-v34/strings.xml). Gói lớp phủ phải có SDK tối thiểu thấp hơn 34, nếu không, bộ hạn định v34 có thể bị xoá trong quá trình tối ưu hoá. Ngoài ra, hãy nhớ sử dụng lớp phủ tĩnh vì giá trị này được tải vào khoảng thời gian khởi động.

Đối với thiết bị Dự án nguồn mở Android (AOSP), hãy nhắm đến gói com.android.safetycenter.resources. Không có cấu hình lớp phủ nào để nhắm mục tiêu. Tất cả tài nguyên đều có thể phủ lên nhau mà không có hạn chế nào về nội dung.

Đối với các thiết bị GMS được định cấu hình để nhận bản cập nhật Mainline, hãy nhắm đến gói com.google.android.safetycenter.resources. Nhắm mục tiêu cấu hình SafetyCenterConfig. Cấu hình này yêu cầu gói lớp phủ nằm trong phân vùng product, system hoặc vendor. Các nhà sản xuất thiết bị gốc (OEM) GMS nên sao chép tệp safety_center_config.xml do Google cung cấp và giới hạn các nội dung sửa đổi ở những nội dung mà quy trình kiểm thử GTS cho phép. Định nghĩa lớp phủ sẽ gần giống như sau:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.overlay.package"
    android:versionCode="1"
    android:versionName="1.0">
    <application android:hasCode="false" />
    <overlay
      android:targetPackage="com.google.android.safetycenter.resources"
      android:targetName="SafetyCenterConfig"
      android:isStatic="true"
      android:priority="0"/>
</manifest>

Đối với các thiết bị GMS không được định cấu hình để nhận bản cập nhật Mainline, hãy nhắm đến gói com.android.safetycenter.resources. Không có cấu hình lớp phủ nào để nhắm mục tiêu. Gói lớp phủ phải sử dụng tên gói com.google.android.safetycenter.resources.

Nhà sản xuất thiết bị gốc (OEM) GMS nên sao chép tệp safety_center_config.xml do Google cung cấp và hạn chế sửa đổi ở những nội dung mà các bài kiểm thử GTS cho phép. Nhà sản xuất thiết bị gốc (OEM) của GMS cũng phải xác định các chuỗi được sử dụng trong cấu hình XML.

Cấu trúc tệp

Nói chung, tệp safety_center_config.xml là danh sách các nguồn an toàn. Các nguồn an toàn này được sắp xếp theo nhóm để quản lý các tín hiệu trên màn hình Trung tâm an toàn, chẳng hạn như Bảo mật ứng dụng hoặc Khoá màn hình. Thứ tự của danh sách này xác định thứ tự hiển thị:

<safety-center-config> <!-- Wrapper for the Safety Center configuration -->
    <safety-sources-config>< !-- Wrapper for the safety sources groups -->
        <safety-sources-group> <!-- Contains information about a safety sources group -->
            <dynamic-safety-source /> <!-- Contains information about a safety source -->
            <!-- More safety sources in the group -->
        </safety-sources-group> <!-- More safety sources groups -->
    </safety-sources-config>
</safety-center-config>

Tệp cấu hình Google

Tệp cấu hình AOSP nằm trong packages/modules/Permission/SafetyCenter/Resources/res/raw/safety_center_config.xml.

Trong Android 13, tệp cấu hình của Google là:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                loggingAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                maxSeverityLevel="300"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidAdvancedSecurity"
                profile="primary_profile_only"
                intentAction="com.android.settings.security.SECURITY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>
            <static-safety-source
                id="AndroidAdvancedPrivacy"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_privacy_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_privacy_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_privacy_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

Trong Android 14, tệp cấu hình của Google là:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                deduplicationGroup="AppSecurity"/>
            <issue-only-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                loggingAllowed="false"
                deduplicationGroup="AppSecurity"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                notificationsAllowed="true"
                maxSeverityLevel="300"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_biometrics_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePasswordCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_password_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_password_checkup_title_for_work"
                searchTerms="@com.google.android.safetycenter.resources:string/google_password_checkup_search_terms"
                initialDisplayState="hidden"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                initialDisplayState="hidden"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"/>
            <dynamic-safety-source
                id="GoogleBackupAndRestore"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                title="@com.google.android.safetycenter.resources:string/google_backup_title"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_backup_search_terms"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="GoogleAdsIdentity"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.adsidentity.ACTION_ADS_IDENTITY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_ads_identity_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_ads_identity_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_ads_identity_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_ads_identity_search_terms"/>
            <dynamic-safety-source
                id="AndroidHealthConnect"
                profile="primary_profile_only"
                packageName="com.google.android.healthconnect.controller"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="false"
                title="@com.google.android.safetycenter.resources:string/google_health_connect_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_health_connect_search_terms"/>
            <dynamic-safety-source
                id="AndroidPrivacyAppDataSharingUpdates"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"
                title="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <static-safety-source
                id="GoogleActivityControls"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.accountsettings.action.ACTIVITY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_activity_controls_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_activity_controls_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_activity_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_activity_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_work_policy_title"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidMoreSettings"
                profile="primary_profile_only"
                intentAction="com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_more_settings_title"
                summary="@com.google.android.safetycenter.resources:string/google_more_settings_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_more_settings_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

Trong Android 15, tệp cấu hình của Google là:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                titleForPrivateProfile="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_private_profile"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                deduplicationGroup="AppSecurity"/>
            <issue-only-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                loggingAllowed="false"
                deduplicationGroup="AppSecurity"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                notificationsAllowed="true"
                maxSeverityLevel="300"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_biometrics_title_for_work"
                titleForPrivateProfile="@com.google.android.safetycenter.resources:string/google_biometrics_title_for_private_profile"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"/>
            <dynamic-safety-source
                id="GoogleAutoLock"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                maxSeverityLevel="0"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                titleForPrivateProfile="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_private_profile"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePasswordCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_password_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_password_checkup_title_for_work"
                titleForPrivateProfile="@com.google.android.safetycenter.resources:string/google_password_checkup_title_for_private_profile"
                searchTerms="@com.google.android.safetycenter.resources:string/google_password_checkup_search_terms"
                initialDisplayState="hidden"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                initialDisplayState="hidden"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"/>
            <dynamic-safety-source
                id="GoogleBackupAndRestore"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                title="@com.google.android.safetycenter.resources:string/google_backup_title"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_backup_search_terms"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidCellularNetworkSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_cellular_network_security_title"
            summary="@com.google.android.safetycenter.resources:string/google_cellular_network_security_summary">
            <dynamic-safety-source
                id="AndroidCellularNetworkSecurity"
                packageName="com.android.phone"
                profile="primary_profile_only"
                notificationsAllowed="true"
                initialDisplayState="hidden"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary">
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="GoogleAdsIdentity"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.adsidentity.ACTION_ADS_IDENTITY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_ads_identity_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_ads_identity_title_for_work"
                titleForPrivateProfile="@com.google.android.safetycenter.resources:string/google_ads_identity_title_for_private_profile"
                summary="@com.google.android.safetycenter.resources:string/google_ads_identity_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_ads_identity_search_terms"/>
            <dynamic-safety-source
                id="AndroidHealthConnect"
                profile="primary_profile_only"
                packageName="com.google.android.healthconnect.controller"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="false"
                title="@com.google.android.safetycenter.resources:string/google_health_connect_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_health_connect_search_terms"/>
            <dynamic-safety-source
                id="AndroidPrivacyAppDataSharingUpdates"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"
                title="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <static-safety-source
                id="GoogleActivityControls"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.accountsettings.action.ACTIVITY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_activity_controls_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_activity_controls_title_for_work"
                titleForPrivateProfile="@com.google.android.safetycenter.resources:string/google_activity_controls_title_for_private_profile"
                summary="@com.google.android.safetycenter.resources:string/google_activity_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_activity_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySourcesAdditional"
            title="@com.google.android.safetycenter.resources:string/google_privacy_additional_title">
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <dynamic-safety-source
                id="AndroidPrivateSpace"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_private_space_title"
                summary="@com.google.android.safetycenter.resources:string/google_private_space_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_private_space_search_terms"
                initialDisplayState="hidden"
                maxSeverityLevel="0"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_work_policy_title"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidMoreSettings"
                profile="primary_profile_only"
                intentAction="com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_more_settings_title"
                summary="@com.google.android.safetycenter.resources:string/google_more_settings_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_more_settings_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

Tuỳ chỉnh nguồn trong Trung tâm an toàn

Các loại nguồn trong Trung tâm an toàn

Nguồn có thể là động, chỉ vấn đề hoặc tĩnh, dựa trên loại dữ liệu mà nguồn cung cấp cho Trung tâm an toàn.

Nguồn động

Đánh dấu nguồn an toàn là dynamic-safety-source nếu nguồn đó có thể cung cấp dữ liệu động cho Trung tâm an toàn, cả cho mục nhập và thẻ cảnh báo tiềm ẩn:

<dynamic-safety-source
    id="AndroidLockScreen"
    packageName="com.android.settings"
    profile="primary_profile_only"
    title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
    summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
    initialDisplayState="disabled"
    maxSeverityLevel="300"
    refreshOnPageOpenAllowed="true"/>

Nguồn chỉ có vấn đề

Đánh dấu nguồn là issue-only-safety-source nếu không có mục cài đặt liên kết nào nhưng vẫn có cảnh báo. Bạn chỉ có thể đưa ra cảnh báo; việc cung cấp mục cài đặt sẽ dẫn đến lỗi:

<issue-only-safety-source
    id="AndroidAccessibility"
    packageName="com.google.android.permissioncontroller"
    profile="all_profiles"
    refreshOnPageOpenAllowed="true"/>

Nguồn tĩnh

Đánh dấu nguồn là static-safety-source nếu đó là mục nhập chuyển hướng không có dữ liệu động:

<static-safety-source
    id="AndroidAdvancedSecurity"
    profile="primary_profile_only"
    intentAction="com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS"
    title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
    summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>

Cấu hình nguồn của Trung tâm an toàn

Tuỳ thuộc vào loại nguồn Trung tâm bảo mật và các hằng số khác, các trường tệp cấu hình là không bắt buộc, bắt buộc hoặc bị cấm và có thể được tuỳ chỉnh:

  • id
    • Giá trị nhận dạng duy nhất cho nguồn an toàn, phải là duy nhất trong toàn bộ tệp và chỉ được chứa các ký tự chữ cái (a-z, A-Z) và có phân biệt chữ hoa chữ thường
    • Loại chuỗi
    • Bắt buộc đối với tất cả loại nguồn an toàn
  • packageName
    • Tên của gói sở hữu nguồn an toàn này, ví dụ: com.google.android.permissioncontroller
    • Loại chuỗi
    • Bắt buộc đối với các nguồn an toàn động và chỉ có vấn đề
    • Không được phép đối với các nguồn an toàn tĩnh trong Android 13; trong Android 14, bạn có thể tuỳ ý đặt thuộc tính này để nhắm đến intentAction của nguồn một cách rõ ràng thay vì ngầm ẩn (xem tài liệu về độ phân giải ý định để biết thêm chi tiết)
  • initialDisplayState
    • Cách hiển thị mục nhập trên giao diện người dùng khi nguồn an toàn không cung cấp dữ liệu
    • Loại enum được biểu thị dưới dạng chuỗi, phải là một trong những loại sau:
      • enabled (mặc định, hiển thị bình thường)
      • disabled (hiển thị màu xám, không thể nhấp vào)
      • hidden (không hiển thị)
    • Không bắt buộc đối với các nguồn an toàn động (mặc định là enabled)
    • Không được phép đối với các nguồn an toàn tĩnh và chỉ có vấn đề
  • profile
    • Nguồn an toàn này có tương tác với hồ sơ được quản lý của người dùng hay không
    • Loại enum được biểu thị dưới dạng chuỗi, phải là một trong những loại sau:
      • primary_profile_only (chỉ tương tác với thành phần mẹ của hồ sơ)
      • all_profiles (cũng có thể tương tác với(các) hồ sơ được quản lý và khởi động Android 15 bằng hồ sơ riêng tư)
    • Trên all_profiles, một số mục nhập giao diện người dùng được tạo (một mục cho hồ sơ gốc và một mục cho mỗi hồ sơ được quản lý); nguồn an toàn có thể cung cấp dữ liệu khác nhau cho mỗi hồ sơ
    • Bắt buộc đối với tất cả nguồn an toàn
  • searchTerms
    • Danh sách các cụm từ tìm kiếm liên kết đến mục Trung tâm an toàn khi sử dụng tính năng tìm kiếm trong ứng dụng Cài đặt
    • Mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_search_terms
    • Không bắt buộc đối với các nguồn an toàn động và tĩnh (mặc định là không có cụm từ tìm kiếm)
    • Không được phép đối với các nguồn an toàn chỉ có vấn đề
  • title
    • Tiêu đề mặc định của mục nhập giao diện người dùng, được dùng khi nguồn không cung cấp dữ liệu một cách linh động
    • Mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_title
    • Bắt buộc đối với các nguồn an toàn động và tĩnh (trừ trường hợp initialDisplayState="hidden" không có searchTerms)
    • Không được phép đối với các nguồn an toàn chỉ có vấn đề
  • titleForWork
    • Tiêu đề mặc định của mục nhập giao diện người dùng cho hồ sơ được quản lý được dùng khi nguồn không cung cấp dữ liệu một cách linh động
    • Mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_title_for_work
    • Bắt buộc đối với các nguồn an toàn động và tĩnh đã chỉ định profile="all_profiles" (trừ phi initialDisplayState="hidden" không có searchTerms)
    • Không được phép đối với các nguồn an toàn chỉ có vấn đề hoặc các nguồn có profile="primary_profile_only"
  • summary
    • Bản tóm tắt mặc định của mục nhập giao diện người dùng (đây là nội dung mô tả văn bản dài hơn hiển thị bên dưới tiêu đề), được dùng khi nguồn không cung cấp dữ liệu một cách linh động
    • Mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_summary
    • Không bắt buộc đối với các nguồn an toàn tĩnh (mặc định là không có bản tóm tắt)
    • Bắt buộc đối với các nguồn an toàn động (trừ phi initialDisplayStatehidden)
    • Không được phép đối với các nguồn an toàn chỉ có vấn đề
  • intentAction
    • Hành động sẽ kích hoạt khi người dùng nhấp vào mục nhập trên giao diện người dùng
    • Loại chuỗi, ví dụ: com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS hoặc mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_intent_action
    • Nếu hành động theo ý định này không phân giải cho packageName đã cho (nếu có), thì mục nhập giao diện người dùng sẽ hoạt động giống như khi có initialDisplayState="disabled"
    • Bắt buộc đối với các nguồn an toàn tĩnh và nguồn an toàn dynamicinitialDisplayState="enabled"
    • Không được phép đối với các nguồn an toàn chỉ có vấn đề
  • maxSeverityLevel
    • Mức độ nghiêm trọng tối đa mà nguồn Trung tâm an toàn này có thể cung cấp
    • Số nguyên được biểu thị dưới dạng chuỗi, ví dụ: 300
    • Không bắt buộc đối với các nguồn an toàn động và chỉ có vấn đề (mặc định là không có giới hạn tối đa)
    • Không được phép đối với các nguồn an toàn tĩnh
  • loggingAllowed
    • Liệu Trung tâm an toàn có thể ghi lại các lượt tương tác hoặc dữ liệu liên quan đến nguồn này hay không
    • Boolean được biểu diễn dưới dạng chuỗi, ví dụ: false
    • Không bắt buộc đối với các nguồn an toàn động và chỉ có vấn đề (mặc định là true)
    • Không được phép đối với các nguồn an toàn tĩnh
  • refreshOnPageOpenAllowed
    • Liệu có nên gửi tín hiệu đến nguồn an toàn để làm mới dữ liệu của nguồn đó khi màn hình Trung tâm an toàn mở ra hay không
    • Boolean được biểu diễn dưới dạng chuỗi, ví dụ: true
    • Không bắt buộc đối với các nguồn an toàn động và chỉ có vấn đề (mặc định là false)
    • Không được phép đối với các nguồn an toàn tĩnh
  • notificationsAllowed (Kể từ Android 14)
    • Nguồn an toàn có thể cung cấp thông báo khi báo cáo sự cố hay không (không bắt buộc)
    • Boolean được biểu diễn dưới dạng chuỗi, ví dụ: true
    • Không bắt buộc đối với các nguồn an toàn động và chỉ có vấn đề (mặc định là false)
    • Không được phép đối với các nguồn an toàn tĩnh
  • deduplicationGroup (Kể từ Android 14)
    • Giá trị nhận dạng duy nhất tiềm năng có thể dùng để loại bỏ các vấn đề trùng lặp từ nhiều nguồn. Các nguồn trong cùng một nhóm loại bỏ trùng lặp có thể gửi vấn đề có mã loại bỏ trùng lặp (không bắt buộc). Các vấn đề có cùng mã nhận dạng loại bỏ trùng lặp sẽ chỉ xuất hiện một lần trong giao diện người dùng, ngay cả khi nhiều nguồn đang gửi các vấn đề đó.
    • Loại chuỗi
    • Không bắt buộc đối với các nguồn an toàn linh động và chỉ có vấn đề (mặc định là không loại bỏ trùng lặp)
    • Không được phép đối với các nguồn an toàn tĩnh
  • packageCertificateHashes (Kể từ Android 14)
    • Danh sách hàm băm chứng chỉ được phân tách bằng dấu phẩy cho packageName đã cho. Nếu bạn đặt giá trị này, hệ thống sẽ thực hiện kiểm tra chứng chỉ đối với packageCertificateHashes đã cho cho packageName đã cho khi tương tác với nguồn an toàn, cho mục đích bảo mật.
    • Loại chuỗi
    • Không bắt buộc đối với các nguồn an toàn động và chỉ có vấn đề (mặc định là không kiểm tra chứng chỉ)
    • Không được phép đối với các nguồn an toàn tĩnh
  • titleForPrivateProfile (Kể từ Android 15)
    • Tiêu đề mặc định của mục trên giao diện người dùng cho hồ sơ riêng tư được dùng khi nguồn không cung cấp dữ liệu một cách linh động
    • Mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_title_for_private_profile
    • Bắt buộc đối với các nguồn an toàn động và tĩnh đã chỉ định profile="all_profiles" (trừ phi initialDisplayState="hidden" không có searchTerms)
    • Không được phép đối với các nguồn an toàn chỉ có vấn đề hoặc các nguồn có profile="primary_profile_only"

Tuỳ chỉnh nhóm nguồn trong Trung tâm an toàn

Các nguồn trong Trung tâm an toàn phải nằm trong một nhóm nguồn trong Trung tâm an toàn. Mỗi nhóm nguồn sẽ hiển thị trong giao diện người dùng theo thứ tự mà Nhóm nguồn được liệt kê trong tệp. Mỗi nguồn sẽ hiển thị trong nhóm theo thứ tự Nguồn được liệt kê trong tệp. Nếu nhóm chứa một nguồn an toàn, thì nhóm đó sẽ hiển thị dưới dạng một mục nhập thay vì một nhóm.

Cấu hình nhóm nguồn của Trung tâm an toàn

Sử dụng các biến sau để tuỳ chỉnh nhóm nguồn trong Trung tâm an toàn:

  • id
    • Giá trị nhận dạng duy nhất của nhóm nguồn an toàn; phải là duy nhất trong toàn bộ tệp
    • Loại chuỗi
    • Bắt buộc
  • title
    • Tiêu đề của nhóm trong giao diện người dùng
    • Mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_title
    • Bắt buộc nếu có ít nhất một nguồn an toàn động hoặc tĩnh trong nhóm (tức là nhóm không phải là type="hidden")
  • summary
    • Nội dung mô tả ngắn về nhóm trong giao diện người dùng, hiển thị bên dưới tiêu đề. Hiển thị trong các điều kiện cụ thể, thường là khi không cung cấp dữ liệu; nếu không, bản tóm tắt sẽ được tính toán dựa trên dữ liệu do các nguồn trong nhóm cung cấp.
    • Mã nhận dạng tài nguyên được biểu thị dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_summary
    • Không bắt buộc (mặc định là không có bản tóm tắt)
  • statelessIconType
    • Loại biểu tượng hiển thị cho nhóm khi các nguồn an toàn không cung cấp trạng thái, ví dụ: mục nhập tĩnh
    • Loại enum được biểu thị dưới dạng một chuỗi phải là none hoặc privacy (loại biểu tượng quyền riêng tư)
    • Không bắt buộc (mặc định là none)
  • type (Kể từ Android 14)
    • Một loại rõ ràng để xác định cách nhóm này tương tác với Trung tâm an toàn
    • Loại enum được biểu thị dưới dạng chuỗi, phải là một trong những loại sau:
      • stateful (hiển thị và đóng góp vào trạng thái tổng thể của Trung tâm an toàn)
      • stateless (hiển thị và không đóng góp vào trạng thái tổng thể của Trung tâm an toàn)
      • hidden (không hiển thị, tất cả nguồn phải chỉ là vấn đề)
    • Không bắt buộc, được suy luận theo mặc định bằng cách sử dụng các nguồn an toàn có trong nhóm cũng như summarystatelessIconType. Nếu type được chỉ định, một số hằng số bổ sung sẽ được thực thi để đảm bảo rằng hằng số đó khớp với các nguồn gặp phải trong nhóm (ví dụ: nhóm không được là hidden nếu nhóm đó chứa các mục nhập hiển thị cho người dùng)

Các loại nhóm nguồn trong Trung tâm an toàn

Các nhóm nguồn trong Trung tâm an toàn được phân loại là có trạng thái, không có trạng thái hoặc ẩn, dựa trên trạng thái của một số trường nhất định.

Nhóm có trạng thái

Một nhóm có cả tiêu đề và nội dung tóm tắt hoặc stateLessIconType="privacy" được coi là có trạng thái, góp phần vào trạng thái tổng thể của Trung tâm an toàn:

<safety-sources-group
    id="GoogleAppSecuritySources"
    title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
    summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
    <dynamic-safety-source
        id="GooglePlayProtect"
        packageName="com.android.vending"
        profile="all_profiles"
        intentAction="com.google.android.finsky.PLAY_PROTECT"
        title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
        titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
        summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
        refreshOnPageOpenAllowed="true"/>
    <dynamic-safety-source
        id="GoogleAppProtectionService"
        packageName="com.google.android.odad"
        profile="primary_profile_only"
        initialDisplayState="hidden"
        loggingAllowed="false"/>
</safety-sources-group>

Trong Android 13, một nhóm như vậy sẽ hiển thị dưới dạng mục có thể thu gọn trong giao diện người dùng. Trong Android 14, mục này sẽ hiển thị dưới dạng một mục có trạng thái riêng chuyển hướng đến trang con.

Nhóm không có trạng thái

Một nhóm có tiêu đề nhưng không có bản tóm tắt và stateLessIconType="none" được coi là không có trạng thái và không đóng góp vào trạng thái tổng thể của Trung tâm an toàn:

<safety-sources-group
    id="AndroidPrivacySources"
    title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
    summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
    statelessIconType="privacy">
    <static-safety-source
        id="AndroidPermissionUsage"
        profile="primary_profile_only"
        intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
        title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
        summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
    <static-safety-source
        id="AndroidPermissionManager"
        profile="primary_profile_only"
        intentAction="android.intent.action.MANAGE_PERMISSIONS"
        title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
        summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
    <static-safety-source
        id="AndroidPrivacyControls"
        profile="primary_profile_only"
        intentAction="android.settings.PRIVACY_CONTROLS"
        title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
        summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
    <issue-only-safety-source
        id="AndroidAccessibility"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidNotificationListener"
        packageName="com.google.android.permissioncontroller"
        profile="primary_profile_only"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidBackgroundLocation"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidPermissionAutoRevoke"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
</safety-sources-group>

Nhóm như vậy sẽ hiển thị dưới dạng danh sách các mục nhập cố định trong giao diện người dùng.

Nhóm bị ẩn

Nhóm ẩn chỉ chứa các nguồn an toàn chỉ có vấn đề và không có tiêu đề. Các nhóm ẩn không xuất hiện trong giao diện người dùng:

<safety-sources-group
    id="HiddenGroup">
    <issue-only-safety-source
        id="AndroidAccessibility"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
</safety-sources-group>

Dữ liệu động cho mục nhập tĩnh

Bạn có thể hiển thị nguồn Trung tâm an toàn động dưới dạng mục nhập tĩnh, cho phép đẩy các mục nhập chuyển hướng tuỳ thuộc vào một số điều kiện và cho phép tuỳ chỉnh nội dung của mục nhập đó trong thời gian chạy. Xác định nguồn động trong một nhóm không có trạng thái, ví dụ: tuỳ thuộc vào mục nhập thông tin về chính sách của nơi bạn làm việc.

Ví dụ này cho thấy một nguồn an toàn động không cung cấp tín hiệu an toàn vì nguồn này nằm trong một nhóm không có trạng thái:

<safety-sources-group
    id="AndroidAdvancedSources"
    title="@com.google.android.safetycenter.resources:string/google_advanced_title">
    <dynamic-safety-source
        id="AndroidWorkPolicyInfo"
        packageName="com.google.android.permissioncontroller"
        profile="primary_profile_only"
        initialDisplayState="hidden"
        refreshOnPageOpenAllowed="true"/>
            <!--  -->
</safety-sources-group>

Trong ví dụ này, nguồn chỉ có thể đẩy thẻ cảnh báo màu xanh lục và cung cấp trạng thái không xác định. Để có thể cung cấp dữ liệu khác, nguồn phải nằm trong một nhóm có trạng thái.

Tuỳ chỉnh chuỗi và trường lớp phủ

Đối với các thiết bị GMS không được định cấu hình để nhận bản cập nhật Mainline, thay vì phủ toàn bộ tệp cấu hình, bạn có thể phủ 6 tài nguyên chuỗi để đáp ứng mọi nhu cầu tuỳ chỉnh. Các tài nguyên chuỗi là lớp phủ được liệt kê trong bảng.

Tài nguyên chuỗi Mô tả
google_lock_screen_sources_summary Lớp phủ giá trị này để xác định một bản tóm tắt tĩnh hiển thị cho nhóm AndroidLockScreenSources khi tất cả các nguồn trong nhóm đều ở trạng thái tốt (thông tin hoặc mức độ nghiêm trọng không xác định). Theo mặc định, Trung tâm an toàn sẽ hiển thị tiêu đề của tất cả các nguồn trong nhóm được nối với nhau dưới dạng bản tóm tắt cho nhóm đó.
google_biometrics_title Lớp phủ giá trị này để xác định tiêu đề tĩnh cho nguồn sinh trắc học thuộc sở hữu của gói com.android.settings được dùng khi nguồn không cung cấp dữ liệu động. Lớp phủ này khi cũng phủ tiêu đề do nguồn cung cấp một cách linh động trong gói com.android.settings. Theo mặc định, giá trị này sẽ bị bỏ qua vì trạng thái hiển thị ban đầu của nguồn là hidden.
google_biometrics_summary Lớp phủ giá trị này để xác định bản tóm tắt tĩnh cho nguồn sinh trắc học do gói com.android.settings sở hữu, được dùng khi nguồn không cung cấp dữ liệu động. Theo mặc định, giá trị này sẽ bị bỏ qua vì trạng thái hiển thị ban đầu của nguồn là hidden.
google_biometrics_search_terms Lớp phủ giá trị này để xác định danh sách cụm từ tìm kiếm cho nguồn sinh trắc học do gói com.android.settings sở hữu.
google_biometrics_initial_display_state Lớp phủ giá trị này để hiển thị mục nhập giao diện người dùng cho nguồn sinh trắc học do gói com.android.settings sở hữu khi nguồn không cung cấp dữ liệu động. Giá trị mặc định là hidden.
google_security_updates_intent Lớp phủ giá trị này để thay đổi ý định cần thiết để mở hoạt động cho phép người dùng kiểm tra và cài đặt bản cập nhật bảo mật. Hành động theo ý định này phải được liên kết với một hoạt động đã xuất. Giá trị mặc định là android.settings.SYSTEM_UPDATE_SETTINGS.

Không có chuỗi nào khác trong gói com.google.android.safetycenter.resources có thể phủ lên.

Đối với các thiết bị AOSP, tất cả tài nguyên trong gói com.android.safetycenter.resources đều có thể phủ lên nhau mà không bị hạn chế về nội dung.

Đối với các thiết bị GMS không được định cấu hình để nhận bản cập nhật Mainline, hãy tạo một gói com.google.android.safetycenter.resources thay thế hoặc phủ lên com.android.safetycenter.resources xác định tất cả các chuỗi mà các bài kiểm thử GTS dự kiến.

Các chuỗi này là:

  • google_app_security_sources_title
  • google_app_security_sources_summary
  • google_play_protect_title
  • google_play_protect_title_for_work
  • google_play_protect_summary
  • google_play_protect_search_terms
  • google_lock_screen_sources_title
  • google_lock_screen_sources_summary
  • google_lock_screen_title
  • google_lock_screen_summary
  • google_lock_screen_search_terms
  • google_biometrics_title
  • google_biometrics_summary
  • google_biometrics_search_terms
  • google_biometrics_initial_display_state
  • google_accounts_sources_title
  • google_accounts_sources_summary
  • google_security_checkup_title
  • google_security_checkup_title_for_work
  • google_security_checkup_summary
  • google_security_checkup_search_terms
  • google_device_finder_sources_title
  • google_device_finder_sources_summary
  • google_find_my_device_title
  • google_find_my_device_summary
  • google_find_my_device_search_terms
  • google_updates_title
  • google_updates_summary
  • google_security_updates_title
  • google_security_updates_summary
  • google_security_updates_search_terms
  • google_security_updates_intent
  • google_play_system_update_title
  • google_play_system_update_summary
  • google_play_system_update_search_terms
  • google_privacy_sources_title
  • google_privacy_sources_summary
  • google_permission_usage_title
  • google_permission_usage_summary
  • google_permission_usage_search_terms
  • google_permission_manager_title
  • google_permission_manager_summary
  • google_permission_manager_search_terms
  • google_privacy_controls_title
  • google_privacy_controls_summary
  • google_privacy_controls_search_terms
  • google_advanced_title
  • google_advanced_security_title
  • google_advanced_security_summary
  • google_advanced_security_search_terms
  • google_advanced_privacy_title
  • google_advanced_privacy_summary
  • google_advanced_privacy_search_terms

Yêu cầu về tuỳ chỉnh

Yêu cầu về định dạng tệp

Tệp cấu hình phải là tệp XML và tuân theo định dạng được mô tả trong phần Cập nhật tệp cấu hình. Tệp phải nằm trong thư mục raw. Tệp này phải đáp ứng các hằng số được mô tả trong phần Tuỳ chỉnh nguồn Trung tâm an toànTuỳ chỉnh nhóm nguồn Trung tâm an toàn. Nếu tệp cấu hình không được tạo đúng cách theo các yêu cầu trên, thì tính năng này sẽ bị tắt hoàn toàn. Việc phân tích cú pháp tệp này cũng được hỗ trợ bằng các bài kiểm thử CTS và GTS có thể cung cấp thêm ngữ cảnh trong trường hợp tệp không được định dạng đúng cách (ở đầu nhật ký thiết bị logcat).

Thiết bị có các dịch vụ của Google

Trên các thiết bị GMS, một số quy tắc ràng buộc được áp dụng cho tệp này. Điều này được hỗ trợ bởi các bài kiểm thử GTS.

Thiết bị AOSP

Trên các thiết bị AOSP, tệp cấu hình phải được định dạng đúng cách và vượt qua các bài kiểm thử CTS cho Trung tâm an toàn. Các chương trình kiểm thử xác minh rằng tệp được định dạng đúng. Thiết bị GMS cũng phải vượt qua các bài kiểm thử này.