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

หน้านี้จะแสดงวิธีทดสอบการสำรองข้อมูลบนระบบคลาวด์และกระบวนการโอนข้อมูลจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง (D2D) สำหรับแอปของคุณ การทดสอบทั้ง 2 อย่างนี้ในแต่ละรุ่นหลักของแอปเป็นสิ่งสำคัญที่จะช่วยให้มั่นใจได้ว่าผู้ใช้จะใช้แอปของคุณในอุปกรณ์เครื่องใหม่ต่อไปได้ แม้ว่าการสำรองข้อมูลและการโอนข้อมูลจะคล้ายกัน แต่ก็มีความแตกต่างที่สำคัญระหว่าง 2 อย่างนี้ใน Android 12 (API ระดับ 31) ขึ้นไป โดยเฉพาะอย่างยิ่งการโอนมีขีดจำกัดขนาดข้อมูลที่ใหญ่กว่ามากถึง 2 GB เมื่อเทียบกับ 2 MB สำหรับการสำรองข้อมูลในระบบคลาวด์

คู่มือนี้จะแสดงวิธีทดสอบทั้งการสำรองข้อมูลและกู้คืนข้อมูลในระบบคลาวด์ รวมถึงการโอนข้อมูลแบบ D2D อย่างมีประสิทธิภาพตลอดวงจรการพัฒนา

วิธีการทดสอบข้อมูลสำรอง

ส่วนนี้จะอธิบายองค์ประกอบต่างๆ ในเฟรมเวิร์กการสำรองข้อมูลของ Android และวิธีที่องค์ประกอบเหล่านั้น โต้ตอบกับแอปที่รองรับการสำรองข้อมูลอัตโนมัติและการสำรองข้อมูลแบบคีย์-ค่า ในระหว่าง ระยะการพัฒนาแอป การทำงานภายในส่วนใหญ่ของเฟรมเวิร์กจะ ได้รับการแยกออกไป คุณจึงไม่จำเป็นต้องทราบข้อมูลนี้ อย่างไรก็ตาม ในช่วงระยะการทดสอบ การทำความเข้าใจแนวคิดเหล่านี้จะมีความสำคัญมากขึ้น

แผนภาพต่อไปนี้แสดงให้เห็นว่าข้อมูลไหลเวียนอย่างไรในระหว่างการสำรองข้อมูลและ การกู้คืนข้อมูลในระบบคลาวด์

แผนภาพแสดงการไหลของข้อมูลจากแอปไปยังบริการ Backup Manager จากนั้นไปยังการรับส่งข้อมูลสำรอง และสุดท้ายไปยังพื้นที่เก็บข้อมูลระบบคลาวด์
รูปที่ 1: การรับส่งข้อมูลการสำรองและกู้คืนข้อมูลในระบบคลาวด์

แผนภาพต่อไปนี้แสดงวิธีที่ข้อมูลไหลเวียนระหว่างการโอน D2D

แผนภาพแสดงการไหลของข้อมูลจากแอปในอุปกรณ์ต้นทางไปยังบริการ Backup Manager ในอุปกรณ์ต้นทาง จากนั้นไปยังบริการ Backup Manager ในอุปกรณ์ใหม่โดยตรง และสุดท้ายไปยังแอปในอุปกรณ์ใหม่
รูปที่ 2: การรับส่งข้อมูลการโอนจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง

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

บริการตัวจัดการการสำรองข้อมูลเป็นบริการของระบบ 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 ของคุณเอง แสดงว่าคุณอาจไม่ได้เพิ่มข้อมูลหรือไฟล์ใดๆ ลงในการสำรองข้อมูล