หน้านี้จะแสดงวิธีทดสอบการสำรองข้อมูลบนระบบคลาวด์และกระบวนการโอนข้อมูลจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง (D2D) สำหรับแอปของคุณ การทดสอบทั้ง 2 อย่างนี้ในแต่ละ การเปิดตัวแอปเวอร์ชันหลักเป็นสิ่งสำคัญที่จะช่วยให้มั่นใจได้ว่าผู้ใช้จะใช้แอปของคุณต่อไปได้ ในอุปกรณ์เครื่องใหม่ แม้ว่าการสำรองข้อมูลและการโอนข้อมูลจะคล้ายกัน แต่ก็มีความแตกต่างที่สำคัญระหว่าง 2 อย่างนี้ใน Android 12 (API ระดับ 31) ขึ้นไป โดยความแตกต่างที่สำคัญที่สุดคือการโอนข้อมูลมีขีดจำกัดขนาดข้อมูลที่ใหญ่กว่ามากถึง 2 GB เมื่อเทียบกับ 25 MB สำหรับการสำรองข้อมูลในระบบคลาวด์
คู่มือนี้แสดงวิธีทดสอบทั้งการสำรองข้อมูลและกู้คืนข้อมูลในระบบคลาวด์ รวมถึงการโอนข้อมูลแบบ D2D อย่างมีประสิทธิภาพตลอดวงจรการพัฒนา
วิธีการทำงานของการทดสอบข้อมูลสำรอง
ส่วนนี้จะอธิบายองค์ประกอบต่างๆ ในเฟรมเวิร์กการสำรองข้อมูลของ Android และวิธีที่องค์ประกอบเหล่านั้น โต้ตอบกับแอปที่รองรับการสำรองข้อมูลอัตโนมัติและการสำรองข้อมูลแบบคีย์-ค่า ในระหว่าง ระยะการพัฒนาแอป การทำงานภายในส่วนใหญ่ของเฟรมเวิร์กจะ ได้รับการแยกออกไป คุณจึงไม่จำเป็นต้องทราบข้อมูลนี้ อย่างไรก็ตาม ในช่วงระยะการทดสอบ การทำความเข้าใจแนวคิดเหล่านี้จะมีความสำคัญมากขึ้น
แผนภาพต่อไปนี้แสดงให้เห็นว่าข้อมูลไหลเวียนอย่างไรในระหว่างการสำรองข้อมูลและกู้คืนข้อมูลในระบบคลาวด์ คุณใช้อุปกรณ์เครื่องเดียวกันสําหรับการสํารองข้อมูลและกู้คืนข้อมูลในระบบคลาวด์ได้เพื่อวัตถุประสงค์ในการทดสอบ
แผนภาพต่อไปนี้แสดงการไหลของข้อมูลระหว่างการโอน D2D
การทดสอบ D2D ต้องใช้อุปกรณ์ต้นทางและอุปกรณ์ปลายทางเพื่อคัดลอกข้อมูลจากและไปยังอุปกรณ์ดังกล่าว ซึ่งแตกต่างจากการทดสอบการสำรองและกู้คืนข้อมูลในระบบคลาวด์
บริการ Backup Manager เป็นบริการของระบบ Android ที่ประสานงานและ
เริ่มการดำเนินการสำรองและกู้คืนข้อมูล บริการนี้เข้าถึงได้ผ่าน API ของ Backup Manager
ในระหว่างการดำเนินการสำรองข้อมูล บริการจะค้นหาข้อมูลสำรองในแอป จากนั้นส่งข้อมูลไปยังการรับส่งข้อมูลสำรอง ซึ่งจะเก็บข้อมูลไว้ในระบบคลาวด์ ในระหว่าง การดำเนินการกู้คืน บริการ Backup Manager จะดึงข้อมูลสำรองจาก การรับส่งข้อมูลสำรองและกู้คืนข้อมูลไปยังอุปกรณ์ สำหรับการโอน D2D บริการ Backup Manager จะค้นหาข้อมูลสำรองในแอปของคุณและส่งข้อมูลดังกล่าวโดยตรง ไปยังบริการ Backup Manager ในอุปกรณ์เครื่องใหม่ ซึ่งจะโหลดข้อมูลลงในแอปของคุณ
การรับส่งข้อมูลสำรองคือคอมโพเนนต์ Android ที่มีหน้าที่จัดเก็บและ เรียกข้อมูลแอป อุปกรณ์ที่ใช้ Android อาจมีหรือไม่มีการรับส่งข้อมูลสำรองก็ได้ แต่จะทำเครื่องหมายการรับส่งข้อมูลที่ใช้งานอยู่ได้เพียง 1 รายการเท่านั้น การรับส่งข้อมูลสำรองที่ใช้ได้จะแตกต่างกันไปในแต่ละอุปกรณ์เนื่องจากการปรับแต่งโดยผู้ผลิตอุปกรณ์และผู้ให้บริการ แต่โดยส่วนใหญ่อุปกรณ์ที่เปิดใช้ Google Play จะมาพร้อมกับการรับส่งข้อมูลต่อไปนี้
- การโอน GMS: การโอนข้อมูลสำรองในระบบคลาวด์ที่ใช้งานอยู่ในอุปกรณ์ส่วนใหญ่ ซึ่งเป็นส่วนหนึ่งของบริการของ Google Mobile การรับส่งนี้ จัดเก็บข้อมูลในบริการสำรองข้อมูลของ Android
- การรับส่ง D2D: การรับส่งนี้ใช้ในการย้ายข้อมูล D2D เพื่อ โอนข้อมูลจากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่องหนึ่งโดยตรง
เครื่องมือ
หากต้องการทดสอบการดำเนินการสำรองและกู้คืน คุณต้องทราบข้อมูลเล็กน้อยเกี่ยวกับเครื่องมือต่อไปนี้
adb
: เพื่อเรียกใช้คำสั่งในอุปกรณ์หรือ โปรแกรมจำลองbmgr
: เพื่อดำเนินการสำรองและกู้คืนต่างๆlogcat
: เพื่อดูเอาต์พุตของการดำเนินการสำรองข้อมูลและกู้คืน
ทดสอบการสำรองข้อมูลในระบบคลาวด์
คุณสำรองและกู้คืนข้อมูลในระบบคลาวด์ได้โดยใช้อุปกรณ์เครื่องเดียวโดยทำตาม ขั้นตอนในส่วนนี้
เตรียมอุปกรณ์หรือโปรแกรมจำลองสำหรับการสำรองข้อมูลบนระบบคลาวด์
เตรียมอุปกรณ์หรือโปรแกรมจำลองสำหรับการทดสอบการสำรองข้อมูลโดยทำตามรายการตรวจสอบต่อไปนี้
- สำหรับการสำรองข้อมูลอัตโนมัติ ให้ตรวจสอบว่าคุณใช้อุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 6.0 (API ระดับ 23) ขึ้นไป
- สำหรับการสำรองข้อมูลแบบคีย์-ค่า ให้ตรวจสอบว่าคุณใช้อุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 2.2 (API ระดับ 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 ซ้ำสำหรับการทดสอบแต่ละครั้ง
ทดสอบการโอน D2D
วิธีที่ครอบคลุมที่สุดในการทดสอบการโอน D2D คือการโอนเนื้อหาทั้งหมดในโทรศัพท์ไปยังอุปกรณ์ใหม่ที่รีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน และตรวจสอบว่าการโอนทำงานได้อย่างถูกต้อง อย่างไรก็ตาม วิธีนี้อาจไม่สะดวกและใช้เวลานานหากคุณต้องทำกระบวนการนี้ซ้ำหลายครั้ง ขั้นตอนเหล่านี้แสดงวิธีจำลองการโอนด้วยอุปกรณ์เครื่องเดียวโดยไม่ต้องรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้นซ้ำๆ
เตรียมอุปกรณ์ให้พร้อมสำหรับการทดสอบ D2D
หากต้องการทดสอบการโอน D2D ในอุปกรณ์เครื่องเดียว ให้เตรียมอุปกรณ์ดังนี้
- อุปกรณ์ต้องใช้ Android 12 (API ระดับ 31) ขึ้นไป
- หากต้องการทดสอบ D2D เวอร์ชันล่าสุด ให้กำหนดเป้าหมายเป็น Android 12 (API ระดับ 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
คลาสย่อยที่คุณประกาศในไฟล์ Manifest ของแอป
ไม่มีข้อมูลที่จะสำรอง
ข้อความต่อไปนี้ใน 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
แสดงว่าคุณอาจไม่ได้เพิ่มข้อมูลหรือไฟล์ใดๆ ลงในการสำรองข้อมูล