تخصيص مركز الأمان

تمكين أو تعطيل مركز الأمان

لتمكين مركز الأمان أو تعطيله، استخدم الحقل المنطقي config_enableSafetyCenter القابل للتراكب في ملف frameworks/base/core/res/res/values/config.xml .

في معظم الأجهزة، يتم دعم مركز الأمان افتراضيًا، على سبيل المثال، على الهواتف والأجهزة اللوحية. في بعض عوامل الشكل، يتم تعطيل مركز الأمان افتراضيًا، على سبيل المثال، في 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) بصمت أو يتم إرجاع قيمة افتراضية. يتم أيضًا عرض مربع الإعدادات السريعة وإدخال الإعدادات أو إخفاؤهما اعتمادًا على ما إذا كان مركز الأمان ممكّنًا أم لا.

علامة تكوين الجهاز

بالإضافة إلى تمكين مركز الأمان باستخدام تكوين 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 ، راجع تغيير قيمة موارد التطبيق في وقت التشغيل للحصول على معلومات حول تعديل تراكبات موارد وقت التشغيل (RROs).

في 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 Open Source Project (AOSP)، استهدف الحزمة com.android.safetycenter.resources . لا يوجد تكوين تراكب لاستهدافه. جميع الموارد قابلة للتراكب دون أي قيود على المحتوى.

بالنسبة لأجهزة GMS التي تم تكوينها لتلقي تحديثات Mainline، استهدف الحزمة com.google.android.safetycenter.resources . استهدف التكوين SafetyCenterConfig . يتطلب هذا التكوين أن تكون حزمة التراكب موجودة في قسم product أو system أو vendor . يجب على مصنعي المعدات الأصلية في GMS نسخ ملف safety_center_config.xml المقدم من Google وقصر التعديلات على تلك التي تسمح بها اختبارات 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 التي لم يتم تكوينها لتلقي تحديثات Mainline، استهدف الحزمة com.android.safetycenter.resources . لا يوجد تكوين تراكب لاستهدافه. يجب أن تستخدم حزمة التراكب اسم الحزمة com.google.android.safetycenter.resources .

يجب على مصنعي المعدات الأصلية في GMS نسخ ملف safety_center_config.xml المقدم من Google وقصر التعديلات على تلك التي تسمح بها اختبارات GTS. يجب على مصنعي المعدات الأصلية لـ GMS أيضًا تعريف السلاسل المستخدمة في تكوين XML.

هيكل الملف

على مستوى عالٍ، يكون الملف safety_center_config.xml عبارة عن قائمة بمصادر الأمان. يتم تنظيم مصادر الأمان هذه في مجموعات لإدارة الإشارات الموجودة على شاشة مركز الأمان، على سبيل المثال، App Security أو Screen Lock. يحدد ترتيب هذه القائمة ترتيب العرض:

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

ملف تكوين جوجل

يوجد ملف تكوين 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
    • المعرف الفريد لمصدر الأمان، يجب أن يكون فريدًا في الملف بأكمله ويجب أن يتكون من أحرف أبجدية فقط (az، AZ) ويكون حساسًا لحالة الأحرف
    • نوع السلسلة
    • مطلوب لجميع أنواع مصادر السلامة
  • packageName
    • اسم الحزمة التي تمتلك مصدر الأمان هذا، على سبيل المثال، com.google.android.permissioncontroller
    • نوع السلسلة
    • مطلوب لمصادر الأمان الديناميكية والمتعلقة بالمشكلة فقط
    • محظور بالنسبة لمصادر الأمان الثابتة في Android 13؛ في Android 14، يمكن ضبط هذا بشكل اختياري لاستهداف intentAction من المصدر بشكل صريح وليس ضمنيًا (راجع وثائق تحليل النية لمزيد من التفاصيل).
  • initialDisplayState
    • كيفية عرض إدخال واجهة المستخدم عندما لا يتم توفير أي بيانات من قبل مصدر الأمان
    • يجب أن يكون نوع التعداد الذي يتم تمثيله كسلسلة واحدًا مما يلي:
      • enabled (افتراضي، يعرض بشكل طبيعي)
      • disabled (يظهر باللون الرمادي، ولا يمكن النقر عليه)
      • hidden (لا يظهر)
    • اختياري لمصادر الأمان الديناميكية (يتم enabled الافتراضي)
    • محظور بالنسبة لمصادر الأمان المخصصة للإصدار فقط والثابتة
  • profile
    • ما إذا كان مصدر الأمان هذا يتفاعل مع الملف الشخصي المُدار للمستخدم
    • يجب أن يكون نوع التعداد الذي يتم تمثيله كسلسلة واحدًا مما يلي:
      • primary_profile_only (يتفاعل فقط مع أصل الملف الشخصي فقط)
      • all_profiles (يمكن أيضًا التفاعل مع الملفات الشخصية المُدارة))
    • في all_profiles ، يتم إنشاء العديد من إدخالات واجهة المستخدم (واحد لأصل الملف الشخصي، وواحد لكل ملف تعريف مُدار)؛ يمكن لمصدر الأمان توفير بيانات مختلفة لكل ملف تعريف
    • مطلوب لجميع مصادر السلامة
  • searchTerms
    • قائمة مصطلحات البحث المرتبطة بإدخال مركز الأمان عند استخدام البحث في تطبيق الإعدادات
    • يتم تمثيل معرف المورد كاسم مورد مؤهل بالكامل، على سبيل المثال، @package:string/my_search_terms
    • اختياري لمصادر الأمان الديناميكية والثابتة (الافتراضي هو عدم وجود مصطلحات بحث)
    • محظور لمصادر السلامة الخاصة بالإصدار فقط
  • title
    • العنوان الافتراضي لإدخال واجهة المستخدم، يُستخدم عندما لا يتم توفير أي بيانات ديناميكيًا بواسطة المصدر
    • يتم تمثيل معرف المورد كاسم مورد مؤهل بالكامل، على سبيل المثال، @package:string/my_title
    • مطلوب لمصادر الأمان الديناميكية والثابتة (ما لم يكن initialDisplayState="hidden" مع عدم وجود searchTerms )
    • محظور لمصادر السلامة الخاصة بالإصدار فقط
  • titleForWork
    • العنوان الافتراضي لإدخال واجهة المستخدم لملف التعريف المُدار الذي يتم استخدامه عندما لا يتم توفير البيانات ديناميكيًا بواسطة المصدر
    • يتم تمثيل معرف المورد كاسم مورد مؤهل بالكامل، على سبيل المثال، @package:string/my_title_for_work
    • مطلوب لمصادر الأمان الديناميكية والثابتة التي حددت profile="all_profiles" (ما لم يكن initialDisplayState="hidden" مع عدم وجود searchTerms )
    • محظور بالنسبة لمصادر الأمان الخاصة بالمشكلة فقط أو المصادر ذات profile="primary_profile_only"
  • summary
    • الملخص الافتراضي لإدخال واجهة المستخدم (هذا وصف نصي أطول معروض أسفل العنوان)، يُستخدم عندما لا يتم توفير البيانات ديناميكيًا بواسطة المصدر
    • يتم تمثيل معرف المورد كاسم مورد مؤهل بالكامل، على سبيل المثال، @package:string/my_summary
    • اختياري لمصادر الأمان الثابتة (الافتراضي ليس ملخصًا)
    • مطلوب لمصادر الأمان الديناميكية (ما لم يتم hidden initialDisplayState )
    • محظور لمصادر السلامة الخاصة بالإصدار فقط
  • intentAction
    • الإجراء الذي يتم تشغيله عند النقر فوق إدخال واجهة المستخدم
    • نوع السلسلة، على سبيل المثال، com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS ، أو معرف المورد الذي يتم تمثيله كاسم مورد مؤهل بالكامل، على سبيل المثال، @package:string/my_intent_action
    • إذا لم يتم حل إجراء الهدف هذا بالنسبة لاسم packageName المحدد (إن وجد)، فسيتصرف إدخال واجهة المستخدم بنفس الطريقة التي يتصرف بها initialDisplayState="disabled"
    • مطلوب لمصادر الأمان الثابتة ومصادر الأمان dynamic التي تحتوي على initialDisplayState="enabled"
    • محظور لمصادر السلامة الخاصة بالإصدار فقط
  • maxSeverityLevel
    • أقصى مستوى خطورة يمكن أن يوفره مصدر مركز الأمان هذا
    • عدد صحيح ممثل كسلسلة، على سبيل المثال، 300
    • اختياري لمصادر الأمان الديناميكية والمتعلقة بالمشكلة فقط (الافتراضي ليس الحد الأقصى)
    • محظور لمصادر السلامة الثابتة
  • loggingAllowed
    • ما إذا كان بإمكان مركز الأمان تسجيل التفاعلات أو البيانات المتعلقة بهذا المصدر
    • يتم تمثيل القيمة المنطقية كسلسلة، على سبيل المثال false
    • اختياري لمصادر الأمان الديناميكية والمتعلقة بالمشكلة فقط (الافتراضي true )
    • محظور لمصادر السلامة الثابتة
  • refreshOnPageOpenAllowed
    • ما إذا كان يجب إرسال إشارة إلى مصدر الأمان لتحديث بياناته عند فتح شاشة مركز الأمان
    • يتم تمثيل القيمة المنطقية كسلسلة، على سبيل المثال، true
    • اختياري لمصادر الأمان الديناميكية والمتعلقة بالمشكلة فقط (الافتراضي false )
    • محظور لمصادر السلامة الثابتة
  • notificationsAllowed (بدءًا من Android 14)
    • ما إذا كان بإمكان مصدر الأمان تقديم إشعار بشكل اختياري عند الإبلاغ عن مشكلة
    • يتم تمثيل القيمة المنطقية كسلسلة، على سبيل المثال، true
    • اختياري لمصادر الأمان الديناميكية والمتعلقة بالمشكلة فقط (الافتراضي false )
    • محظور لمصادر السلامة الثابتة
  • deduplicationGroup (بدءًا من Android 14)
    • معرف فريد محتمل يمكن استخدامه لإلغاء تكرار المشكلات الواردة من مصادر مختلفة. يمكن للمصادر الموجودة في نفس مجموعة إلغاء البيانات المكررة إرسال المشكلات باستخدام معرف إلغاء البيانات المكررة الاختياري. سيتم عرض المشكلات المتعلقة بمعرف إلغاء البيانات المكررة نفسه مرة واحدة فقط في واجهة المستخدم، حتى لو كانت مصادر متعددة ترسلها.
    • نوع السلسلة
    • اختياري لمصادر الأمان الديناميكية والمتعلقة بالمشكلة فقط (الافتراضي هو عدم إلغاء البيانات المكررة)
    • محظور لمصادر السلامة الثابتة
  • packageCertificateHashes (بدءًا من Android 14)
    • قائمة مفصولة بفواصل لتجزئات الشهادة الخاصة بـ packageName . إذا تم تعيين هذا، فسيتم إجراء فحص الشهادة مقابل الحزمة المحددة لـ packageCertificateHashes لاسم packageName المحدد عند التفاعل مع مصدر الأمان، لأغراض أمنية.
    • نوع السلسلة
    • اختيارية لمصادر الأمان الديناميكية والمتعلقة بالمشكلة فقط (الافتراضي هو عدم وجود عمليات فحص للشهادات)
    • محظور لمصادر السلامة الثابتة

تخصيص مجموعات مصادر مركز الأمان

يجب تضمين مصادر مركز الأمان ضمن مجموعة مصادر مركز الأمان. يتم عرض كل مجموعة مصدر في واجهة المستخدم بالترتيب الذي يتم به إدراج مجموعات المصدر في الملف. يتم عرض كل مصدر داخل المجموعة بالترتيب الذي يتم به إدراج المصادر في الملف. إذا كانت المجموعة تحتوي على مصدر أمان واحد، فسيتم عرضه كإدخال واحد بدلاً من مجموعة.

تكوين مجموعة مصادر مركز الأمان

استخدم المتغيرات التالية لتخصيص مجموعات مصادر مركز الأمان:

  • id
    • المعرف الفريد لمجموعة مصادر السلامة؛ يجب أن تكون فريدة في الملف بأكمله
    • نوع السلسلة
    • مطلوب
  • title
    • عنوان المجموعة في واجهة المستخدم
    • يتم تمثيل معرف المورد كاسم مورد مؤهل بالكامل، على سبيل المثال، @package:string/my_title
    • مطلوب إذا كان هناك مصدر أمان ديناميكي أو ثابت واحد على الأقل داخل المجموعة (أي أن المجموعة ليست من type="hidden" )
  • summary
    • وصف موجز للمجموعة في واجهة المستخدم، معروض أسفل العنوان. يتم عرضه في ظل ظروف محددة، عادةً عندما لا يتم توفير البيانات؛ وبخلاف ذلك، يتم حساب الملخص بناءً على البيانات المقدمة من المصادر داخل المجموعة.
    • يتم تمثيل معرف المورد كاسم مورد مؤهل بالكامل، على سبيل المثال، @package:string/my_summary
    • اختياري (الافتراضي ليس ملخصًا)
  • statelessIconType
    • يتم عرض نوع الرمز للمجموعة عندما لا يتم توفير أي حالة بواسطة مصادر الأمان، على سبيل المثال، الإدخالات الثابتة
    • يتم تمثيل نوع التعداد كسلسلة يجب أن تكون إما none أو privacy (نوع رمز الخصوصية)
    • اختياري (الافتراضي هو none )
  • type (بدءًا من Android 14)
    • نوع صريح لتأهيل كيفية تفاعل هذه المجموعة مع مركز الأمان
    • يجب أن يكون نوع التعداد الذي يتم تمثيله كسلسلة واحدًا مما يلي:
      • stateful (يعرض ويساهم في الحالة العامة لمركز الأمان)
      • stateless (يعرض ولا يساهم في الحالة العامة لمركز الأمان)
      • hidden (لا يتم عرضه، يجب أن تكون جميع المصادر خاصة بالإصدار فقط)
    • اختياري، يتم استنتاجه افتراضيًا باستخدام مصادر الأمان الموجودة في المجموعة بالإضافة إلى 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، ستظهر هذه المجموعة كإدخال قابل للطي في واجهة المستخدم. في 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>

ستظهر هذه المجموعة كقائمة صارمة من الإدخالات في واجهة المستخدم.

المجموعة المخفية

تحتوي المجموعة المخفية على مصادر الأمان الخاصة بالمشكلة فقط ولا تحتوي على عنوان. لا تظهر المجموعات المخفية في واجهة المستخدم:

<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 التي لم يتم تكوينها لتلقي تحديثات الخط الرئيسي، فبدلاً من تراكب ملف التكوين بالكامل، يمكنك تراكب ستة موارد سلسلة لتلبية جميع احتياجات التخصيص. يتم سرد موارد السلسلة المتراكبة في الجدول.

مورد السلسلة وصف
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 عندما لا يوفر المصدر أي بيانات ديناميكية. القيمة الافتراضية hidden .
google_security_updates_intent قم بتراكب هذه القيمة لتغيير الهدف المطلوب لفتح النشاط الذي يسمح للمستخدم بالتحقق من التحديثات الأمنية وتثبيتها. يجب أن يرتبط إجراء النية هذا بنشاط تم تصديره. القيمة الافتراضية هي android.settings.SYSTEM_UPDATE_SETTINGS .

لا توجد سلاسل أخرى في حزمة com.google.android.safetycenter.resources قابلة للتراكب.

بالنسبة لأجهزة AOSP، تكون جميع الموارد الموجودة في حزمة com.android.safetycenter.resources قابلة للتراكب دون أي قيود على المحتوى.

بالنسبة لأجهزة GMS التي لم يتم تكوينها لتلقي تحديثات Mainline، قم بإنشاء حزمة 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 ).

أجهزة خدمات جوجل

على أجهزة GMS، يتم فرض بعض القيود على هذا الملف. ويدعم ذلك اختبارات GTS .

أجهزة AOSP

على أجهزة AOSP، يجب أن يكون ملف التكوين مُشكلًا بشكل جيد وأن يجتاز اختبارات CTS لمركز الأمان. تتحقق الاختبارات من أن الملف تم تشكيله بشكل جيد. ويجب على أجهزة GMS أيضًا اجتياز هذه الاختبارات.