Tùy 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ủ lớp 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ố dạng, Trung tâm an toàn bị tắt theo mặc định, chẳng hạn như trên Ô tô, 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 nó.

Khi Trung tâm an toàn bị tắt, mọi nỗ lực chuyển hướng đến trang Bảo mật & 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 đều bị âm thầm bỏ qua hoặc trả về giá trị mặc định. Ô Cài đặt nhanh liên quan và mục Cài đặt cũng được hiển thị hoặc ẩn tùy thuộc vào việc Trung tâm An toàn có được bật hay không.

Cờ cấu hình thiết bị

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 sử dụng để bật hoặc tắt Trung tâm an toàn từ xa.

Trong Android 14 trở lên, bạn không cần thực hiện thêm hành động nào vì cờ này mặc định là true .

Trong Android 13, Trung tâm an toàn bị tắt theo mặc định ở phía máy chủ và được danh sách cho phép bật bằng cờ này. Gửi dấu vân tay thiết bị của bạn và liên hệ với TAM của bạn để được thêm vào danh sách cho phép. Lưu ý rằng cần phải thêm phiên bản chính tuyến M-2022-11 trở lên vào danh sách cho phép. Để phát triển và thử nghiệm cục bộ, cờ có thể được bật hoặc tắt 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

Và để xác nhận xem Trung tâm an toàn có được bật hay không:

adb root
adb shell cmd safety_center enabled

Đầu ra sẽ trả về xem 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 tin 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 Yêu cầu tùy chỉnh .

Xếp chồng tập tin cấu hình

Để phủ lên tệp safety_center_config.xml , hãy xem Thay đổi giá trị 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 đảm bảo phủ tệp res/raw-v34/safety_center_config.xml chứ không phải tệp res/raw/safety_center_config.xml vì tệp trước đây được ưu tiên (điều này cũng áp dụng cho các tệp khác nằm trong 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 vòng loại v34 có thể bị loại bỏ trong quá trình tối ưu hóa. Ngoài ra, hãy đảm bảo 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 các thiết bị Dự án mã nguồn mở Android (AOSP), hãy nhắm mục tiêu 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ả các tài nguyên đều có thể được phủ lên mà không có hạn chế về nội dung.

Đối với các thiết bị GMS được định cấu hình để nhận các bản cập nhật Mainline, hãy nhắm mục tiêu 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 OEM GMS phải sao chép tệp safety_center_config.xml do Google cung cấp và giới hạn các sửa đổi đối với những sửa đổi được phép kiểm tra GTS cho phép . Định nghĩa lớp phủ phải gần 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 các bản cập nhật Mainline, hãy nhắm mục tiêu 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 .

Các OEM GMS phải sao chép tệp safety_center_config.xml do Google cung cấp và giới hạn các sửa đổi đối với những nội dung được kiểm tra GTS cho phép. Các OEM 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 tin

Ở cấp độ cao, 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, ví dụ như Bảo mật ứng dụng hoặc Khóa 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 của 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>

Tùy chỉnh nguồn Trung tâm an toàn

Các loại nguồn của Trung tâm An toàn

Các nguồn có thể động, chỉ dành cho sự cố hoặc tĩnh, dựa trên loại dữ liệu chúng 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 nó có thể cung cấp dữ liệu động cho Trung tâm an toàn cho cả thẻ cảnh báo tiềm năng và mục nhập của 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"/>

Các nguồn chỉ phát hành

Đánh dấu nguồn là issue-only-safety-source nếu không có mục cài đặt liên quan nhưng vẫn đưa ra 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 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 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 Trung tâm an toàn

Tùy thuộc vào loại nguồn của Trung tâm An toàn và các yếu tố bất biến khác, các trường tệp cấu hình là tùy chọn, bắt buộc hoặc bị cấm và có thể được tùy chỉnh:

  • id
    • Mã định danh duy nhất cho nguồn an toàn, phải là duy nhất trong toàn bộ tệp và chỉ bao gồm các ký tự chữ cái (az, AZ) và phân biệt chữ hoa chữ thường
    • Kiểu chuỗi
    • Cần thiết cho tất cả các loại nguồn an toàn
  • packageName
    • Tên gói sở hữu nguồn an toàn này, ví dụ: com.google.android.permissioncontroller
    • Kiểu chuỗi
    • Cần thiết cho các nguồn an toàn động và chỉ có vấn đề
    • Bị cấm đối với các nguồn an toàn tĩnh trong Android 13; trong Android 14, tùy chọn này có thể được đặt để nhắm mục tiêu intentAction của nguồn một cách rõ ràng thay vì ngầm định (xem tài liệu giải quyết ý định để biết thêm chi tiết)
  • initialDisplayState
    • Cách hiển thị mục nhập UI khi không có dữ liệu nào được cung cấp bởi nguồn an toàn
    • Loại Enum được biểu thị dưới dạng chuỗi, phải là một trong các 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ị)
    • Tùy chọn cho các nguồn an toàn động (mặc định được enabled )
    • Bị cấm đối với các nguồn an toàn tĩnh và chỉ dành cho sự cố
  • 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 các loại sau:
      • primary_profile_only (chỉ tương tác với hồ sơ gốc)
      • all_profiles (cũng có thể tương tác với (các) hồ sơ được quản lý)
    • Trên all_profiles , một số mục nhập giao diện người dùng được tạo (một cho hồ sơ gốc và một 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 từng hồ sơ
    • Cần thiết cho tất cả các nguồn an toàn
  • searchTerms
    • Danh sách các cụm từ tìm kiếm ánh xạ tới mục nhập 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
    • ID 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
    • Tùy chọn cho các nguồn an toàn động và tĩnh (mặc định là không có thuật ngữ tìm kiếm)
    • Bị cấm đối với các nguồn an toàn chỉ dành cho vấn đề
  • title
    • Tiêu đề mặc định của mục nhập giao diện người dùng, được sử dụng khi không có dữ liệu nào được nguồn cung cấp động
    • ID 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ừ khi initialDisplayState="hidden" không có searchTerms )
    • Bị cấm đối với các nguồn an toàn chỉ dành cho 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 sử dụng khi dữ liệu không được nguồn cung cấp động
    • ID 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ừ khi initialDisplayState="hidden" không có searchTerms )
    • Bị cấm đối với các nguồn an toàn chỉ dành cho sự cố hoặc các nguồn có profile="primary_profile_only"
  • summary
    • Tóm tắt mặc định của mục nhập giao diện người dùng (đây là mô tả văn bản dài hơn được hiển thị bên dưới tiêu đề), được sử dụng khi dữ liệu không được nguồn cung cấp động
    • ID 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
    • Tùy chọn cho nguồn an toàn tĩnh (mặc định là không có tóm tắt)
    • Bắt buộc đối với các nguồn an toàn động (trừ khi initialDisplayState bị hidden )
    • Bị cấm đối với các nguồn an toàn chỉ dành cho vấn đề
  • intentAction
    • Hành động kích hoạt khi mục nhập giao diện người dùng được nhấp vào
    • Loại chuỗi, ví dụ: com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS hoặc ID 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 giải quyết được packageName nhất định (nếu có), thì mục nhập giao diện người dùng sẽ hoạt động giống như 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"
    • Bị cấm đối với các nguồn an toàn chỉ dành cho 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 diễn dưới dạng chuỗi, ví dụ: 300
    • Tùy chọn cho các nguồn an toàn động và chỉ dành cho sự cố (mặc định là không có mức tối đa)
    • Bị cấm đố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 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 một chuỗi, ví dụ false
    • Tùy chọn cho các nguồn an toàn động và chỉ dành cho sự cố (mặc định là true )
    • Bị cấm đối với các nguồn an toàn tĩnh
  • refreshOnPageOpenAllowed
    • Liệu tín hiệu có nên được gửi đến nguồn an toàn để làm mới dữ liệu của nó hay không khi màn hình Trung tâm an toàn được mở
    • Boolean được biểu diễn dưới dạng một chuỗi, ví dụ: true
    • Tùy chọn cho các nguồn an toàn động và chỉ dành cho sự cố (mặc định là false )
    • Bị cấm đối với các nguồn an toàn tĩnh
  • notificationsAllowed (Bắt đầu từ Android 14)
    • Liệu nguồn an toàn có thể tùy chọn cung cấp thông báo khi báo cáo sự cố hay không
    • Boolean được biểu diễn dưới dạng một chuỗi, ví dụ: true
    • Tùy chọn cho các nguồn an toàn động và chỉ dành cho sự cố (mặc định là false )
    • Bị cấm đối với các nguồn an toàn tĩnh
  • deduplicationGroup (Bắt đầu từ Android 14)
    • Một mã định danh duy nhất tiềm năng có thể dùng để loại bỏ các vấn đề trùng lặp đến từ các nguồn khác nhau. Các nguồn trong cùng một nhóm loại bỏ trùng lặp có thể gửi sự cố với id loại bỏ trùng lặp tùy chọn. Các vấn đề có cùng một id trùng lặp sẽ chỉ hiển thị một lần trong giao diện người dùng, ngay cả khi có nhiều nguồn gửi chúng.
    • Kiểu chuỗi
    • Tùy chọn cho các nguồn an toàn động và chỉ dành cho sự cố (mặc định là không trùng lặp)
    • Bị cấm đối với các nguồn an toàn tĩnh
  • packageCertificateHashes (Bắt đầu từ Android 14)
    • Danh sách băm chứng chỉ được phân tách bằng dấu phẩy cho packageName đã cho. Nếu cài đặt này được đặt, quá trình kiểm tra chứng chỉ sẽ được thực hiện đối với packageCertificateHashes đã cho cho packageName đã cho khi tương tác với nguồn an toàn vì mục đích bảo mật.
    • Kiểu chuỗi
    • Tùy chọn cho các nguồn an toàn động và chỉ dành cho sự cố (mặc định là không kiểm tra chứng chỉ)
    • Bị cấm đối với các nguồn an toàn tĩnh

Tùy chỉnh các nhóm nguồn của Trung tâm an toàn

Các nguồn của Trung tâm An toàn phải nằm trong nhóm nguồn của Trung tâm An toàn. Mỗi nhóm nguồn được hiển thị trong giao diện người dùng theo thứ tự các nhóm Nguồn được liệt kê trong tệp. Mỗi nguồn được 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 duy nhất, nó sẽ được hiển thị dưới dạng một mục nhập chứ không phải 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 để tùy chỉnh nhóm nguồn Trung tâm an toàn:

  • id
    • Mã định danh duy nhất cho nhóm nguồn an toàn; phải là duy nhất trong toàn bộ tập tin
    • Kiểu chuỗi
    • Yêu cầu
  • title
    • Tiêu đề của nhóm trong giao diện người dùng
    • ID 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 thuộc type="hidden" )
  • summary
    • Mô tả ngắn gọ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 dữ liệu không được cung cấp; mặt khác, bản tóm tắt được tính toán dựa trên dữ liệu được cung cấp bởi các nguồn trong nhóm.
    • ID 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
    • Tùy chọn (mặc định là không có tóm tắt)
  • statelessIconType
    • Loại biểu tượng được hiển thị cho nhóm khi không có trạng thái nào được cung cấp bởi các nguồn an toàn, ví dụ: các mục tĩnh
    • Loại Enum được biểu thị dưới dạng một chuỗi không được none hoặc privacy (loại biểu tượng quyền riêng tư)
    • Tùy chọn (mặc định là none )
  • type (Bắt đầu 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 các loại sau:
      • stateful (hiển thị và đóng góp vào trạng thái chung của Trung tâm an toàn)
      • stateless (hiển thị và không đóng góp vào trạng thái chung của Trung tâm an toàn)
      • hidden (không hiển thị, tất cả các nguồn phải chỉ có vấn đề)
    • Tùy chọn, được suy ra 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ố bất biến bổ sung sẽ được thực thi để đảm bảo rằng nó khớp với các nguồn gặp phải trong nhóm (ví dụ: nhóm không thể bị hidden nếu nó chứa các mục nhập mà người dùng có thể nhìn thấy)

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

Các nhóm nguồn của 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 trạng thái

Một nhóm có cả tiêu đề và tóm tắt hoặc stateLessIconType="privacy" được coi là có trạng thái sẽ góp phần vào trạng thái chung 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, nhóm như vậy sẽ hiển thị dưới dạng mục nhập có thể thu gọn trong giao diện người dùng. Trong Android 14, nó 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 quốc tịch

Một nhóm có tiêu đề nhưng không có 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 chung 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ố định các mục trong giao diện người dùng.

Nhóm ẩn

Nhóm ẩn chỉ chứa các nguồn an toàn chỉ dành cho vấn đề và không có tiêu đề. Các nhóm ẩn không hiển thị 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 chuyển hướng tùy thuộc vào một số điều kiện và cho phép tùy chỉnh nội dung của nó trong thời gian chạy. Ví dụ: xác định nguồn động trong một nhóm không trạng thái, tùy thuộc vào mục nhập thông tin chính sách công việc của bạn.

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ì nó nằm trong 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 các thẻ cảnh báo màu xanh lá cây 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.

Tùy chỉnh các trường chuỗi và lớp phủ

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

Tài nguyên chuỗi Sự miêu tả
google_lock_screen_sources_summary Xếp chồng giá trị này để xác định bản tóm tắt tĩnh được 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 hiển thị tiêu đề của tất cả các nguồn trong nhóm được nối dưới dạng tóm tắt cho nhóm.
google_biometrics_title Xếp chồng 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 sử 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 động trong gói com.android.settings . Điều này bị bỏ qua theo mặc định vì trạng thái hiển thị ban đầu của nguồn bị hidden .
google_biometrics_summary Xếp chồng giá trị này để xác định bản tóm tắt tĩnh cho nguồn sinh trắc học thuộc sở hữu của gói com.android.settings được sử dụng khi nguồn không cung cấp dữ liệu động. Điều này bị bỏ qua theo mặc định vì trạng thái hiển thị ban đầu của nguồn bị hidden .
google_biometrics_search_terms Xếp chồng giá trị này để xác định danh sách các cụm từ tìm kiếm cho nguồn sinh trắc học thuộc sở hữu của gói com.android.settings .
google_biometrics_initial_display_state Xếp chồng 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 thuộc sở hữu của gói com.android.settings khi nguồn không cung cấp dữ liệu động. Giá trị mặc định hidden .
google_security_updates_intent Xếp chồng giá trị này để thay đổi mục đích cần thiết để mở hoạt động cho phép người dùng kiểm tra và cài đặt các bản cập nhật bảo mật. Hành động có ý định này phải được liên kết với một hoạt động được 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ể chồng lên nhau.

Đố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ể được phủ lên mà không bị hạn chế về nội dung.

Đối với các thiết bị GMS chưa được định cấu hình để nhận các bản cập nhật Mainline, hãy tạo 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 cuộc kiểm tra GTS mong đợi.

Những 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 tùy 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 Cập nhật tệp cấu hình . Tệp phải nằm trong thư mục raw . Nó phải đáp ứng các bất biến được mô tả trong nhóm Tùy chỉnh nguồn Trung tâm An toànTùy chỉnh nguồn Trung tâm An toàn . Nếu tệp cấu hình không được định dạng phù hợp với 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ởi các thử nghiệm CTS và GTS có thể cung cấp ngữ cảnh bổ sung trong trường hợp tệp không được định dạng đúng (trên nhật ký thiết bị logcat ).

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

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

Thiết bị AOSP

Trên thiết bị AOSP, tệp cấu hình phải được định dạng tốt và vượt qua các bài kiểm tra CTS cho Trung tâm An toàn. Các cuộc kiểm tra xác minh rằng tập tin được định dạng tốt. Thiết bị GMS cũng phải vượt qua các bài kiểm tra này.