自訂安全中心

啟用或停用安全中心

如要啟用或停用安全中心,請使用 config_enableSafetyCenter 布林值欄位 frameworks/base/core/res/res/values/config.xml 檔案。

在大多數裝置上,系統預設支援安全中心,例如手機 和平板電腦在某些板型規格中,安全中心會預設為停用, 例如 Android Auto、TV 裝置和 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>

如要支援安全中心,請將 config_enableSafetyCenter 設為 true。如果發生以下情況: 不想支援安全中心,請將此值設為 false 即可停用。

停用安全中心後,系統將試圖 系統會改為在隱私權頁面中開啟「設定」應用程式。您試圖與 API 會在不發出通知的情況下略過,或傳回預設值。相關的快速 取決於是否顯示設定資訊方塊和設定項目 已啟用安全中心。

DeviceConfig 標記

除了透過config_enableSafetyCenter啟用安全中心外 DeviceConfig 旗標 (safety_center_is_enabled) 用於遠端啟用或停用安全功能 中央。

如果是 Android 14 以上版本,則不需要採取進一步行動 因為此標記預設為 true

在 Android 13 中,安全中心預設為停用 且透過許可清單啟用。提交裝置 指紋,並與 TAM 聯絡,獲準加入允許清單。請注意, 您需要將主線版本 M-2022-11 以上版本加入許可清單。 如要在本機開發和測試,您可在本機啟用或停用這個標記 使用 adb 指令 (直到重新啟動為止)。舉例來說,如要啟用標記:

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

接著,確認是否已啟用安全中心:

adb root
adb shell cmd safety_center enabled

輸出結果會傳回裝置是否已正確啟用安全中心。

更新設定檔

使用 safety_center_config.xml 設定檔修改 以及安全中心畫面只要您符合 自訂需求

疊加設定檔

如要重疊 safety_center_config.xml 檔案,請參閱變更 處理應用程式資源 ,瞭解如何修改執行階段資源疊加層 (RRO)。

在 Android 14 中,請務必將 res/raw-v34/safety_center_config.xml 檔案,而非 以 res/raw/safety_center_config.xml 做為前者的優先權 適用於其他範圍限定為 v34 的檔案,例如: res/values-v34/strings.xml)。覆蓋套件的 SDK 必須低於最低標準 34,否則在最佳化期間,v34 限定詞可能會被移除。 此外,請務必使用靜態疊加層,因為這個值會在開機週邊載入 讓應用程式從可以最快做出回應的位置 回應使用者要求

如果是 Android 開放原始碼計畫 (AOSP) 裝置,請指定套件 com.android.safetycenter.resources。沒有任何疊加層設定 目標。所有資源均可重疊,內容不會受到任何限制。

針對設為接收 Mainline 更新的 GMS 裝置,請指定 com.google.android.safetycenter.resources 套件。指定設定 SafetyCenterConfig。這項設定需要疊加套件位於 productsystemvendor 分區。GMS 原始設備製造商 (OEM) 應複製 Google 提供 safety_center_config.xml file 和限制 GTS 允許的修改方式 測試。疊加層定義 應該接近:

<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>

針對未設定接收 Mainline 更新的 GMS 裝置,請指定 com.android.safetycenter.resources 套件。沒有任何重疊設定 。疊加套件必須使用套件名稱 com.google.android.safetycenter.resources

GMS 原始設備製造商 (OEM) 應複製 Google 提供的 safety_center_config.xml 檔案 只能修改 GTS 測試允許的內容。GMS 原始設備製造商也必須定義 XML 設定中使用的字串。

檔案結構

大致來說,safety_center_config.xml 檔案是安全性清單。 資料來源這些安全來源會分門別類,方便管理 安全中心畫面,例如「應用程式安全性」或「螢幕鎖定」。請注意, 這份清單會定義顯示順序:

<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>

Google 設定檔

Android 開放原始碼計畫設定檔位於 packages/modules/Permission/SafetyCenter/Resources/res/raw/safety_center_config.xml

在 Android 13 中,Google 設定檔如下:

<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>

在 Android 14 中,Google 設定檔如下:

<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>

自訂安全中心來源

安全中心來源類型

資料來源可以是動態、問題單純或靜態,視資料類型而定 提供給安全中心的資訊

動態來源

如果安全來源可提供動態資料,請將該安全來源標示為 dynamic-safety-source 存取及可能出現的警告資訊卡:

<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"/>

僅限問題的來源

將來源標示為 issue-only-safety-source (如果有的話)沒有相關聯的設定 項目,但仍會顯示警告您只能提供警告;提供 設定項目會導致錯誤:

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

靜態來源

如果來源是沒有重新導向的重新導向項目,請將來源標示為 static-safety-source 動態資料:

<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"/>

安全中心來源設定

視安全中心的來源類型和其他非變數而定 檔案欄位為選填、必填或禁止使用,且可以自訂:

  • id
    • 安全來源的專屬 ID,在整段物件中不得重複 檔案,並且只能包含英數字元 (a-z、A-Z) 和 區分大小寫
    • 字串類型
    • 所有安全來源類型均須具備
  • packageName
    • 擁有此安全來源的套件名稱,例如 com.google.android.permissioncontroller
    • 字串類型
    • 必須用於動態和僅發生問題的安全來源
    • 禁止在 Android 中使用靜態安全來源 13;在 Android 14 中 您可以選擇設為指定來源的 intentAction 更明確,而不是暗示默示 (請參閱意圖解析 說明文件 )
  • initialDisplayState
    • 安全機制未提供資料時,UI 項目的顯示方式 來源
    • 以字串表示的列舉類型,必須是下列其中一個類型:
      • enabled (預設,正常顯示)
      • disabled (顯示為灰色,無法點選)
      • hidden (未顯示)
    • 對動態安全來源選用 (預設為 enabled)
    • 禁止用於僅有問題的靜態安全來源
  • profile
    • 這個安全來源是否會與使用者的受管理設定檔互動
    • 以字串表示的列舉類型,必須是下列其中一個類型:
      • primary_profile_only (僅與設定檔的上層互動)
      • all_profiles (也能與受管理的設定檔互動)
    • all_profiles 上,系統會針對設定檔產生多個 UI 項目 父項和每個受管理的設定檔安全性來源提供的功能 每個設定檔的資料
    • 必須適用於所有安全來源
  • searchTerms
    • 使用時對應至安全中心項目的搜尋字詞清單 在「設定」應用程式中進行搜尋
    • 資源 ID 以完整的資源名稱表示,例如 @package:string/my_search_terms
    • 對動態和靜態安全來源選用 (預設為不提供搜尋) 條款)
    • 禁止用於僅有問題的安全來源
  • title
    • UI 項目的預設標題,在沒有動態提供資料時使用 依來源
    • 資源 ID 以完整的資源名稱表示,例如 @package:string/my_title
    • 動態和靜態安全來源需要 (除非) initialDisplayState="hidden",沒有searchTerms)
    • 禁止用於僅有問題的安全來源
  • titleForWork
    • 所用受管理設定檔的 UI 項目預設標題 資料來源並非由來源動態提供
    • 資源 ID 以完整的資源名稱表示,例如 @package:string/my_title_for_work
    • 動態和靜態安全來源必須設為必填 profile="all_profiles" (除非 initialDisplayState="hidden" 為無 searchTerms)
    • 禁止只用於有問題的安全來源或含有 profile="primary_profile_only"
  • summary
    • UI 項目的預設摘要 (這是較長的文字說明) 會顯示於標題下方);如果不是由 來源
    • 資源 ID 以完整的資源名稱表示,例如 @package:string/my_summary
    • 對靜態安全性來源的選用 (預設為不顯示摘要)
    • 必須啟用動態安全來源才能使用 (除非 initialDisplayStatehidden)
    • 禁止用於僅有問題的安全來源
  • intentAction
    • 使用者點選 UI 項目時觸發的動作
    • 字串類型,例如 com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS,或 資源 ID 以完整的資源名稱表示,例如 @package:string/my_intent_action
    • 如果指定的 packageName 無法解析這項意圖動作 (如果 任何情況下,UI 項目的行為與 initialDisplayState="disabled"
    • 對靜態安全來源和 dynamic 個安全來源需要 擁有 initialDisplayState="enabled"
    • 禁止用於僅有問題的安全來源
  • maxSeverityLevel
    • 這個安全中心來源可提供的最高嚴重性等級
    • 以字串表示的整數,例如 300
    • 對動態和僅出現問題的安全來源而言,此為選用項目 (預設為否) 上限)
    • 禁止使用靜態安全來源
  • loggingAllowed
    • 安全中心是否要記錄與這類產品相關的互動或資料 來源
    • 以字串表示的布林值,例如 false
    • 針對動態和僅出現問題的安全來源,選用 (預設值為 true)
    • 禁止使用靜態安全來源
  • refreshOnPageOpenAllowed
    • 是否要將信號傳送給安全來源,藉此重新整理資料 安全中心畫面開啟時
    • 以字串表示的布林值,例如 true
    • 針對動態和僅出現問題的安全來源,選用 (預設值為 false)
    • 禁止使用靜態安全來源
  • notificationsAllowed (適用於 Android 14)
    • 安全來源是否可在出現以下情況時發出通知: 回報問題
    • 以字串表示的布林值,例如 true
    • 針對動態和僅出現問題的安全來源,選用 (預設值為 false)
    • 禁止使用靜態安全來源
  • deduplicationGroup (適用於 Android 14)
    • 可能的專屬 ID,可用來刪除重複問題 來自不同來源的內容相同簡化中的來源 群組可以傳送具有選擇性簡化 ID 的問題。與 相同的簡化 ID 只會在使用者介面中出現一次, 有很多來源會傳送這些資訊
    • 字串類型
    • 對動態和僅出現問題的安全來源而言,此為選用項目 (預設為否) 簡化)
    • 禁止使用靜態安全來源
  • packageCertificateHashes (適用於 Android 14)
    • 指定項目的憑證雜湊清單 (以半形逗號分隔) packageName。如果設定此屬性,系統會憑證 查看 將會對指定的 packageCertificateHashes 執行 packageName 安全目的。
    • 字串類型
    • 對動態和僅出現問題的安全來源而言,此為選用項目 (預設為否) 憑證檢查)
    • 禁止使用靜態安全來源

自訂安全中心來源群組

安全中心來源群組必須隸屬於安全中心來源群組。 每個來源群組在 UI 中都會按照來源群組的順序顯示 列在檔案中。每個來源都會按照順序顯示在群組內 來源會列在檔案中。如果群組含有單一安全來源 會顯示為單一項目,而非群組。

安全中心來源群組設定

使用下列變數自訂安全中心來源群組:

  • id
    • 安全性來源群組的專屬 ID。不得重複 整個檔案
    • 字串類型
    • 必填
  • title
    • UI 中的群組標題
    • 資源 ID 以完整的資源名稱表示,例如 @package:string/my_title
    • 如果其中至少有一個動態或靜態安全來源,這就是必要欄位 群組 (例如,該群組不屬於 type="hidden")
  • summary
    • 群組在 UI 中的簡短說明,顯示在標題下方。 在特定情況下顯示 (通常在未提供資料的情況下); 否則系統會根據
    • 資源 ID 以完整的資源名稱表示,例如 @package:string/my_summary
    • 選用 (預設為不顯示摘要)
  • statelessIconType
    • 如未提供任何狀態,系統會顯示群組的圖示類型 安全來源,例如:靜態項目
    • 以字串表示的列舉類型,必須是 noneprivacy (隱私權圖示類型)
    • 選用 (預設為 none)
  • type (適用於 Android 14)
    • 明確的類型,用於判斷這個群組如何與安全中心互動
    • 以字串表示的列舉類型,必須是下列其中一個類型:
      • stateful (負責顯示資訊並對整體安全中心的貢獻) 狀態)
      • stateless (螢幕不會提升整體安全) 中心狀態)
      • hidden (未顯示,所有來源都必須是問題來源)
    • 選用,根據預設,系統會使用 以及 summarystatelessIconType 群組。如果 為確保系統會強制執行 type 的指定其他變化版本,確保 與群組中擷取的來源相符 (例如 如果群組包含使用者可看見的項目,則不得為 hidden)

安全中心來源群組類型

安全中心來源群組可歸類為「有狀態」、「無狀態」或「隱藏」 根據特定欄位的狀態預測作業

有狀態群組

群組含有標題和摘要,或者 stateLessIconType="privacy" 有狀態是影響整體安全中心狀態的因素:

<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>

在 Android 13 中,這類群組會顯示為可收合 項目。在 Android 14 中,應用程式會顯示為 狀態的項目,以便重新導向至子網頁。

無狀態群組

沒有摘要的群組,stateLessIconType="none" 不會影響安全中心的整體狀態:

<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>

這類群組在使用者 UI 中會顯示為嚴格的項目清單。

隱藏的群組

隱藏的群組只包含有問題的安全來源,沒有標題。 隱藏的群組不會顯示在使用者介面中:

<safety-sources-group
    id="HiddenGroup">
    <issue-only-safety-source
        id="AndroidAccessibility"
        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"/>
            <!-- … -->
</safety-sources-group>

在此範例中,來源只能推送綠色警示資訊卡,並提供 未指定狀態如要提供其他資料,來源必須落在 或「有狀態」群組

自訂字串和疊加層欄位

針對未設定接收 Mainline 更新的 GMS 裝置, 疊加整個設定檔,就能將六個字串資源重疊到 滿足所有自訂需求系統會列出疊加的字串資源

字串資源 說明
google_lock_screen_sources_summary 疊加這個值來定義 含有 AndroidLockScreenSources 群組的所有來源 群組處於良好狀態 (資訊或未指定嚴重性) 層級)。根據預設,安全中心會顯示所有來源的標題 合併為群組摘要
google_biometrics_title 疊加這個值,定義生物特徵辨識來源的靜態標題 擁有的 com.android.settings 套件所擁有 動態資料是由來源提供。並覆蓋此物件 重疊顯示來自 com.android.settings 套件。根據預設,系統會忽略這個屬性 因為來源的初始顯示狀態 hidden
google_biometrics_summary 疊加這個值,定義生物特徵辨識的靜態摘要 使用 com.android.settings 套件擁有的來源 表示來源未提供任何動態資料。這個函式會忽略 因為來源的初始顯示狀態是 hidden
google_biometrics_search_terms 疊加這個值,定義生物特徵辨識的搜尋字詞清單 為 com.android.settings 套件擁有的來源。
google_biometrics_initial_display_state 疊加這個值,以顯示擁有的生物特徵辨識來源的 UI 項目 在沒有動態資料的情況下,com.android.settings 套件 由來源提供。預設值為 hidden
google_security_updates_intent 疊加這個值以變更開啟活動所需的意圖 可讓使用者查看及安裝安全性更新。這個 意圖動作必須與已匯出的活動建立關聯。 預設值為 android.settings.SYSTEM_UPDATE_SETTINGS

com.google.android.safetycenter.resources 套件中沒有其他字串 可重疊。

如果是 Android 開放原始碼計畫裝置,com.android.safetycenter.resources 中的所有資源 套件可重疊顯示,對內容沒有限制。

針對未設定接收 Mainline 更新的 GMS 裝置,請建立 正在取代或重疊 com.google.android.safetycenter.resources 套件 com.android.safetycenter.resources 用來定義 GTS 測試。

這些字串包括:

  • 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

自訂規定

檔案格式規定

設定檔必須是 XML 檔案,並採用 更新設定檔。這個檔案必須位於 raw 資料夾。必須符合「自訂安全中心」一節中所述的不變數 來源 自訂安全中心來源 群組。如果 未正確建立符合上述規定的設定檔 功能會完全停用CTS 和 GTS 也會剖析這個檔案 測試可提供額外資訊,以因應檔案格式不良的情況 ( 最高 logcat 裝置記錄)。

Google 服務裝置

在 GMS 裝置上,這個檔案設有某些限制。支援這項服務的 GTS 測試

Android 開放原始碼計畫裝置

在 Android 開放原始碼計畫裝置上,設定檔格式必須正確無誤,並通過 CTS 安全測試 中央。測試可驗證檔案格式是否正確。GMS 裝置也必須 通過這些測試