Menguji backup dan pemulihan

Halaman ini menunjukkan cara memicu operasi pencadangan dan pemulihan secara manual dengan Auto Backup dan Key/Value Backup untuk memastikan aplikasi Anda menyimpan dan memulihkan data dengan benar.

Cara kerja pencadangan

Halaman ini menjelaskan berbagai bagian dalam framework pencadangan Android dan caranya berinteraksi dengan aplikasi yang mendukung Auto Backup dan Key/Value Backup. 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 tersebut merupakan hal penting.

Diagram berikut mengilustrasikan bagaimana alur data selama pencadangan dan pemulihan: framework pencadangan

Backup Manager Service adalah layanan sistem Android yang mengatur dan memulai operasi pencadangan dan pemulihan. Layanan ini dapat diakses melalui API BackupManager. Selama operasi pencadangan, layanan tersebut akan mengkueri aplikasi Anda untuk pencadangan data, lalu meneruskannya ke backup transport, yang kemudian mengarsipkan data tersebut. Selama operasi pemulihan, Backup Manager Service akan mengambil data cadangan dari backup transport dan memulihkan data tersebut ke perangkat.

Backup Transport adalah komponen Android yang bertanggung jawab untuk menyimpan dan mengambil cadangan. Perangkat Android dapat memiliki nol atau beberapa backup transport, tetapi hanya satu dari transport tersebut yang dapat ditandai sebagai aktif. Backup transport yang tersedia mungkin berbeda di setiap perangkat (karena penyesuaian oleh produsen perangkat dan penyedia layanan). Namun, sebagian besar perangkat berfitur Google Play dikirimkan dengan transport berikut:

  • Google Transport(default) - backup transport aktif di sebagian besar perangkat, dan merupakan bagian dari Layanan Seluler Google. Dokumentasi ini mengasumsikan bahwa pengguna menggunakan Google transport. Transport ini menyimpan data Auto Backup dalam folder pribadi di akun Google Drive pengguna. Data Key/Value backup disimpan di Android Backup Service.
  • Transport Lokal - menyimpan data pencadangan secara lokal di perangkat. Transport ini biasanya digunakan untuk tujuan pengembangan/proses debug dan tidak berguna di situasi sebenarnya.

Jika perangkat tidak memiliki backup transport, maka datanya tidak dapat dicadangkan. Aplikasi Anda tidak akan terpengaruh.

Perhatian: Karena backup transport dapat berbeda di setiap perangkat, Android tidak dapat menjamin keamanan data Anda saat menggunakan pencadangan. Berhati-hatilah saat menggunakan pencadangan untuk menyimpan data sensitif, seperti nama pengguna dan sandi.

Prasyarat

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 operasi pencadangan dan pemulihan.

Menyiapkan perangkat atau emulator

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 Key/Value Backup, pastikan Anda menggunakan perangkat atau emulator yang menjalankan Android 2.2 (API level 8) atau yang lebih tinggi.
  • Pastikan apakah pencadangan dan pemulihan diaktifkan pada perangkat atau emulator serta apakah Akun Google telah ditambahkan. Ada dua cara untuk memeriksanya:
    • Bergantung pada versi perangkat, Anda dapat membuka Setelan > Pencadangan & Pemulihan, atau cukup telusuri Pencadangan di kotak penelusuran di bagian atas layar.
    • Dari adb shell, jalankan bmgr enabled

    Pada perangkat fisik, pencadangan dan pemulihan biasanya diaktifkan selama wizard penyiapan awal. Emulator tidak menjalankan wizard penyiapan, jadi jangan lupa untuk mengaktifkan pencadangan dan menentukan akun pencadangan di setelan perangkat.

  • Pastikan Google Backup Transport tersedia dan aktif dengan menjalankan perintah:
    adb shell bmgr list transports
    

    Kemudian, periksa konsol untuk output seperti berikut:

    android/com.android.internal.backup.LocalTransport
    * com.google.android.gms/.backup.BackupTransportService
    

Perangkat fisik tanpa Google Play dan emulator tanpa API Google mungkin tidak menyertakan Google Backup Transport. Artikel ini mengasumsikan bahwa Anda menggunakan Google Backup Transport. Anda dapat menguji pencadangan dan pemulihan dengan backup transport lainnya, tetapi prosedur dan outputnya dapat berbeda.

Menguji pencadangan

Untuk memulai pencadangan aplikasi Anda, jalankan perintah berikut:

adb shell bmgr backupnow <PACKAGE>

Perintah backupnow tersedia di perangkat dan emulator yang menjalankan Android 7.0 atau yang lebih baru. Perintah ini menjalankan Key/Value Backup atau Auto Backup bergantung pada deklarasi manifes paket. Periksa logcat untuk melihat output prosedur pencadangan. Contoh:

D/BackupManagerService: fullTransportBackup()
I/GmsBackupTransport: Attempt to do full backup on <PACKAGE>

---- or ----

V/BackupManagerService: Scheduling immediate backup pass
D/PerformBackupTask: starting key/value Backup of BackupRequest{pkg=<PACKAGE>}

Jika perintah backupnow tidak tersedia di perangkat Anda, selesaikan langkah-langkah berikut untuk Auto Backup atau Key/Value Backup.

Untuk Auto Backup, selesaikan langkah-langkah berikut:

  1. Jalankan perintah berikut:
    adb shell bmgr backup @pm@ && adb shell bmgr run
    
  2. Tunggu hingga perintah di langkah sebelumnya selesai dengan memantau adb logcat untuk output berikut:
    I/BackupManagerService: K/V backup pass finished.
    
  3. Jalankan perintah berikut untuk menjalankan pencadangan lengkap:
    adb shell bmgr fullbackup <PACKAGE>
    

Catatan: Perintah fullbackup akan memaksa aplikasi Anda untuk menjalankan pencadangan penuh, meskipun aplikasi Anda mengimplementasikan key/value backup. Sistem akan mengabaikan konfigurasi pencadangan aplikasi dan berfungsi seolah-olah atribut android:fullBackupOnly ditetapkan ke true.

Untuk Key/Value Backups, jadwalkan dan jalankan pencadangan dengan langkah-langkah berikut:

  1. Jika aplikasi Anda belum dipanggil BackupManager.dataChanged() sejak pencadangan terakhir, Anda dapat menyertakan aplikasi Anda dalam operasi pencadangan untuk tujuan pengujian dengan menjalankan perintah berikut:
    adb shell bmgr backup <PACKAGE>
    
  2. Anda kemudian dapat memicu pencadangan dengan menjalankan perintah berikut:
    adb shell bmgr run
    

bmgr backup akan menambahkan aplikasi ke antrean Backup Manager. bmgr run menginisiasi operasi pencadangan, yang memaksa Backup Manager menjalankan semua permintaan pencadangan yang ada di dalam antreannya.

Saat menguji Key/Value Backup, Anda harus memverifikasi bahwa setiap perubahan preferensi akan menjadwalkan suatu pencadangan. Anda dapat memverifikasi bahwa pencadangan dijadwalkan menggunakan salah satu metode berikut:

  • Jalankan adb shell dumpsys backup dan periksa apakah aplikasi Anda tercantum dalam output perintah di bawah Pending key/value backup.
  • Catat pesan saat Anda menjadwalkan pencadangan. Kemudian, Anda dapat menjalankan adb logcat, dan memeriksa output perintah untuk memverifikasi bahwa pencadangan telah dijadwalkan.

Menguji pemulihan

Untuk memulai pemulihan secara manual, jalankan perintah berikut dengan token pencadangan (lihat cara mendapatkannya di bawah):

adb shell bmgr restore <TOKEN> <PACKAGE>

Untuk mencari token pencadangan, jalankan adb shell dumpsys backup. Token tersebut adalah string heksadesimal yang mengikuti label Ancestral: dan Current:. Token ancestral merujuk pada set data pencadangan yang digunakan untuk memulihkan perangkat saat pertama kali disiapkan (dengan wizard penyiapan perangkat). Token current merujuk ke set data pencadangan perangkat saat ini (set data yang saat ini digunakan perangkat untuk mengirimkan data cadangannya).

Kemudian, periksa logcat untuk melihat output dari prosedur pemulihan. Contoh:

V/BackupManagerService: beginRestoreSession: pkg=<PACKAGE> transport=null
V/RestoreSession: restorePackage pkg=<PACKAGE> token=368abb4465c5c683
...
I/BackupManagerService: Restore complete.

Anda dapat menguji pemulihan otomatis untuk aplikasi dengan meng-uninstal dan menginstal ulang aplikasi menggunakan adb atau melalui aplikasi Google Play Store.

Pemecahan masalah

Bagian ini membantu Anda memecahkan masalah umum.

Kuota transport terlampaui

Jika Anda melihat pesan berikut di logcat:

I/PFTBT: Transport rejected backup of <PACKAGE>, skipping

--- or ---

I/PFTBT: Transport quota exceeded for package: <PACKAGE>

Aplikasi Anda telah melampaui kuota. Kurangi jumlah data pencadangan dan coba lagi. Misalnya, verifikasi bahwa Anda hanya menyimpan ke cache data dalam direktori cache aplikasi. Direktori cache tersebut tidak disertakan dalam backup.

Pencadangan penuh tidak dimungkinkan

Jika Anda melihat pesan berikut di logcat:

I/BackupManagerService: Full backup not currently possible -- key/value backup not yet run?

Operasi pencadangan penuh gagal karena tidak ada operasi Key/Value Backup yang terjadi di perangkat. Picu Key/Value Backup dengan perintah bmgr run, lalu coba lagi.

Waktu habis menunggu agen

Jika Anda melihat pesan berikut di logcat:

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

Aplikasi Anda memerlukan lebih dari 10 detik untuk diluncurkan guna mencadangkan. Perhatikan perbedaan stempel waktu dalam output log. Error ini biasanya terjadi saat aplikasi Anda menggunakan konfigurasi multidex tanpa ProGuard.

Akun cadangan tidak diinisialisasi

Jika Anda melihat pesan berikut di 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

Pencadangan dibatalkan karena set data pencadangan tidak diinisialisasi. 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, Key/Value Backup tidak meluncurkan aplikasi Anda dengan subclass Application mana pun yang Anda deklarasikan di file manifes aplikasi.