توضّح هذه الصفحة كيفية اختبار عمليات النسخ الاحتياطي على السحابة الإلكترونية ونقل البيانات من جهاز إلى جهاز (D2D) لتطبيقك. من المهم اختبار كلتا العمليتين مع كل إصدار رئيسي من تطبيقك للمساعدة في ضمان استمرار المستخدمين في استخدام تطبيقك على جهاز جديد. على الرغم من التشابه بين الاحتفاظ بنسخة احتياطية ونقل البيانات، هناك اختلافات مهمة بينهما في الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، وأبرزها أنّ الحد الأقصى لحجم البيانات في عملية النقل يبلغ 2 غيغابايت، مقارنةً بـ 25 ميغابايت في عملية الاحتفاظ بنسخة احتياطية على السحابة الإلكترونية.
يوضّح لك هذا الدليل كيفية اختبار كلّ من ميزة "النسخ الاحتياطي والاستعادة" على السحابة الإلكترونية وميزة "النقل من جهاز إلى جهاز" بكفاءة طوال دورة التطوير.
طريقة اختبار النسخ الاحتياطية
يوضّح هذا القسم الأجزاء المختلفة في إطار عمل النسخ الاحتياطي لنظام Android وكيفية تفاعلها مع التطبيقات التي تتيح ميزة "النسخ الاحتياطي التلقائي" والنسخ الاحتياطي للبيانات على شكل أزواج مفاتيح وقيم. أثناء مرحلة تطوير التطبيق، يتم إخفاء معظم التفاصيل الداخلية لإطار العمل، لذا لن تحتاج إلى معرفة هذه المعلومات. ومع ذلك، تصبح معرفة هذه المفاهيم أكثر أهمية خلال مرحلة الاختبار.
يوضّح المخطّط التالي كيفية انتقال البيانات أثناء الاحتفاظ بنسخة احتياطية واستعادتها من السحابة الإلكترونية. لأغراض الاختبار، يمكن استخدام الجهاز نفسه لإنشاء نسخة احتياطية مخزَّنة على السحابة الإلكترونية واستعادتها.
يوضّح المخطّط التالي كيفية انتقال البيانات أثناء عملية النقل من جهاز إلى آخر:
على عكس اختبار النسخ الاحتياطي والاستعادة من السحابة الإلكترونية، يتطلّب اختبار النقل من جهاز إلى آخر توفُّر جهاز مصدر وجهاز مستهدف لإجراء عملية النسخ.
خدمة "إدارة النسخ الاحتياطية" هي خدمة نظام Android تعمل على تنسيق عمليات الاحتفاظ بنسخة احتياطية واستعادة البيانات وبدء هذه العمليات. يمكن الوصول إلى الخدمة من خلال واجهة برمجة التطبيقات
Backup Manager
.
أثناء عملية الاحتفاظ بنسخة احتياطية، تستعلم الخدمة من تطبيقك عن بيانات النسخة الاحتياطية، ثم تسلّمها إلى نظام نقل النسخ الاحتياطية الذي يؤرشف البيانات بعد ذلك على السحابة الإلكترونية. أثناء عملية الاستعادة، تسترجع خدمة "مدير الاحتفاظ بنسخة احتياطية" بيانات النسخة الاحتياطية من وسيلة نقل النسخة الاحتياطية وتستعيد البيانات على الجهاز. في عملية النقل من جهاز إلى جهاز، تستعلم خدمة "مدير النسخ الاحتياطية" عن بيانات النسخة الاحتياطية في تطبيقك، ثم تنقلها مباشرةً إلى خدمة "مدير النسخ الاحتياطية" على الجهاز الجديد، والتي تحمّلها بدورها إلى تطبيقك.
خدمات نقل البيانات الاحتياطية هي أحد مكونات Android المسؤولة عن تخزين بيانات التطبيقات واسترجاعها. يمكن أن يتضمّن جهاز يعمل بنظام التشغيل Android صفرًا أو أكثر من عمليات النقل الاحتياطية، ولكن يمكن وضع علامة نشط على عملية نقل واحدة فقط من عمليات النقل هذه. تختلف وسائل النقل الاحتياطية المتاحة من جهاز إلى آخر بسبب التخصيصات التي يجريها مصنّعو الأجهزة ومقدّمو الخدمات، ولكن معظم الأجهزة التي تتوافق مع Google Play تتضمّن وسائل النقل التالية:
- نقل البيانات باستخدام "خدمات Google للأجهزة الجوّالة": هي خدمة نقل البيانات الاحتياطية النشطة على السحابة الإلكترونية على معظم الأجهزة، وهي جزء من خدمات Google للأجهزة الجوّالة. تخزّن طريقة النقل هذه البيانات في خدمة "الاحتفاظ بنسخة احتياطية من البيانات في جهاز Android".
- النقل من جهاز إلى جهاز: يُستخدم هذا النوع من النقل في عملية نقل البيانات من جهاز إلى جهاز لنقل البيانات مباشرةً من جهاز إلى آخر.
الأدوات
لاختبار عمليات الاحتفاظ بنسخة احتياطية والاستعادة، عليك معرفة بعض المعلومات حول الأدوات التالية.
adb
: لتنفيذ الأوامر على الجهاز أو المحاكي.bmgr
: لتنفيذ عمليات مختلفة للاحتفاظ بنسخة احتياطية من البيانات واستعادتهاlogcat
: للاطّلاع على نتائج عمليات الاحتفاظ بنسخة احتياطية والاستعادة
اختبار النسخ الاحتياطي عبر السحابة الإلكترونية
يمكن إجراء عملية الاحتفاظ بنسخة احتياطية من البيانات واستعادتها على السحابة الإلكترونية باستخدام جهاز واحد باتّباع الخطوات الواردة في هذا القسم.
تحضير جهازك أو المحاكي لعمليات الاحتفاظ بنسخة احتياطية على السحابة الإلكترونية
جهِّز جهازك أو المحاكي لاختبار النسخ الاحتياطي من خلال اتّباع قائمة التحقّق التالية:
- بالنسبة إلى ميزة "النسخ الاحتياطي التلقائي"، تأكَّد من أنّك تستخدم جهازًا أو محاكيًا يعمل بالإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو إصدار أحدث.
- لإجراء عملية احتياطية لبيانات المفتاح والقيمة، تأكَّد من استخدام جهاز أو محاكي يعمل بالإصدار Android 2.2 (المستوى 8 من واجهة برمجة التطبيقات) أو إصدار أحدث.
- يجب أن يكون لديك اتصال بالإنترنت لاختبار ميزة "الاحتفاظ بنسخة احتياطية على السحابة الإلكترونية".
- سجِّل الدخول إلى الجهاز باستخدام حساب Google واضبطه كحساب احتياطي في الإعدادات -> Google -> الاحتفاظ بنسخة احتياطية.
لاختبار ميزة "الاحتفاظ بنسخة احتياطية على السحابة الإلكترونية"، عليك بدء عملية الاحتفاظ بنسخة احتياطية على السحابة الإلكترونية، ثم إلغاء تثبيت التطبيق وإعادة تثبيته. ولتكرار هذه الخطوات، يمكنك استخدام النص البرمجي التالي، test_cloud_backup.sh
، الذي يحتفظ بنسخة احتياطية من تطبيقك، وينزّل حزمة APK محليًا، ثم يلغي تثبيتها، ويعيد تثبيت حزمة APK:
#!/bin/bash -eu
: "${1?"Usage: $0 package name"}"
# Initialize and create a backup
adb shell bmgr enable true
adb shell bmgr transport com.android.localtransport/.LocalTransport | grep -q "Selected transport" || (echo "Error: error selecting local transport"; exit 1)
adb shell settings put secure backup_local_transport_parameters 'is_encrypted=true'
adb shell bmgr backupnow "$1" | grep -F "Package $1 with result: Success" || (echo "Backup failed"; exit 1)
# Uninstall and reinstall the app to clear the data and trigger a restore
apk_path_list=$(adb shell pm path "$1")
OIFS=$IFS
IFS=$'\n'
apk_number=0
for apk_line in $apk_path_list
do
(( ++apk_number ))
apk_path=${apk_line:8:1000}
adb pull "$apk_path" "myapk${apk_number}.apk"
done
IFS=$OIFS
adb shell pm uninstall --user 0 "$1"
apks=$(seq -f 'myapk%.f.apk' 1 $apk_number)
adb install-multiple -t --user 0 $apks
# Clean up
adb shell bmgr transport com.google.android.gms/.backup.BackupTransportService
rm $apks
echo "Done"
خطوات الاختبار
- افتح التطبيق وسجِّل الدخول وعدِّل جميع الإعدادات.
- نفِّذ النص البرمجي مع إدخال اسم الحزمة، مثل
test_cloud_backup.sh com.example.myapp
- أعِد فتح التطبيق وتأكَّد من أنّه يعمل بشكل صحيح مع الاحتفاظ بجميع البيانات.
لا تريد أن يضطر المستخدمون إلى تسجيل الدخول، ويجب أن تظل جميع الإعدادات والتقدّم وبيانات التطبيق كما كانت من قبل. إذا لم تستوفِ نتائج الاختبار هذه المعايير، تأكَّد من أنّك قد أعددت عمليات الاحتفاظ بنسخة احتياطية بشكل صحيح، بدون إغفال أي أجزاء رئيسية من البيانات، ومن أنّك تتعامل أيضًا مع إعادة إنشاء أي بيانات مخزّنة مؤقتًا استبعدتها من النسخة الاحتياطية. كرِّر الخطوات من 1 إلى 3 لكل تكرار للاختبار.
اختبار النقل من جهاز إلى جهاز
إنّ الطريقة الأكثر شمولاً لاختبار عملية نقل البيانات من جهاز إلى آخر هي نقل محتوى هاتفك بالكامل إلى جهاز جديد تمت إعادة ضبطه على الإعدادات الأصلية والتأكّد من أنّ العملية تتم بشكل سليم. ومع ذلك، قد يكون ذلك غير ملائم ويستغرق وقتًا طويلاً إذا كنت بحاجة إلى تكرار العملية عدة مرات. توضّح لك هذه الخطوات كيفية محاكاة عملية نقل باستخدام جهاز واحد بدون الحاجة إلى إعادة ضبط الجهاز على الإعدادات الأصلية بشكل متكرّر.
تحضير جهازك لاختبار ميزة "نقل البيانات من جهاز إلى آخر"
لاختبار عملية نقل البيانات من جهاز إلى آخر، عليك إعداد الجهاز على النحو التالي:
- يجب أن يعمل جهازك بالإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) أو إصدار أحدث.
- لاختبار أحدث إصدار من ميزة "نقل البيانات من جهاز إلى جهاز"، استهدِف الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث في تطبيقك.
- أنشئ النص البرمجي التالي،
test_d2d.sh
، للسماح بتكرار الاختبار:
#!/bin/bash -eu
: "${1?"Usage: $0 package name"}"
# Initialize and create a backup
adb shell bmgr enable true
adb shell settings put secure backup_enable_d2d_test_mode 1
adb shell bmgr transport com.google.android.gms/.backup.migrate.service.D2dTransport
adb shell bmgr init com.google.android.gms/.backup.migrate.service.D2dTransport
adb shell bmgr list transports | grep -q -F " * com.google.android.gms/.backup.migrate.service.D2dTransport" || (echo "Failed to select and initialize backup transport"; exit 1)
adb shell bmgr backupnow "$1" | grep -F "Package $1 with result: Success" || (echo "Backup failed"; exit 1)
# Uninstall and reinstall the app to clear the data and trigger a restore
apk_path_list=$(adb shell pm path "$1")
OIFS=$IFS
IFS=$'\n'
apk_number=0
for apk_line in $apk_path_list
do
(( ++apk_number ))
apk_path=${apk_line:8:1000}
adb pull "$apk_path" "myapk${apk_number}.apk"
done
IFS=$OIFS
adb shell pm uninstall --user 0 "$1"
adb shell bmgr transport com.google.android.gms/.backup.BackupTransportService
apks=$(seq -f 'myapk%.f.apk' 1 $apk_number)
adb install-multiple -t --user 0 $apks
# Clean up
adb shell bmgr init com.google.android.gms/.backup.migrate.service.D2dTransport
adb shell settings put secure backup_enable_d2d_test_mode 0
adb shell bmgr transport com.google.android.gms/.backup.BackupTransportService
rm $apks
echo "Done"
خطوات الاختبار
- ثبِّت التطبيق الذي تريد اختباره على الجهاز.
- افتح تطبيقك وسجِّل الدخول وعدِّل إعدادات التطبيق.
- نفِّذ النص البرمجي على جهازك، مع إدخال اسم الحزمة، مثل
test_d2d.sh com.example.myapp
. - عند اكتمال النص البرمجي، افتح التطبيق على الجهاز وتأكَّد من أنّه يعمل بشكل صحيح مع الاحتفاظ بجميع البيانات.
لا تريد أن يضطر المستخدمون إلى تسجيل الدخول، ويجب أن تظهر جميع الإعدادات والتقدّم وبيانات التطبيق كما كانت قبل تشغيل النص البرمجي. إذا لم تستوفِ نتائج الاختبار هذه المعايير، تأكَّد من أنّك أعددت عملية النقل بشكل صحيح، بدون حذف أي أجزاء رئيسية من البيانات، ومن أنّك تتعامل أيضًا مع إعادة إنشاء أي بيانات مخزّنة مؤقتًا استبعدتها من عملية النقل. كرِّر الخطوات من 2 إلى 4 لكل تكرار للاختبار.
تحديد وحلّ المشاكل المتعلّقة بالاحتفاظ بنسخة احتياطية واستعادة البيانات
يساعدك هذا القسم في تحديد بعض المشاكل الشائعة وحلّها.
تم تجاوز حصة النقل
تشير الرسائل التالية في Logcat إلى أنّ تطبيقك قد تجاوز حصة النقل:
I/PFTBT: Transport rejected backup of <PACKAGE>, skipping
--- or ---
I/PFTBT: Transport quota exceeded for package: <PACKAGE>
يُرجى تقليل حجم بيانات النسخ الاحتياطي وإعادة المحاولة. على سبيل المثال، تأكَّد من أنّك تخزِّن البيانات مؤقتًا في دليل التخزين المؤقت الخاص بتطبيقك فقط، لأنّ دليل التخزين المؤقت غير مضمَّن في النُسخ الاحتياطية.
لا يمكن إجراء نسخ احتياطي كامل
تشير الرسالة التالية في Logcat إلى تعذُّر إجراء عملية النسخ الاحتياطي الكاملة لأنّه لم يتم إجراء أي عملية نسخ احتياطي باستخدام مفتاح وقيمة على الجهاز حتى الآن:
I/BackupManagerService: Full backup not currently possible -- key/value backup
not yet run?
فعِّل عملية نسخ احتياطي لمفتاح وقيمة باستخدام الأمر bmgr run
، ثم أعِد المحاولة.
انتهت المهلة المحدّدة لانتظار موظّف الدعم
تشير الرسالة التالية في Logcat إلى أنّ تطبيقك يستغرق أكثر من 10 ثوانٍ لبدء التشغيل من أجل الاحتفاظ بنسخة احتياطية:
12-05 18:59:02.033 1910 2251 D BackupManagerService:
awaiting agent for ApplicationInfo{5c7cde0 com.your.app.package}
12-05 18:59:12.117 1910 2251 W BackupManagerService:
Timeout waiting for agent ApplicationInfo{5c7cde0 com.your.app.package}
12-05 18:59:12.117 1910 2251 W BackupManagerService:
Can't find backup agent for com.your.app.package
لاحظ الفرق في الطابع الزمني في ناتج السجلّ. يحدث هذا الخطأ عادةً عندما يستخدم تطبيقك إعدادات multidex بدون ProGuard.
حساب احتياطي لم تتم تهيئته
تشير الرسائل التالية في Logcat إلى أنّه تم إيقاف عملية الاحتفاظ بنسخة احتياطية لأنّه لم يتم تهيئة مجموعة بيانات النسخة الاحتياطية:
01-31 14:32:45.698 17280 17292 I Backup: [GmsBackupTransport] Try to backup for
an uninitialized backup account.
01-31 14:32:45.699 1043 18255 W PFTBT: Transport failed; aborting backup: -1001
01-31 14:32:45.699 1043 18255 I PFTBT: Full backup completed with status: -1000
شغِّل أداة إدارة النسخ الاحتياطية باستخدام الأمر adb shell bmgr run
، ثم حاوِل إجراء عملية الاحتفاظ بنسخة احتياطية مرة أخرى.
لم يتم استدعاء طرق التطبيق
بما أنّ ميزة "النسخ الاحتياطي التلقائي" تشغّل تطبيقك باستخدام فئة أساسية من
Application
، قد لا يتم استدعاء طرق الإعداد في تطبيقك. لا يفعّل تطبيق "النسخ الاحتياطي التلقائي" أيًا من أنشطة تطبيقك،
لذا قد تظهر لك أخطاء إذا كان تطبيقك يضبط الإعدادات في أحد الأنشطة. لمزيد من المعلومات، يُرجى الاطّلاع على تنفيذ BackupAgent.
في المقابل، يؤدي الاحتفاظ بنسخة احتياطية من البيانات على شكل مفتاح وقيمة إلى تشغيل تطبيقك مع أي فئة فرعية Application
تحدّدها في ملف بيان التطبيق.
ما مِن بيانات للاحتفاظ بنسخة احتياطية منها
تشير الرسائل التالية في Logcat إلى أنّ تطبيقك لا يتضمّن أي بيانات للاحتفاظ بنسخة احتياطية منها:
I Backup : [FullBackupSession] Package com.your.app.package doesn't have any backup data.
--- or ---
I Backup : [D2dTransport] Package com.your.app.package doesn't have any backup data.
إذا نفّذت عملية النسخ الاحتياطي بنفسك
BackupAgent
، من المحتمل أنّك لم تُضِف أي بيانات أو ملفات إلى النسخة الاحتياطية.