ทดสอบการสำรองและกู้คืนข้อมูล

หน้านี้จะแสดงวิธีทดสอบการสำรองข้อมูลบนระบบคลาวด์และกระบวนการโอนข้อมูลจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง (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: เพื่อดูเอาต์พุตของการดำเนินการสำรองข้อมูลและกู้คืน

ทดสอบการสำรองข้อมูลในระบบคลาวด์

คุณสำรองและกู้คืนข้อมูลในระบบคลาวด์ได้โดยใช้อุปกรณ์เครื่องเดียวโดยทำตาม ขั้นตอนในส่วนนี้

เตรียมอุปกรณ์หรือโปรแกรมจำลองสำหรับการสำรองข้อมูลบนระบบคลาวด์

เตรียมอุปกรณ์หรือโปรแกรมจำลองสำหรับการทดสอบการสำรองข้อมูลโดยทำตามรายการตรวจสอบต่อไปนี้

  1. สำหรับการสำรองข้อมูลอัตโนมัติ ให้ตรวจสอบว่าคุณใช้อุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 6.0 (API ระดับ 23) ขึ้นไป
  2. สำหรับการสำรองข้อมูลแบบคีย์-ค่า ให้ตรวจสอบว่าคุณใช้อุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 2.2 (API ระดับ 8) ขึ้นไป
  3. คุณต้องมีการเข้าถึงอินเทอร์เน็ตเพื่อทดสอบการสำรองข้อมูลบนระบบคลาวด์
  4. เข้าสู่ระบบอุปกรณ์ด้วยบัญชี 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"

ขั้นตอนการทดสอบ

  1. เปิดแอป เข้าสู่ระบบ และแก้ไขการตั้งค่าทั้งหมด
  2. เรียกใช้สคริปต์โดยส่งชื่อแพ็กเกจ เช่น test_cloud_backup.sh com.example.myapp
  3. เปิดแอปอีกครั้งและตรวจสอบว่าแอปทำงานได้อย่างถูกต้องโดยที่ข้อมูลทั้งหมด ยังคงอยู่

คุณไม่ต้องการให้ผู้ใช้ต้องเข้าสู่ระบบ และการตั้งค่า ความคืบหน้า และข้อมูลแอปทั้งหมดต้องเป็นไปตามที่เคยเป็น หากผลการทดสอบไม่เป็นไปตามเกณฑ์เหล่านี้ โปรดตรวจสอบว่าคุณได้กำหนดค่าการสำรองข้อมูล อย่างถูกต้องโดยไม่ละเว้นข้อมูลสำคัญ และคุณยังจัดการ การสร้างข้อมูลที่แคชไว้ใหม่ซึ่งคุณยกเว้นจากการสำรองข้อมูลด้วย ทำขั้นตอนที่ 1-3 ซ้ำสำหรับการทดสอบแต่ละครั้ง

ทดสอบการโอน D2D

วิธีที่ครอบคลุมที่สุดในการทดสอบการโอน D2D คือการโอนเนื้อหาทั้งหมดในโทรศัพท์ไปยังอุปกรณ์ใหม่ที่รีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน และตรวจสอบว่าการโอนทำงานได้อย่างถูกต้อง อย่างไรก็ตาม วิธีนี้อาจไม่สะดวกและใช้เวลานานหากคุณต้องทำกระบวนการนี้ซ้ำหลายครั้ง ขั้นตอนเหล่านี้แสดงวิธีจำลองการโอนด้วยอุปกรณ์เครื่องเดียวโดยไม่ต้องรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้นซ้ำๆ

เตรียมอุปกรณ์ให้พร้อมสำหรับการทดสอบ D2D

หากต้องการทดสอบการโอน D2D ในอุปกรณ์เครื่องเดียว ให้เตรียมอุปกรณ์ดังนี้

  1. อุปกรณ์ต้องใช้ Android 12 (API ระดับ 31) ขึ้นไป
  2. หากต้องการทดสอบ D2D เวอร์ชันล่าสุด ให้กำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) ขึ้นไปในแอป
  3. สร้างสคริปต์ต่อไปนี้ 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"

ขั้นตอนการทดสอบ

  1. ติดตั้งแอปที่ต้องการทดสอบในอุปกรณ์
  2. เปิดแอป เข้าสู่ระบบ และแก้ไขการตั้งค่าของแอป
  3. เรียกใช้สคริปต์ในอุปกรณ์โดยส่งชื่อแพ็กเกจ เช่น test_d2d.sh com.example.myapp
  4. เมื่อสคริปต์เสร็จสมบูรณ์ ให้เปิดแอปในอุปกรณ์และ ตรวจสอบว่าแอปทำงานได้อย่างถูกต้องโดยที่ข้อมูลทั้งหมดจะยังคงอยู่

คุณไม่ต้องการให้ผู้ใช้ต้องเข้าสู่ระบบ และการตั้งค่า ความคืบหน้า และข้อมูลแอปทั้งหมดต้องปรากฏเหมือนกับก่อนเรียกใช้สคริปต์ หากผลการทดสอบไม่เป็นไปตามเกณฑ์เหล่านี้ ให้ตรวจสอบว่าคุณได้กำหนดค่าการโอนอย่างถูกต้องโดยไม่ละเว้นข้อมูลสำคัญ และคุณยังจัดการการสร้างข้อมูลที่แคชใหม่ซึ่งคุณยกเว้นจากการโอนด้วย ทำขั้นตอนที่ 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 แสดงว่าคุณอาจไม่ได้เพิ่มข้อมูลหรือไฟล์ใดๆ ลงในการสำรองข้อมูล