自訂安全中心

啟用或停用安全中心

如要啟用或停用安全中心,請使用 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 裝置也必須 通過這些測試