الاحتفاظ بنسخة احتياطية من بيانات المستخدمين باستخدام الاحتفاظ التلقائي بنسخة احتياطية

تعمل ميزة الاحتفاظ التلقائي بنسخة احتياطية للتطبيقات على الاحتفاظ تلقائيًا بنسخة احتياطية من بيانات المستخدم من التطبيقات التي تستهدف الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. يحتفظ Android ببيانات التطبيق من خلال تحميلها على Google Drive الخاص بالمستخدم، حيث تكون البيانات محمية من خلال بيانات اعتماد حساب Google للمستخدم. تخضع النسخة الاحتياطية للتشفير التام بين الأطراف على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث باستخدام رقم التعريف الشخصي أو النقش أو كلمة المرور للأجهزة. ويقتصر حجم البيانات على 25 ميغابايت لكل مستخدم. لا توجد رسوم لتخزين البيانات الاحتياطية. يمكن لتطبيقك تخصيص عملية الاحتفاظ بنسخة احتياطية أو إيقافها من خلال إيقاف النُسخ الاحتياطية.

للحصول على نظرة عامة على خيارات الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android وإرشادات حول البيانات التي يجب الاحتفاظ بنسخة احتياطية منها واستعادتها، يمكنك الاطّلاع على نظرة عامة حول الاحتفاظ بنسخة احتياطية من البيانات.

الملفات التي تم الاحتفاظ بنسخة احتياطية منها

تتضمن ميزة "الاحتفاظ التلقائي بنسخة احتياطية" تلقائيًا ملفات في معظم الأدلة التي يعيّنها النظام لتطبيقك:

  • ملفات الإعدادات المفضّلة المشتركة

  • تم حفظ الملفات في وحدة التخزين الداخلية لتطبيقك وتم الوصول إليها من خلال getFilesDir() أو getDir(String, int).

  • الملفات في الدليل الذي يعرضه getDatabasePath(String)، والذي يتضمّن أيضًا الملفات التي تم إنشاؤها باستخدام الفئة SQLiteOpenHelper

  • الملفات الموجودة على وحدة التخزين الخارجية في الدليل والتي يعرضها getExternalFilesDir(String)

تستثني ميزة "الاحتفاظ التلقائي بنسخة احتياطية" الملفات في الأدلة التي يعرضها getCacheDir() وgetCodeCacheDir() وgetNoBackupFilesDir(). تكون الملفات المحفوظة في هذه المواقع ضرورية فقط بشكل مؤقت ويتم استبعادها عن قصد من العمليات الاحتياطية.

يمكنك ضبط تطبيقك لتضمين ملفات معيّنة أو استبعادها. لمزيد من المعلومات، يُرجى الاطّلاع على قسم تضمين الملفات واستبعادها.

الموقع الجغرافي للنسخة الاحتياطية

يتم تخزين بيانات النسخة الاحتياطية في مجلد خاص في حساب المستخدم على Google Drive، ويقتصر على 25 ميغابايت لكل تطبيق. ولا يتم احتساب البيانات المحفوظة ضمن حصّة Google Drive الشخصية للمستخدم. ولا يتم تخزين سوى أحدث نسخة احتياطية. عند إجراء نسخة احتياطية، يتم حذف أي نسخة احتياطية سابقة. لا يمكن للمستخدم أو التطبيقات الأخرى على الجهاز قراءة بيانات النسخة الاحتياطية.

يمكن للمستخدمين الاطّلاع على قائمة بالتطبيقات التي تم الاحتفاظ بنسخة احتياطية منها في تطبيق Google Drive المتوافق مع Android. على الجهاز الذي يعمل بنظام التشغيل Android، يمكن للمستخدمين العثور على هذه القائمة في لائحة التنقّل في تطبيق Drive ضمن الإعدادات > الاحتفاظ بنسخة احتياطية وإعادة الضبط.

يتم تخزين النسخ الاحتياطية من كل فترة لإعداد الجهاز في مجموعات بيانات منفصلة، كما هو موضح في الأمثلة التالية:

  • إذا كان المستخدم يمتلك جهازين، فستكون هناك مجموعة بيانات احتياطية لكل جهاز.

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

الجدول الزمني للنسخ الاحتياطي

تحدث عمليات النسخ الاحتياطي تلقائيًا عند استيفاء جميع الشروط التالية:

  • فعَّل المستخدم ميزة "الاحتفاظ بنسخة احتياطية" على الجهاز. في Android 9، يكون هذا الإعداد في الإعدادات > النظام > الاحتفاظ بنسخة احتياطية.
  • انقضاء 24 ساعة على الأقل منذ آخر عملية نسخ احتياطي
  • الجهاز غير مستخدَم من قِبل أي برنامج حاليًا.
  • أن يكون الجهاز متصلاً بشبكة Wi-Fi (إذا لم يوافق مستخدم الجهاز على الاحتفاظ بنسخ احتياطية من بيانات الجوّال)

من الناحية العملية، تحدث هذه الحالات كل ليلة تقريبًا، ولكن قد لا يتم إجراء نسخ احتياطي لجهاز مطلقًا (على سبيل المثال، إذا لم يتصل أبدًا بأي شبكة). للحفاظ على معدل نقل البيانات للشبكة، لا يتم التحميل إلا إذا تم تغيير بيانات التطبيق.

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

لتبسيط عملية الاختبار، يشتمل Android على أدوات تتيح لك بدء الاحتفاظ بنسخة احتياطية من تطبيقك يدويًا. لمزيد من المعلومات، يمكنك الاطّلاع على اختبار الاحتفاظ بنسخة احتياطية والاستعادة.

استعادة الجدول الزمني

وتتم استعادة البيانات كلّما تم تثبيت التطبيق، سواء من "متجر Play" أم أثناء إعداد الجهاز (عندما يثبّت النظام التطبيقات المثبَّتة مسبقًا) أو من خلال تثبيت عملية "adb". وتحدث عملية الاستعادة بعد تثبيت حزمة APK ولكن قبل أن تُتاح إمكانية تشغيل التطبيق من قِبل المستخدم.

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

لتبسيط عملية الاختبار، يشتمل Android على أدوات تتيح لك بدء استعادة تطبيقك يدويًا. لمزيد من المعلومات، يمكنك الاطّلاع على اختبار الاحتفاظ بنسخة احتياطية والاستعادة.

تفعيل ميزة "الاحتفاظ بنسخة احتياطية" وإيقافها

أما التطبيقات التي تستهدف الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، فتشارك تلقائيًا في ميزة "الاحتفاظ بنسخة احتياطية تلقائيًا". في ملف بيان التطبيق، اضبط القيمة المنطقية android:allowBackup لتفعيل ميزة الاحتفاظ بنسخة احتياطية أو إيقافها. القيمة التلقائية هي true، ولكننا ننصحك بتحديد السمة بوضوح في ملف البيان، كما يتضح في المثال التالي:

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

يمكنك إيقاف عمليات الاحتفاظ بنسخة احتياطية عن طريق ضبط android:allowBackup على false. قد تريد إجراء ذلك إذا كان بإمكان تطبيقك إعادة إنشاء حالته باستخدام آلية أخرى أو إذا كان تطبيقك يتعامل مع معلومات حساسة.

تضمين الملفات واستبعادها

يحتفظ النظام تلقائيًا بنسخة احتياطية من جميع بيانات التطبيقات تقريبًا. لمزيد من المعلومات، راجع القسم الذي يتناول الملفات التي تم الاحتفاظ بنسخة احتياطية منها.

يوضح لك هذا القسم كيفية تحديد قواعد XML مخصصة للتحكم في البيانات التي يتم الاحتفاظ بنسخة احتياطية منها. إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، عليك تحديد مجموعة إضافية من قواعد الاحتفاظ بنسخة احتياطية بتنسيق XML، كما هو موضّح في هذا القسم، لتغطية التغييرات في استعادة النسخة الاحتياطية التي تم تقديمها على الأجهزة التي تعمل بإصدارات Android هذه.

التحكّم في ميزة "الاحتفاظ بنسخة احتياطية" على نظام التشغيل Android 11 والإصدارات الأقدم

اتّبِع الخطوات الواردة في هذا القسم لتحديد الملفات التي يتم الاحتفاظ بنسخة احتياطية منها على الأجهزة التي تعمل بنظام التشغيل Android 11 (المستوى 30 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم.

  1. في ملف AndroidManifest.xml، أضِف السمة android:fullBackupContent إلى العنصر <application>، كما هو موضّح في المثال التالي. تشير هذه السمة إلى ملف XML يحتوي على قواعد نسخ احتياطي.

    <application ...
     android:fullBackupContent="@xml/backup_rules">
    </application>
    
  2. أنشِئ ملف XML باسم @xml/backup_rules في دليل res/xml/. في هذا الملف، أضِف قواعد باستخدام العنصرَين <include> و<exclude>. يحتفظ النموذج التالي بنسخة احتياطية من جميع الإعدادات المفضّلة المشتركة باستثناء device.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <full-backup-content>
     <include domain="sharedpref" path="."/>
     <exclude domain="sharedpref" path="device.xml"/>
    </full-backup-content>
    

تحديد شروط الجهاز المطلوبة للاحتفاظ بنسخة احتياطية

إذا كان تطبيقك يحفظ معلومات حساسة على الجهاز، يمكنك تحديد الشروط التي يتم بموجبها تضمين بيانات تطبيقك في النسخة الاحتياطية للمستخدم. يمكنك إضافة الشروط التالية في Android 9 (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث:

في حال ترقية أجهزة التطوير إلى Android 9، عليك إيقاف ميزة الاحتفاظ بنسخة احتياطية من البيانات ثم إعادة تفعيلها بعد الترقية. ويرجع هذا إلى أنّ Android لا يشفّر النُسخ الاحتياطية إلّا باستخدام سرّي من جهة العميل بعد إبلاغ المستخدمين في "الإعدادات" أو معالج الإعداد.

للإعلان عن شروط التضمين، اضبط السمة requireFlags على قيمة أو قيم مختارة في عناصر <include> ضمن مجموعة القواعد الاحتياطية:

Backup_rules.xml

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <!-- App data isn't included in user's backup
         unless client-side encryption is enabled. -->
    <include domain="file" path="."
             requireFlags="clientSideEncryption" />
</full-backup-content>

إذا كان تطبيقك يطبّق نظام الاحتفاظ بنسخة احتياطية من قيمة المفتاح أو نفّذت BackupAgent بنفسك، يمكنك أيضًا تطبيق هذه المتطلبات الشرطية على منطق النسخ الاحتياطي من خلال إجراء مقارنة بسيطة بين مجموعة علامات النقل في عنصر BackupDataOutput وعلامات وكيل النسخة الاحتياطية المخصّصة FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED أو العلامة FLAG_DEVICE_TO_DEVICE_TRANSFER.

يوضح مقتطف الرمز التالي مثالاً على استخدام هذه الطريقة:

Kotlin

class CustomBackupAgent : BackupAgent() {
    override fun onBackup(oldState: ParcelFileDescriptor?,
            data: BackupDataOutput?, newState: ParcelFileDescriptor?) {
        if (data != null) {
            if ((data.transportFlags and
                    FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) {
                // Client-side backup encryption is enabled.
            }

            if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) {
                // Local device-to-device transfer is enabled.
            }
        }
    }

    // Implementation of onRestore() here.
}

Java

public class CustomBackupAgent extends BackupAgent {
    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
            ParcelFileDescriptor newState) throws IOException {
        if ((data.getTransportFlags() &
                FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) {
            // Client-side backup encryption is enabled.
        }

        if ((data.getTransportFlags() &
                FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) {
            // Local device-to-device transfer is enabled.
        }
    }

    // Implementation of onRestore() here.
}

التحكّم في ميزة "الاحتفاظ بنسخة احتياطية" على نظام التشغيل Android 12 أو الإصدارات الأحدث

إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، اتّبِع الخطوات الواردة في هذا القسم لتحديد الملفات التي يتم الاحتفاظ بنسخة احتياطية منها على الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث.

  1. في ملف AndroidManifest.xml، أضِف السمة android:dataExtractionRules إلى العنصر <application> على النحو الموضّح في المثال التالي. تشير هذه السمة إلى ملف XML يحتوي على قواعد النسخ الاحتياطي.

    <application ...
     android:dataExtractionRules="backup_rules.xml">
    </application>
    
  2. أنشِئ ملف XML باسم backup_rules.xml في دليل res/xml/. في هذا الملف، أضِف قواعد باستخدام العنصرَين <include> و<exclude>. يحتفظ النموذج التالي بنسخة احتياطية من جميع الإعدادات المفضّلة المشتركة باستثناء device.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <data-extraction-rules>
     <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
       <include domain="sharedpref" path="."/>
       <exclude domain="sharedpref" path="device.xml"/>
     </cloud-backup>
    </data-extraction-rules>
    

بنية ضبط XML

تختلف بنية XML لملف الإعداد وفقًا لإصدار Android الذي يستهدفه تطبيقك ويعمل عليه.

الإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم

استخدِم بنية XML التالية لملف الإعداد الذي يتحكّم في الاحتفاظ بنسخة احتياطية للأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم.

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"
    requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] />
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string" />
</full-backup-content>

الإصدار 12 من نظام التشغيل Android أو إصدار أحدث

إذا كان تطبيقك يستهدف Android 12 (المستوى 31 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، استخدِم بنية XML التالية لملف الإعداد الذي يتحكّم في الاحتفاظ بنسخة احتياطية للأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث.

<data-extraction-rules>
  <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
  </cloud-backup>
  <device-transfer>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
  </device-transfer>
</data-extraction-rules>

يحتوي كل قسم من الإعدادات (<cloud-backup>، <device-transfer>) على قواعد لا تنطبق إلا على هذا النوع من النقل. يتيح لك هذا الفصل، على سبيل المثال، استبعاد ملف أو دليل من النسخ الاحتياطية على Google Drive مع الاستمرار في نقله أثناء عمليات النقل من جهاز إلى آخر (D2D). يكون هذا الإجراء مفيدًا إذا كانت لديك ملفات كبيرة جدًا ليتم الاحتفاظ بنسخة احتياطية منها على السحابة الإلكترونية ولكن يمكن نقلها بين الأجهزة بدون مشكلة.

وإذا لم تكن هناك قواعد لوضع الاحتفاظ بنسخة احتياطية معيَّن، مثلاً إذا كان القسم <device-transfer> غير متوفّر، يتم تفعيل هذا الوضع بالكامل لكل المحتوى باستثناء أدلة no-backup وcache، كما هو موضّح في قسم الملفات التي تم الاحتفاظ بنسخة احتياطية منها.

يمكن لتطبيقك ضبط العلامة disableIfNoEncryptionCapabilities في القسم <cloud-backup> لضمان عدم الاحتفاظ بنسخة احتياطية إلا إذا كان بالإمكان تشفيرها، مثلاً عندما يكون المستخدم لديه شاشة قفل. ويؤدي وضع هذا القيد إلى إيقاف إرسال النسخ الاحتياطية إلى السحابة الإلكترونية إذا كان جهاز المستخدم لا يتيح التشفير، ولكن نظرًا لعدم إرسال عمليات النقل باستخدام بروتوكول D2D إلى الخادم، فإنها تستمر في العمل حتى على الأجهزة التي لا تدعم التشفير.

بنية عناصر التضمين والاستبعاد

داخل العلامات <full-backup-content> و<cloud-backup> و<device-transfer> (استنادًا إلى إصدار Android على الجهاز وتطبيق targetSDKVersion)، يمكنك تحديد العنصرَين <include> و<exclude>:

<include>

تحدِّد هذه العلامة ملفًا أو مجلدًا للاحتفاظ بنسخة احتياطية منه. بشكل افتراضي، تتضمن ميزة التحميل التلقائي جميع ملفات التطبيق تقريبًا. إذا حددت عنصر <include>، لن يتضمن النظام بعد ذلك أي ملفات تلقائيًا ويحتفظ بنسخة احتياطية من الملفات المحددة فقط. لتضمين ملفات متعددة، استخدم عناصر <include> متعددة.

في نظام التشغيل Android 11 والإصدارات الأقدم، يمكن أن يتضمّن هذا العنصر أيضًا السمة requireFlags التي يناقشها القسم بمزيد من التفصيل حول كيفية تحديد المتطلبات الشرطية للاحتفاظ بنسخة احتياطية.

يتم دائمًا استبعاد الملفات في الأدلة التي يعرضها getCacheDir() أو getCodeCacheDir() أو getNoBackupFilesDir() حتى إذا حاولت تضمينها.

<exclude>

تحدد هذه السمة ملفًا أو مجلدًا لاستبعاده أثناء الاحتفاظ بنسخة احتياطية. فيما يلي بعض الملفات التي يتم استبعادها عادةً من النسخ الاحتياطي:

  • الملفات التي تحتوي على معرّفات خاصة بالجهاز، إما صادرة عن خادم أو تم إنشاؤها على الجهاز. على سبيل المثال، تحتاج خدمة المراسلة عبر السحابة الإلكترونية من Firebase (FCM) إلى إنشاء رمز مميز للتسجيل في كل مرة يثبّت فيها أحد المستخدمين تطبيقك على جهاز جديد. إذا تمت استعادة الرمز المميز القديم للتسجيل، فقد يعمل التطبيق بشكل غير متوقع.

  • الملفات المرتبطة بتصحيح أخطاء التطبيقات.

  • الملفات الكبيرة التي تتسبب في تجاوز التطبيق لحصة الاحتفاظ بنسخة احتياطية، وهي 25 ميغابايت

يجب أن يتضمّن كل عنصر <include> و<exclude> السمتَين التاليتين:

domain

تحدِّد هذه السمة موقع المورد. وتشمل القيم الصالحة لهذه السمة ما يلي:

  • root: الدليل الموجود على نظام الملفات حيث يتم تخزين جميع الملفات الخاصة الخاصة بهذا التطبيق.
  • file: الأدلة التي يعرضها getFilesDir().
  • database: الأدلة التي يعرضها getDatabasePath(). يتم تخزين قواعد البيانات التي تم إنشاؤها باستخدام SQLiteOpenHelper هنا.
  • sharedpref: الدليل حيث يتم تخزين SharedPreferences.
  • external: الدليل الذي تم عرضه بواسطة getExternalFilesDir().
  • device_root: مثل root ولكن بالنسبة إلى مساحة التخزين المحمية بالجهاز.
  • device_file: مثل file ولكن بالنسبة إلى مساحة التخزين المحمية بالجهاز.
  • device_database: مثل database ولكن بالنسبة إلى مساحة التخزين المحمية بالجهاز.
  • device_sharedpref: مثل sharedpref ولكن بالنسبة إلى مساحة التخزين المحمية بالجهاز.
path

تحدِّد هذه السياسة ملفًا أو مجلدًا لتضمينه في النسخة الاحتياطية أو استثناؤه منها. لاحظ ما يلي:

  • لا تتوافق هذه السمة مع بنية حرف البدل أو التعبير العادي.
  • يمكنك الرجوع إلى الدليل الحالي باستخدام ./، ولكن لا يمكنك الرجوع إلى الدليل الرئيسي، مثل استخدام ..، لأسباب تتعلق بالأمان.
  • إذا حدّدت دليلاً، سيتم تطبيق القاعدة على جميع الملفات في الدليل والأدلة الفرعية المتكررة.

تنفيذ BackupAgent

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

  • إذا أردت تلقّي إشعارات بأحداث الاحتفاظ بنسخة احتياطية، مثل onRestoreFinished() وonQuotaExceeded(long, long). يتم تنفيذ طُرق معاودة الاتصال هذه حتى في حال عدم تشغيل التطبيق.

  • لا يمكنك بسهولة التعبير عن مجموعة الملفات التي تريد الاحتفاظ بنسخة احتياطية منها باستخدام قواعد XML. في هذه الحالات النادرة، يمكنك تطبيق سمة BackupAgent تلغي onFullBackup(FullBackupDataOutput) لتخزين البيانات التي تريدها. للاحتفاظ بالتنفيذ التلقائي للنظام، يمكنك طلب الطريقة المناسبة في الفئة الرئيسية باستخدام super.onFullBackup().

في حال تنفيذ BackupAgent، يتوقع النظام تلقائيًا أن ينفّذ تطبيقك الاحتفاظ بنسخة احتياطية من القيمة الرئيسية واستعادتها. لاستخدام ميزة "الاحتفاظ التلقائي بنسخة احتياطية" المستندة إلى الملفات بدلاً من ذلك، عليك ضبط السمة android:fullBackupOnly على true في ملف بيان التطبيق.

أثناء عمليات النسخ الاحتياطي التلقائي واستعادة البيانات، يشغِّل النظام التطبيق في وضع تقييدي لمنع التطبيق من الوصول إلى الملفات التي قد تتسبب في حدوث تضاربات والسماح للتطبيق بتنفيذ طرق معاودة الاتصال في BackupAgent. أمّا في "وضع تقييد المحتوى" هذا، فلا يتم تشغيل النشاط الرئيسي للتطبيق تلقائيًا، ولا يتم إعداد موفّري المحتوى الخاص به، ويتم إنشاء مثيل للفئة الأساسية Application بدلاً من أي فئة فرعية تم تعريفها في بيان التطبيق.

يجب أن يستخدم BackupAgent طريقتَي المجرّدة onBackup() وonRestore()، واللذين يتم استخدامهما للاحتفاظ بنسخة احتياطية من القيمة الأساسية. إذا كنت لا ترغب في إجراء نسخ احتياطي للقيمة المفتاحية، يمكنك ترك عملية تنفيذ هذه الطرق فارغة.

لمزيد من المعلومات، يُرجى الاطّلاع على Extend BackupAgent.