안전 센터 맞춤설정

안전 센터 사용 설정 또는 사용 중지

안전 센터를 사용 설정하거나 사용 중지하려면 frameworks/base/core/res/res/values/config.xml 파일에서 오버레이 가능한 config_enableSafetyCenter 불리언 필드를 사용하세요.

휴대전화, 태블릿 등 대부분의 기기에서는 안전 센터가 기본적으로 지원됩니다. 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_enableSafetyCentertrue로 설정하세요. 안전 센터를 지원하지 않으려면 이 값을 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/safety_center_config.xml이 아닌 res/raw-v34/safety_center_config.xml 파일이 오버레이되어야 합니다. 이 파일이 우선권을 갖기 때문입니다. 이는 res/values-v34/strings.xml과 같이 v34를 범위로 하는 다른 파일에도 적용됩니다. 오버레이 패키지는 34보다 작은 최소 SDK를 가져야 하며, 그렇지 않으면 최적화 과정에서 v34 한정자가 제거됩니다. 그리고 정적 오버레이를 사용하세요. 이 값은 부팅 시간에 로드되기 때문입니다.

Android 오픈소스 프로젝트(AOSP) 기기의 경우 com.android.safetycenter.resources 패키지를 타겟팅하세요. 타겟팅할 오버레이 구성은 없습니다. 모든 리소스는 콘텐츠에 관한 제한 없이 오버레이 가능합니다.

메인라인 업데이트를 수신하도록 구성된 GMS 기기의 경우 com.google.android.safetycenter.resources 패키지를 타겟팅하세요. SafetyCenterConfig 구성을 타겟팅합니다. 이 구성에서는 오버레이 패키지가 product, system 또는 vendor 파티션에 있어야 합니다. GMS OEM은 Google 제공 safety_center_config.xml 파일을 복사하고 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>

메인라인 업데이트를 수신하도록 구성되지 않은 GMS 기기의 경우 com.android.safetycenter.resources 패키지를 타겟팅하세요. 타겟팅할 오버레이 구성은 없습니다. 오버레이 패키지는 패키지 이름 com.google.android.safetycenter.resources를 사용해야 합니다.

GMS OEM은 Google 제공 safety_center_config.xml 파일을 복사하고 GTS 테스트에서 허용하는 파일로 수정을 제한해야 합니다. GMS OEM은 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 구성 파일

AOSP 구성 파일은 다음 위치에 있습니다. 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
    • 안전 소스의 고유 식별자. 전체 파일에서 고유해야 하며 알파벳 문자(a~z, A~Z)로만 구성되어야 하고 대소문자를 구분합니다.
    • 문자열 유형
    • 모든 안전 소스 유형에 필수
  • packageName
    • 이 안전 소스를 소유하는 패키지 이름(예: com.google.android.permissioncontroller)
    • 문자열 유형
    • 동적 및 문제 전용 안전 소스에 필수
    • Android 13의 정적 안전 소스에 금지됨. Android 14에서는 소스의 intentAction을 암시적이 아닌 명시적으로 타겟팅하도록 선택적으로 설정할 수 있습니다(자세한 내용은 인텐트 확인 문서를 참고하세요).
  • initialDisplayState
    • 안전 소스에서 데이터가 제공되지 않을 때 UI 항목이 표시되는 방식
    • 문자열로 표시되는 enum 유형. 다음 중 하나여야 합니다.
      • enabled(기본값, 일반적으로 표시)
      • disabled(비활성화됨으로 표시, 클릭할 수 없음)
      • hidden(표시되지 않음)
    • 동적 안전 소스에 선택사항(기본값 enabled)
    • 문제 전용 및 정적 안전 소스에 금지됨
  • profile
    • 이 안전 소스가 사용자의 관리 프로필과 상호작용하는지 여부
    • 문자열로 표시되는 enum 유형. 다음 중 하나여야 합니다.
      • primary_profile_only(프로필 상위 요소와만 상호작용)
      • all_profiles(관리 프로필과도 상호작용할 수 있음)
    • all_profiles에서 여러 UI 항목이 생성됩니다(하나는 프로필 상위 요소용, 하나는 각 관리 프로필용). 안전 소스는 각 프로필의 다양한 데이터를 제공할 수 있습니다.
    • 모든 안전 소스에 필수
  • searchTerms
    • 설정 앱에서 검색을 사용할 때 안전 센터 항목에 매핑되는 검색어 목록
    • 정규화된 리소스 이름으로 표시되는 리소스 ID(예: @package:string/my_search_terms)
    • 동적 및 정적 안전 소스에 선택사항(기본값은 no 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)
    • 정적 안전 소스에 선택사항(기본값은 no summary)
    • 동적 안전 소스에 필수(initialDisplayStatehidden이면 예외)
    • 문제 전용 안전 소스에 금지됨
  • intentAction
    • UI 항목을 클릭할 때 트리거할 작업
    • 문자열 유형(예: com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS) 또는 정규화된 리소스 이름으로 표시되는 리소스 ID(예: @package:string/my_intent_action)
    • 이 인텐트 작업이 지정된 packageName(있는 경우)에 관해 해결되지 않으면 UI 항목이 initialDisplayState="disabled"가 있는 것과 동일한 방식으로 동작합니다.
    • 정적 안전 소스 및 initialDisplayState="enabled"가 있는 dynamic 안전 소스에 필수
    • 문제 전용 안전 소스에 금지됨
  • maxSeverityLevel
    • 이 안전 센터 소스에서 제공할 수 있는 최대 심각도 수준
    • 문자열로 표시되는 정수(예: 300)
    • 동적 및 문제 전용 안전 소스에 선택사항(기본값은 no maximum)
    • 정적 안전 소스에 금지됨
  • loggingAllowed
    • 안전 센터에서 이 소스와 관련된 상호작용이나 데이터를 기록할 수 있는지 여부
    • 문자열로 표시된 부울(예: false)
    • 동적 및 문제 전용 안전 소스에 선택사항(기본값 true)
    • 정적 안전 소스에 금지됨
  • refreshOnPageOpenAllowed
    • 안전 센터 화면이 열릴 때 데이터를 새로고침하기 위해 안전 소스에 신호를 보내야 하는지 여부
    • 문자열로 표시된 부울(예: true)
    • 동적 및 문제 전용 안전 소스에 선택사항(기본값 false)
    • 정적 안전 소스에 금지됨
  • notificationsAllowed(Android 14부터)
    • 안전 소스가 문제를 신고할 때 선택적으로 알림을 제공할 수 있는지 여부
    • 문자열로 표시된 부울(예: true)
    • 동적 및 문제 전용 안전 소스에 선택사항(기본값 false)
    • 정적 안전 소스에 금지됨
  • deduplicationGroup(Android 14부터)
    • 다른 소스에서 발생하는 문제의 중복 삭제에 사용할 수 있는 잠재적인 고유 식별자. 동일한 중복 삭제 그룹 내 소스는 선택적 중복 삭제 ID와 함께 문제를 전송할 수 있습니다. 중복 삭제 ID가 동일한 문제는 여러 소스에서 전송되더라도 UI에 한 번만 표시됩니다.
    • 문자열 유형
    • 동적 및 문제 전용 안전 소스에 선택사항(기본값은 no deduplication)
    • 정적 안전 소스에 금지됨
  • packageCertificateHashes(Android 14부터)
    • 지정된 packageName의 쉼표로 구분된 인증서 해시 목록. 설정되면 보안 목적으로 안전 소스와 상호작용할 때 특정 packageName의 지정된 packageCertificateHashes를 대상으로 인증서 검사가 실행됩니다
    • 문자열 유형
    • 동적 및 문제 전용 안전 소스에 선택사항(기본값은 no certificate checks)
    • 정적 안전 소스에 금지됨

안전 센터 소스 그룹 맞춤설정

안전 센터 소스는 안전 센터 소스 그룹 내에 포함되어야 합니다. 각 소스 그룹은 소스 그룹이 파일에 나열되는 순서대로 UI에 표시됩니다. 각 소스는 소스가 파일에 나열되는 순서대로 그룹 내에 표시됩니다. 그룹에 단일 안전 소스가 포함된 경우 그룹이 아닌 단일 항목으로 표시됩니다.

안전 센터 소스 그룹 구성

다음 변수를 사용하여 안전 센터 소스 그룹을 맞춤설정하세요.

  • id
    • 안전 소스 그룹의 고유 식별자. 전체 파일에서 고유해야 합니다.
    • 문자열 유형
    • 필수
  • title
    • UI의 그룹 제목
    • 정규화된 리소스 이름으로 표시되는 리소스 ID(예: @package:string/my_title)
    • 그룹 내에 동적 또는 정적 안전 소스가 하나 이상 있는 경우 필수(즉, 그룹이 type="hidden"이 아님)
  • summary
    • UI의 그룹에 관한 간략한 설명. 제목 아래 표시됩니다. 특정 조건, 일반적으로 데이터가 제공되지 않을 때 표시됩니다. 그 외의 경우에는 요약이 그룹 내 소스에서 제공된 데이터에 기반하여 계산됩니다.
    • 정규화된 리소스 이름으로 표시되는 리소스 ID(예: @package:string/my_summary)
    • 선택사항(기본값은 no summary)
  • statelessIconType
    • 정적 항목과 같이 안전 소스에서 상태가 제공되지 않을 때 그룹에 관해 표시되는 아이콘 유형
    • none 또는 privacy(개인 정보 보호 아이콘 유형)여야 하는 문자열로 표시되는 enum 유형
    • 선택사항(기본값 none)
  • type(Android 14부터)
    • 이 그룹이 안전 센터와 상호작용하는 방식을 한정하는 명시적 유형
    • 문자열로 표시되는 enum 유형. 다음 중 하나여야 합니다.
      • stateful(표시됨, 전체 안전 센터 상태에 기여함)
      • stateless(표시됨, 전체 안전 센터 상태에 기여하지 않음)
      • hidden(표시되지 않음, 모든 소스는 문제 전용이어야 함)
    • 선택사항. summarystatelessIconType뿐만 아니라 그룹에 포함된 안전 소스를 사용하여 기본적으로 추론됩니다. type이 지정되면 일부 추가 불변 항목이 적용되어 그룹에서 발생된 소스와 일치하는지 확인합니다(예: 사용자에게 표시되는 항목이 포함된 경우 그룹은 hidden일 수 없음).

안전 센터 소스 그룹 유형

안전 센터 소스 그룹은 특정 필드의 상태에 따라 스테이트풀(Stateful), 스테이트리스(Stateless) 또는 숨김으로 분류됩니다.

스테이트풀(Stateful) 그룹

제목과 요약이 모두 있거나 stateLessIconType="privacy"인 그룹은 스테이트풀(Stateful)로 간주되며 전체 안전 센터 상태에 기여합니다.

<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에서는 이러한 그룹이 UI에서 접을 수 있는 항목으로 표시됩니다. Android 14에서는 하위 페이지로 리디렉션되는 자체 상태가 있는 항목으로 표시됩니다.

스테이트리스(Stateless) 그룹

제목은 있지만 요약이 없고 stateLessIconType="none"인 그룹은 스테이트리스(Stateless)로 간주되며 전체 안전 센터 상태에 기여하지 않습니다.

<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에서 엄격한 항목 목록으로 표시됩니다.

숨김 그룹

숨김 그룹에는 문제 전용 안전 소스만 포함되어 있으며 제목이 없습니다. 숨김 그룹은 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>

정적 항목의 동적 데이터

동적 안전 센터 소스를 정적 항목으로 표시하면 일부 조건에 따라 리디렉션 항목을 푸시할 수 있고 런타임에 콘텐츠를 맞춤설정할 수 있습니다. 스테이트리스(Stateless) 그룹 내에서 동적 소스를 정의하세요(예: 업무 정책 정보 항목에 따라).

다음 예는 스테이트리스(Stateless) 그룹에 있어서 안전 신호를 제공하지 않는 동적 안전 소스를 보여줍니다.

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

이 예에서 소스는 녹색 경고 카드만 푸시하고 지정되지 않은 상태를 제공할 수 있습니다. 기타 데이터를 제공하려면 소스가 스테이트풀(Stateful) 그룹 내에 있어야 합니다.

문자열 및 오버레이 필드 맞춤설정

메인라인 업데이트를 수신하도록 구성되지 않은 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 이 값을 오버레이하여 소스에서 동적 데이터를 제공하지 않을 때 com.android.settings 패키지가 소유한 생체 인식 소스의 UI 항목을 표시합니다. 기본값은 hidden입니다.
google_security_updates_intent 이 값을 오버레이하여 사용자가 보안 업데이트를 확인하고 설치할 수 있는 활동을 여는 데 필요한 인텐트를 변경합니다. 이 인텐트 작업은 내보낸 활동과 연결해야 합니다. 기본값은 android.settings.SYSTEM_UPDATE_SETTINGS입니다.

com.google.android.safetycenter.resources 패키지에서 오버레이 가능한 다른 문자열은 없습니다.

AOSP 기기의 경우 com.android.safetycenter.resources 패키지의 모든 리소스가 콘텐츠에 관한 제한 없이 오버레이 가능합니다.

메인라인 업데이트를 수신하도록 구성되지 않은 GMS 기기의 경우 GTS 테스트에서 예상되는 모든 문자열을 정의하는 com.android.safetycenter.resources를 대체하거나 오버레이하는 com.google.android.safetycenter.resources 패키지를 만듭니다.

이러한 문자열은 다음과 같습니다.

  • 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 테스트에서 지원됩니다.

AOSP 기기

AOSP 기기에서는 구성 파일이 올바른 형식이어야 하며 안전 센터의 CTS 테스트를 통과해야 합니다. 테스트에서는 파일의 형식이 올바른지 확인합니다. GMS 기기도 이러한 테스트를 통과해야 합니다.