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

تفعيل "مركز الأمان" أو إيقافه

لتفعيل "مركز الأمان" أو إيقافه، استخدِم السمة القابلة للتراكب الحقل المنطقي 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 لإيقافه.

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

علامة DeviceConfig

بالإضافة إلى تفعيل ميزة "مركز الأمان" باستخدام config_enableSafetyCenter تهيئة، DeviceConfig تُستخدم العلامة (safety_center_is_enabled) لتفعيل ميزة "الأمن الشخصي" أو إيقافها عن بُعد الوسط.

في نظام التشغيل Android 14 والإصدارات الأحدث، ليس عليك اتّخاذ أي إجراء آخر. لأنّ هذه العلامة هي true تلقائيًا.

في نظام Android 13، يكون "مركز الأمان" غير مفعَّل تلقائيًا جهة الخادم وتفعيلها من خلال القائمة المسموح بها باستخدام هذه العلامة إرسال بيانات جهازك بصمات الأصابع والتواصل مع مدير الحسابات التقنية لإضافتك إلى القائمة المسموح بها لاحظ أن يجب إضافة الإصدار 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" (AOSP) com.android.safetycenter.resources ليس هناك أي تهيئة متراكبة الهدف. يمكن تراكب جميع الموارد بدون أي قيود على المحتوى.

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

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

بنية الملف

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

<safety-center-config> <!-- Wrapper for the Safety Center configuration -->
    <safety-sources-config>< !-- Wrapper for the safety sources groups -->
        <safety-sources-group> <!-- Contains information about a safety sources group -->
            <dynamic-safety-source /> <!-- Contains information about a safety source -->
            <!-- More safety sources in the group -->
        </safety-sources-group> <!-- More safety sources groups -->
    </safety-sources-config>
</safety-center-config>

ملف إعداد Google

يوجد ملف إعداد AOSP في packages/modules/Permission/SafetyCenter/Resources/res/raw/safety_center_config.xml

في نظام التشغيل Android 13، يكون ملف ضبط Google هو:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                loggingAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                maxSeverityLevel="300"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidAdvancedSecurity"
                profile="primary_profile_only"
                intentAction="com.android.settings.security.SECURITY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>
            <static-safety-source
                id="AndroidAdvancedPrivacy"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_privacy_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_privacy_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_privacy_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

في نظام التشغيل Android 14، يكون ملف ضبط Google هو:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                deduplicationGroup="AppSecurity"/>
            <issue-only-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                loggingAllowed="false"
                deduplicationGroup="AppSecurity"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                notificationsAllowed="true"
                maxSeverityLevel="300"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_biometrics_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePasswordCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_password_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_password_checkup_title_for_work"
                searchTerms="@com.google.android.safetycenter.resources:string/google_password_checkup_search_terms"
                initialDisplayState="hidden"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                initialDisplayState="hidden"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"/>
            <dynamic-safety-source
                id="GoogleBackupAndRestore"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                title="@com.google.android.safetycenter.resources:string/google_backup_title"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_backup_search_terms"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="GoogleAdsIdentity"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.adsidentity.ACTION_ADS_IDENTITY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_ads_identity_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_ads_identity_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_ads_identity_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_ads_identity_search_terms"/>
            <dynamic-safety-source
                id="AndroidHealthConnect"
                profile="primary_profile_only"
                packageName="com.google.android.healthconnect.controller"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="false"
                title="@com.google.android.safetycenter.resources:string/google_health_connect_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_health_connect_search_terms"/>
            <dynamic-safety-source
                id="AndroidPrivacyAppDataSharingUpdates"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"
                title="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <static-safety-source
                id="GoogleActivityControls"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.accountsettings.action.ACTIVITY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_activity_controls_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_activity_controls_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_activity_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_activity_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_work_policy_title"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidMoreSettings"
                profile="primary_profile_only"
                intentAction="com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_more_settings_title"
                summary="@com.google.android.safetycenter.resources:string/google_more_settings_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_more_settings_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

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

أنواع مصادر مركز الأمان

يمكن أن تكون المصادر ديناميكية أو مشكلة فقط أو ثابتة بناءً على نوع البيانات التي إرساله إلى "مركز الأمان"

المصادر الديناميكية

وضع علامة "dynamic-safety-source" على مصدر الأمان إذا كان بإمكانه تقديم بيانات ديناميكية إلى "مركز الأمان" للحصول على إذن الدخول وبطاقات التحذير المحتملة:

<dynamic-safety-source
    id="AndroidLockScreen"
    packageName="com.android.settings"
    profile="primary_profile_only"
    title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
    summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
    initialDisplayState="disabled"
    maxSeverityLevel="300"
    refreshOnPageOpenAllowed="true"/>

المصادر المخصّصة للمشكلة فقط

وضع علامة issue-only-safety-source على المصدر في حال توفّر ما مِن إعدادات مرتبطة. من الدخول ولكن لا تزال هناك تحذيرات. يمكنك تقديم تحذيرات فقط تقديم يؤدي إدخال إعدادات إلى حدوث خطأ:

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

المصادر الثابتة

وضع علامة static-safety-source على المصدر إذا كان إدخال إعادة توجيه بدون البيانات الديناميكية:

<static-safety-source
    id="AndroidAdvancedSecurity"
    profile="primary_profile_only"
    intentAction="com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS"
    title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
    summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>

ضبط مصدر مركز الأمان

استنادًا إلى نوع مصدر "مركز الأمان" والمتغيرات الأخرى، قد تكون حقول الملفات اختيارية أو مطلوبة أو محظورة ويمكن تخصيصها:

  • id
    • يجب أن يكون المعرّف الفريد لمصدر الأمان فريدًا بشكل كامل. وأن يتألف من أحرف أبجدية فقط (من a إلى z وA-Z) حسّاسة لحالة الأحرف
    • نوع السلسلة
    • مطلوبة لجميع أنواع مصادر الأمان
  • packageName
    • اسم الطرد الذي يملك مصدر الأمان هذا، مثل com.google.android.permissioncontroller
    • نوع السلسلة
    • مطلوب لمصادر الأمان الديناميكية والمخصصة لمشكلة فقط
    • محتوى محظور على مصادر الأمان الثابتة في نظام التشغيل Android 13؛ في Android 14 هذا يمكن ضبطها اختياريًا لاستهداف intentAction للمصدر بشكل صريح وليس ضمنيًا (يمكنك الاطلاع على تحليل النية المستندات للحصول على المزيد من التفاصيل)
  • initialDisplayState
    • طريقة عرض إدخال واجهة المستخدم في حال عدم توفير بيانات السلامة المصدر
    • يجب أن يكون نوع التعداد الذي يتم تمثيله كسلسلة واحدًا مما يلي:
      • 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
    • اختيارية لمصادر الأمان الثابتة (الإعداد التلقائي ليس ملخّصًا)
    • هذه السمة مطلوبة لمصادر الأمان الديناميكية (ما لم تكن initialDisplayState مفعّلة. hidden)
    • لا يُسمَح باستخدامه لمصادر الأمان المعنيّة بالمشاكل فقط
  • 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 التي لم يتم ضبطها لتلقّي تحديثات Mainline، بدلاً من على تراكب ملف التهيئة بالكامل، يمكنك تركيب ستة موارد من سلاسل تلبية جميع احتياجات التخصيص. يتم سرد موارد السلسلة التي تظهر على سطح الفيديو. في الجدول.

مورد السلاسل الوصف
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 سجلات الجهاز).

أجهزة خدمات Google

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

أجهزة AOSP

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