セーフティ センターを有効または無効にする
セーフティ センターを有効または無効にするには、frameworks/base/core/res/res/values/config.xml
ファイル内のオーバーレイ可能な config_enableSafetyCenter
ブール値フィールドを使用します。
スマートフォンやタブレットなどのほとんどのデバイスでは、セーフティ センターがデフォルトによってサポートされます。フォーム ファクタによっては、たとえば、自動、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/safety_center_config.xml
ではなく、res/raw-v34/safety_center_config.xml
ファイルをオーバーレイするようにしてください。これは前者が優先されるためです(これは res/values-v34/strings.xml
など、v34
をスコープとするほかのファイルにも適用されます)。オーバーレイ パッケージは最小 SDK が 34
未満である必要があります。そうでないと、最適化中に 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>
セーフティ センターのソースをカスタマイズする
セーフティ センターのソースタイプ
ソースは、セーフティ センターに提供するデータのタイプに基づいて、動的、issue-only、または静的となります。
動的ソース
安全性ソースが動的データをセーフティ センターにそのエントリおよび潜在的な警告カード用として提供できる場合は、そのソースを 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 ソース
関連付けられた設定エントリがなくても警告が提供される場合は、そのソースを 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
- 文字列型
- 動的および issue-only 安全性ソースに対して必須
- Android 13 では、静的安全性ソースに対しては禁止される。Android 14 では、暗黙ではなく明示的にソースの
intentAction
をターゲットとするようにこれを任意に設定できる(詳細については、インテントの解決の文書を参照)
- この安全性ソースが属しているパッケージの名前。例:
initialDisplayState
- 安全性ソースによってデータが提供されないときの UI エントリの表示形式
- 文字列として表される列挙型は、次のいずれかになっている必要がある。
enabled
(デフォルト、通常の表示)disabled
(グレー表示。クリックできない)hidden
(表示されない)
- 動的安全性ソースでは省略可(デフォルトは
enabled
) - issue-only および静的安全性ソースの場合は禁止
profile
- この安全性ソースがユーザーの管理対象プロファイルとやり取りするかどうか
- 文字列として表される列挙型は、次のいずれかになっている必要がある。
primary_profile_only
(プロファイルの親のみとやり取りする)all_profiles
(管理対象プロファイルとのやり取りもできる)
all_profiles
では、いくつかの UI エントリが生成される(プロファイルの親とそれぞれの管理対象プロファイルに対して 1 つずつ)。安全性ソースはプロファイルごとに異なるデータを提供できる- すべての安全性ソースに対して必須
searchTerms
- 設定アプリで検索を使用するときに、セーフティ センター エントリにマッピングされる検索キーワードのリスト
- 完全修飾されたリソース名として表されるリソース ID。例:
@package:string/my_search_terms
- 動的および静的安全性ソースでは省略可(デフォルトは検索キーワードなし)
- issue-only 安全性ソースの場合は禁止
title
- ソースによって動的にデータが提供されないときに使用される UI エントリのデフォルト タイトル
- 完全修飾されたリソース名として表されるリソース ID。例:
@package:string/my_title
- 動的および静的安全性ソースでは必須(
searchTerms
がないinitialDisplayState="hidden"
の場合を除く) - issue-only 安全性ソースの場合は禁止
titleForWork
- ソースによって動的にデータが提供されないときに使用される管理対象プロファイルの UI エントリのデフォルト タイトル
- 完全修飾されたリソース名として表されるリソース ID。例:
@package:string/my_title_for_work
profile="all_profiles"
を指定した動的および静的安全性ソースでは必須(searchTerms
がないinitialDisplayState="hidden"
の場合を除く)- issue-only 安全性ソースまたは
profile="primary_profile_only"
があるソースの場合は禁止
summary
- ソースによってデータが動的に提供されないときに使用される、UI エントリのデフォルト サマリー(これはタイトルの下に表示される長めのテキストによる説明)
- 完全修飾されたリソース名として表されるリソース ID。例:
@package:string/my_summary
- 静的安全性ソースでは省略可(デフォルトはサマリーなし)
- 動的安全性ソースでは必須(
initialDisplayState
がhidden
である場合を除く) - issue-only 安全性ソースの場合は禁止
intentAction
- UI エントリをクリックしたときにトリガーされるアクション
- 文字列型。たとえば、
com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS
または完全修飾されたリソース名として表されるリソース ID、@package:string/my_intent_action
など - このインテントのアクションがある特定の
packageName
(存在する場合)に対して解決されない場合、UI エントリはinitialDisplayState="disabled"
が存在する場合と同じように動作 - 静的安全性ソースおよび
initialDisplayState="enabled"
があるdynamic
安全性ソースでは必須 - issue-only 安全性ソースの場合は禁止
maxSeverityLevel
- このセーフティ センター ソースが提供できる最大重大度レベル
- 文字列として表される整数。例:
300
- 動的および issue-only 安全性ソースの場合は省略可(デフォルトは最大値なし)
- 静的安全性ソースでは禁止
loggingAllowed
- セーフティ センターが、このソースに関連する操作またはデータをログに記録できるかどうか
- 文字列として表されるブール値。例:
false
- 動的および issue-only 安全性ソースの場合は省略可(デフォルトは
true
) - 静的安全性ソースでは禁止
refreshOnPageOpenAllowed
- セーフティ センター画面を開いたときに、データを更新するためにシグナルを安全性ソースに送信するかどうか
- 文字列として表されるブール値。例:
true
- 動的および issue-only 安全性ソースの場合は省略可(デフォルトは
false
) - 静的安全性ソースでは禁止
notificationsAllowed
(Android 14 以降)- 問題を報告するときに、安全性ソースで任意に通知を提供できるかどうか
- 文字列として表されるブール値。例:
true
- 動的および issue-only 安全性ソースの場合は省略可(デフォルトは
false
) - 静的安全性ソースでは禁止
deduplicationGroup
(Android 14 以降)- 異なるソースからの問題を重複除去するために使用できる潜在的な一意の識別子。同じ重複除去グループ内のソースでは、オプションの重複除去 ID を使用して問題を送信できる。同じ重複除去 ID を持つ問題は、複数のソースから送信されている場合でも、UI に 1 回のみ表示される
- 文字列型
- 動的および issue-only 安全性ソースの場合は省略可(デフォルトは重複除去なし)
- 静的安全性ソースでは禁止
packageCertificateHashes
(Android 14 以降)- ある特定の
packageName
に対する、証明書ハッシュのカンマ区切りリスト。設定されている場合は、セキュリティの目的で安全性ソースとやり取りするときに、証明書チェックがある特定のpackageCertificateHashes
に対して実行される(ある特定のpackageName
に応じて) - 文字列型
- 動的および issue-only 安全性ソースの場合は省略可(デフォルトは証明書チェックなし)
- 静的安全性ソースでは禁止
- ある特定の
セーフティ センターのソースグループをカスタマイズする
セーフティ センターのソースは、セーフティ センターのソースグループに含まれている必要があります。 それぞれのソースグループは、ファイル内にソースグループがリストされる順序で、UI に表示されます。それぞれのソースは、ファイル内にソースがリストされる順序で、グループ内に表示されます。グループに 1 つの安全性ソースが含まれている場合は、そのソースが、グループではなく 1 つのエントリとして表示されます。
セーフティ センターのソースグループ構成
セーフティ センターのソースグループをカスタマイズするには、次の変数を使用します。
id
- 安全性ソースグループの一意の識別子。ファイル全体で一意である必要があります。
- 文字列型
- 必須
title
- UI 内のグループのタイトル
- 完全修飾されたリソース名として表されるリソース ID。例:
@package:string/my_title
- グループ内に 1 つ以上の動的または静的安全性ソースが存在する場合(つまり、グループが
type="hidden"
の状態ではない)は必須
summary
- タイトルの下に表示される、UI 内のグループの短い説明。 通常の場合、データが提供されないときは特定の条件の下で表示される。それ以外の場合は、グループ内のソースによって提供されるデータに基づいてサマリーが計算される
- 完全修飾されたリソース名として表されるリソース ID。例:
@package:string/my_summary
- 省略可(デフォルトはサマリーなし)
statelessIconType
- 安全性ソースによって状態が提供されないときにグループ用に表示されるアイコンタイプ。例: 静的エントリ
- 文字列として表される列挙型は、
none
またはprivacy
になっている必要があります(プライバシー アイコン タイプ) - 省略可(デフォルトは
none
)
type
(Android 14 以降)- このグループがセーフティ センターとどのようにやり取りするかを示す明示的なタイプ
- 文字列として表される列挙型は、次のいずれかになっている必要がある。
stateful
(表示され、全体的なセーフティ センターのステータスに影響する)stateless
(表示され、全体的なセーフティ センターのステータスに影響しない)hidden
(表示されない。すべてのソースは issue-only である必要がある)
- 省略可。デフォルトにより、グループと
summary
およびstatelessIconType
に含まれている安全性ソースを使用して推測される。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 では、そのようなグループは UI 内の閉じることが可能なエントリとして表示されます。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 に表示されます。
隠しグループ
隠しグループには issue-only 安全性ソースのみが含まれ、タイトルはありません。 隠しグループは次のように 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>
この例で、ソースは緑色の警告カードのみをプッシュして、未指定のステータスを提供できます。他のデータを提供できるようにするには、ソースがステートフル グループ内に存在している必要があります。
文字列をカスタマイズしてフィールドをオーバーレイする
メインライン アップデートを受信するように設定されていない GMS デバイスの場合は、構成ファイル全体をオーバーレイするのではなく、すべてのカスタマイズ ニーズを満たすよう、6 つの文字列リソースをオーバーレイできます。オーバーレイする文字列リソースが、表にリストされています。
文字列リソース | 説明 |
---|---|
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 デバイスの場合は、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 テストによってサポートされます。
AOSP デバイス
AOSP デバイスでは、構成ファイルの形式が整っている必要があります。また、セーフティ センターの CTS テストに合格しなければなりません。このテストではファイルの形式が整っていることを検証します。GMS デバイスもこれらのテストに合格しなければなりません。