Halaman ini menunjukkan cara menguji pencadangan cloud dan proses transfer perangkat-ke-perangkat (D2D) untuk aplikasi Anda. Penting untuk menguji keduanya dengan setiap rilis utama aplikasi Anda untuk membantu memastikan pengguna dapat terus menggunakan aplikasi Anda di perangkat baru. Meskipun pencadangan dan transfer serupa, ada perbedaan penting antara keduanya di Android 12 (level API 31) dan yang lebih tinggi—terutama bahwa transfer memiliki batas ukuran data yang jauh lebih besar, yaitu 2 GB, dibandingkan dengan 25 MB untuk pencadangan cloud.
Panduan ini menunjukkan cara menguji pencadangan dan pemulihan cloud serta transfer D2D secara efisien selama siklus pengembangan.
Cara kerja pengujian cadangan
Bagian ini menjelaskan berbagai bagian dalam framework pencadangan Android dan cara berinteraksi dengan aplikasi yang mendukung Pencadangan Otomatis dan pencadangan nilai kunci. Selama fase pengembangan aplikasi, sebagian besar tugas internal framework akan hilang, sehingga Anda tidak perlu mengetahui informasi ini. Namun, selama tahap pengujian, pemahaman terhadap konsep-konsep ini menjadi lebih penting.
Diagram berikut mengilustrasikan alur data selama pencadangan dan pemulihan cloud. Untuk tujuan pengujian, perangkat yang sama dapat digunakan untuk pencadangan dan pemulihan cloud.
Diagram berikut menggambarkan alur data selama transfer D2D:
Tidak seperti pengujian pencadangan dan pemulihan cloud, pengujian D2D memerlukan perangkat sumber dan perangkat target untuk menyalin data dari dan ke perangkat tersebut.
Backup Manager Service adalah layanan sistem Android yang mengatur dan memulai operasi pencadangan dan pemulihan. Layanan ini dapat diakses melalui
Backup Manager
API.
Selama operasi pencadangan, layanan tersebut akan mengkueri aplikasi Anda untuk pencadangan data, lalu meneruskannya ke backup transport, yang kemudian mengarsipkan data tersebut ke cloud. Selama operasi pemulihan, Layanan Pengelola Pencadangan akan mengambil data cadangan dari backup transport dan memulihkan data tersebut ke perangkat. Untuk transfer D2D, Backup Manager Service akan mengkueri aplikasi Anda untuk mendapatkan data cadangan dan meneruskannya secara langsung ke Backup Manager Service di perangkat baru, yang akan memuatnya ke aplikasi Anda.
Backup Transport adalah komponen Android yang bertanggung jawab untuk menyimpan dan mengambil data aplikasi Anda. Perangkat yang didukung Android dapat memiliki nol atau beberapa backup transport, tetapi hanya satu dari transport tersebut yang dapat ditandai sebagai aktif. Backup transport yang tersedia berbeda-beda di setiap perangkat, karena penyesuaian oleh produsen perangkat dan penyedia layanan, tetapi sebagian besar perangkat berfitur Google Play dikirimkan dengan transport berikut:
- GMS Transport: transport backup cloud aktif di sebagian besar perangkat, bagian dari Layanan Seluler Google. Transport ini menyimpan data di Android Backup Service.
- Transportasi D2D: transportasi ini digunakan dalam migrasi D2D untuk mentransfer data langsung dari satu perangkat ke perangkat lain.
Alat
Untuk menguji operasi pencadangan dan pemulihan, Anda perlu mengetahui sedikit tentang alat-alat berikut.
adb
: untuk menjalankan perintah pada perangkat atau emulator.bmgr
: untuk menjalankan berbagai operasi pencadangan dan pemulihan.logcat
: untuk melihat output operasi pencadangan dan pemulihan.
Menguji pencadangan cloud
Pencadangan dan pemulihan cloud dapat dilakukan menggunakan satu perangkat dengan mengikuti langkah-langkah di bagian ini.
Menyiapkan perangkat atau emulator Anda untuk pencadangan cloud
Siapkan perangkat atau emulator Anda untuk melakukan pengujian pencadangan dengan memastikan checklist berikut:
- Untuk Auto Backup, pastikan Anda menggunakan perangkat atau emulator yang menjalankan Android 6.0 (API level 23) atau yang lebih tinggi.
- Untuk pencadangan key-value, pastikan Anda menggunakan perangkat atau emulator yang menjalankan Android 2.2 (API level 8) atau yang lebih tinggi.
- Anda harus memiliki akses internet untuk menguji pencadangan cloud.
- Login ke perangkat dengan Akun Google dan tetapkan sebagai akun cadangan di Setelan -> Google -> Cadangan.
Untuk menguji pencadangan cloud, picu pencadangan cloud, lalu hapus dan instal ulang
aplikasi. Agar langkah-langkah ini dapat diulang, Anda dapat menggunakan skrip berikut,
test_cloud_backup.sh
, yang mencadangkan aplikasi Anda, mendownload APK secara lokal,
menghapus instalasinya, dan menginstal ulang 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"
Langkah-langkah pengujian
- Buka aplikasi Anda, login, dan ubah semua setelan.
- Jalankan skrip, dengan meneruskan nama paket Anda, seperti
test_cloud_backup.sh com.example.myapp
- Buka kembali aplikasi dan pastikan aplikasi berfungsi dengan benar, dengan semua data dipertahankan.
Anda tidak ingin pengguna perlu login, dan semua setelan, progres dan data aplikasi mereka harus sama seperti sebelumnya. Jika hasil pengujian Anda tidak memenuhi kriteria ini, pastikan Anda telah mengonfigurasi pencadangan dengan benar, tanpa menghilangkan bagian penting data, dan Anda juga menangani pembuatan ulang data yang di-cache yang Anda kecualikan dari pencadangan. Ulangi langkah 1-3 untuk setiap iterasi pengujian.
Menguji transfer D2D
Cara paling komprehensif untuk menguji transfer D2D adalah dengan mentransfer seluruh konten ponsel Anda ke perangkat baru yang direset ke setelan pabrik dan memvalidasi bahwa transfer berfungsi dengan benar. Namun, hal ini dapat merepotkan dan memakan waktu jika Anda perlu mengulangi proses beberapa kali. Langkah-langkah ini menunjukkan cara menyimulasikan transfer dengan satu perangkat tanpa berulang kali melakukan reset ke setelan pabrik pada perangkat.
Menyiapkan perangkat untuk pengujian D2D
Untuk menguji transfer D2D di satu perangkat, siapkan perangkat sebagai berikut:
- Perangkat Anda harus menjalankan Android 12 (level API 31) atau yang lebih tinggi.
- Untuk menguji versi terbaru D2D, targetkan Android 12 (API level 31) atau yang lebih tinggi di aplikasi Anda.
- Buat skrip berikut,
test_d2d.sh
, untuk mendukung pengulangan pengujian:
#!/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"
Langkah-langkah pengujian
- Instal aplikasi yang ingin Anda uji di perangkat.
- Buka aplikasi Anda, login, dan ubah setelan aplikasi Anda.
- Jalankan skrip di perangkat Anda, dengan meneruskan nama paket Anda, seperti
test_d2d.sh com.example.myapp
. - Setelah skrip selesai, buka aplikasi di perangkat dan validasi bahwa aplikasi berfungsi dengan benar, dengan semua data dipertahankan.
Anda tidak ingin pengguna perlu login, dan semua setelan, progres dan data aplikasi mereka harus muncul seperti sebelum menjalankan skrip. Jika hasil pengujian Anda tidak memenuhi kriteria ini, pastikan Anda telah mengonfigurasi transfer dengan benar, tanpa menghilangkan bagian data penting, dan Anda juga menangani pembuatan ulang data yang di-cache yang Anda kecualikan dari transfer. Ulangi langkah 2-4 untuk setiap iterasi pengujian.
Memecahkan masalah pencadangan dan pemulihan
Bagian ini membantu Anda memecahkan masalah umum.
Kuota transport terlampaui
Pesan berikut di Logcat menunjukkan bahwa aplikasi Anda telah melampaui kuota transportasi:
I/PFTBT: Transport rejected backup of <PACKAGE>, skipping
--- or ---
I/PFTBT: Transport quota exceeded for package: <PACKAGE>
Kurangi jumlah data pencadangan, lalu coba lagi. Misalnya, verifikasi bahwa Anda hanya menyimpan ke cache data dalam direktori cache aplikasi Anda. Direktori cache tersebut tidak disertakan dalam backup.
Pencadangan penuh tidak dimungkinkan
Pesan berikut di Logcat menunjukkan bahwa operasi pencadangan penuh gagal karena belum ada operasi pencadangan key-value yang terjadi di perangkat:
I/BackupManagerService: Full backup not currently possible -- key/value backup
not yet run?
Picu pencadangan nilai kunci dengan perintah bmgr run
, lalu coba lagi.
Waktu habis menunggu agen
Pesan berikut di Logcat menunjukkan bahwa aplikasi Anda memerlukan lebih dari 10 detik untuk diluncurkan guna mencadangkan:
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
Perhatikan perbedaan stempel waktu dalam output log. Error ini biasanya terjadi saat aplikasi Anda menggunakan konfigurasi multidex tanpa ProGuard.
Akun pencadangan tidak diinisialisasi
Pesan berikut di Logcat menunjukkan bahwa pencadangan dihentikan karena set data pencadangan tidak diinisialisasi:
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
Jalankan
backup manager dengan perintah adb shell bmgr run
, lalu coba
lakukan pencadangan lagi.
Metode aplikasi tidak dipanggil
Karena Auto Backup meluncurkan aplikasi Anda dengan class dasar Application
, metode penyiapan aplikasi Anda mungkin tidak dipanggil. Auto Backup juga tidak meluncurkan aktivitas aplikasi Anda, sehingga Anda mungkin melihat error jika aplikasi Anda disiapkan di aktivitas. Untuk mempelajari lebih lanjut, baca Menerapkan BackupAgent.
Sebaliknya, pencadangan key-value meluncurkan aplikasi Anda dengan subclass Application
mana pun yang Anda deklarasikan di file manifes aplikasi.
Tidak ada data untuk dicadangkan
Pesan berikut di Logcat menunjukkan bahwa aplikasi Anda tidak memiliki data untuk dicadangkan:
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.
Jika Anda menerapkan BackupAgent
sendiri, kemungkinan
Anda belum menambahkan data atau file apa pun ke pencadangan.