Auto Backup untuk Aplikasi secara otomatis mencadangkan data pengguna dari aplikasi yang menargetkan dan berjalan pada Android 6.0 (API level 23) atau yang lebih baru. Android menyimpan data aplikasi dengan menguploadnya ke Google Drive pengguna—yang dilindungi oleh kredensial Akun Google pengguna. Jumlah data dibatasi maksimal 25 MB per pengguna aplikasi Anda dan tidak ada biaya untuk menyimpan data cadangan. Aplikasi Anda dapat menyesuaikan proses pencadangan atau menolaknya dengan menonaktifkan pencadangan.
Untuk ringkasan opsi pencadangan Android dan panduan tentang data apa saja yang harus dicadangkan dan dipulihkan, lihat ringkasan pencadangan data.
File yang dicadangkan
Secara default, Auto Backup menyertakan file di sebagian besar direktori yang ditetapkan oleh sistem ke aplikasi Anda:
- File preferensi berbagi.
- File yang disimpan ke penyimpanan internal aplikasi Anda, yang diakses oleh
getFilesDir()
ataugetDir(String, int)
. - File dalam direktori yang ditampilkan oleh
getDatabasePath(String)
, yang juga mencakup file yang dibuat dengan classSQLiteOpenHelper
. - File pada penyimpanan eksternal di direktori yang ditampilkan oleh
getExternalFilesDir(String)
.
Auto Backup tidak menyertakan file dalam direktori yang ditampilkan oleh getCacheDir()
, getCodeCacheDir()
, atau getNoBackupFilesDir()
. File yang disimpan di lokasi ini hanya diperlukan sementara, atau sengaja tidak disertakan dalam operasi pencadangan.
Anda dapat mengonfigurasi aplikasi agar menyertakan dan mengecualikan file tertentu. Untuk informasi selengkapnya, lihat bagian Menyertakan dan mengecualikan file.
Catatan: Android tidak memperlakukan konfigurasi komponen sebagai data pengguna. Jika aplikasi Anda mengaktifkan atau menonaktifkan komponen tertentu dalam manifesnya saat sedang berjalan, jangan berharap Auto Backup akan menyimpan dan memulihkan konfigurasi. Untuk mempertahankan status konfigurasi, simpan di Preferensi Bersama dan pulihkan Preferensi Bersama saat pemulihan. Jika Anda ingin aplikasi Anda menyimpan statusnya, simpan status di Preferensi Bersama dan pulihkan Preferensi Bersama saat pemulihan.
Lokasi cadangan
Data cadangan disimpan dalam folder pribadi di akun Google Drive pengguna, yang dibatasi hingga 25 MB per aplikasi. Data yang disimpan tidak memengaruhi kuota pribadi Google Drive pengguna. Hanya cadangan terbaru yang disimpan. Saat cadangan dibuat, cadangan sebelumnya (jika ada) akan dihapus. Data cadangan tidak dapat dibaca oleh pengguna atau aplikasi lain di perangkat.
Pengguna dapat melihat daftar aplikasi yang telah dicadangkan di aplikasi Android Google Drive. Pada perangkat yang menjalankan Android, pengguna dapat menemukan daftar ini di panel navigasi aplikasi Drive pada Setelan > Cadangan dan setel ulang > Data aplikasi.
Cadangan dari setiap perangkat-penyiapan-masa pakai disimpan dalam set data terpisah, seperti yang ditunjukkan dalam contoh berikut:
- Jika pengguna memiliki dua perangkat, maka set data cadangan akan dibuat untuk setiap perangkat.
- Jika pengguna menyetel ulang perangkat ke setelan pabrik, lalu menyiapkannya dengan akun yang sama, maka cadangan akan disimpan dalam set data baru. Set data lama otomatis dihapus setelah tidak aktif selama beberapa waktu.
Jadwal pencadangan
Backup otomatis terjadi saat semua kondisi berikut terpenuhi:
- Pengguna telah mengaktifkan backup di perangkatnya. Pada Android 9, setelan ini ada di Setelan > Sistem > Pencadangan.
- Minimal 24 jam telah berlalu sejak pencadangan terakhir.
- Perangkat sedang tidak digunakan.
- Perangkat tersambung ke jaringan Wi-Fi (jika pengguna perangkat belum memilih untuk menjalankan pencadangan menggunakan data seluler).
Dalam praktiknya, kondisi ini terjadi kira-kira setiap malam, tetapi mungkin juga perangkat tidak pernah menjalankan pencadangan (misalnya, jika tidak pernah terhubung ke jaringan). Untuk menghemat bandwidth jaringan, upload hanya terjadi jika data aplikasi telah berubah.
Selama Auto Backup, sistem akan menghentikan aplikasi untuk memastikan tidak ada operasi tulis yang dilakukannya ke sistem file. Secara default, aplikasi yang berjalan di latar depan akan diabaikan karena pengguna akan mengetahui kalau aplikasinya sedang dihentikan. Anda dapat mengganti perilaku default ini dengan menetapkan atribut backupInForeground
ke true.
Untuk menyederhanakan pengujian, Android menyertakan alat yang memungkinkan Anda memulai pencadangan aplikasi secara manual. Untuk informasi selengkapnya, lihat Pengujian pencadangan dan pemulihan.
Jadwal pemulihan
Data dipulihkan setiap kali aplikasi diinstal, entah dari Play Store, selama penyiapan perangkat (saat sistem menginstal aplikasi yang pernah diinstal sebelumnya), atau dari menjalankan adb install. Operasi pemulihan terjadi setelah APK diinstal, tetapi sebelum aplikasi dapat diluncurkan oleh pengguna.
Selama wizard penyiapan perangkat awal, daftar set data cadangan yang tersedia akan ditampilkan kepada pengguna diikuti pertanyaan dari set data cadangan mana data akan dipulihkan. Set data cadangan yang dipilih akan menjadi set data ancestral untuk perangkat tersebut. Perangkat dapat menjalankan pemulihan dari cadangannya sendiri atau set data ancestral. Cadangan sendiri akan diprioritaskan jika cadangan dari kedua sumber tersedia. Jika pengguna tidak memanfaatkan wizard penyiapan perangkat, maka perangkat hanya dapat dipulihkan dari pencadangannya sendiri.
Untuk menyederhanakan pengujian, Android menyertakan alat yang memungkinkan Anda memulai pemulihan aplikasi secara manual. Untuk informasi selengkapnya, lihat Menguji pencadangan dan pemulihan.
Mengaktifkan dan menonaktifkan pencadangan
Aplikasi yang menargetkan Android 6.0 (API level 23) atau yang lebih baru otomatis mengimplementasikan Auto Backup. Di file manifes aplikasi, tetapkan nilai boolean android:allowBackup
untuk mengaktifkan atau menonaktifkan pencadangan. Nilai defaultnya adalah true
, tetapi untuk memperjelas niat Anda, sebaiknya setel atribut secara eksplisit dalam manifes seperti yang ditampilkan di bawah:
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
Anda dapat menonaktifkan pencadangan dengan menyetel android:allowBackup
ke false
. Anda mungkin perlu menggunakan opsi ini jika aplikasi Anda dapat membuat ulang statusnya melalui mekanisme lain, atau jika aplikasi Anda menangani informasi sensitif yang tidak boleh dicadangkan oleh Android.
Menyertakan dan mengecualikan file
Secara default, sistem mencadangkan hampir semua data aplikasi. Untuk informasi selengkapnya, lihat File yang dicadangkan. Bagian ini menunjukkan cara menetapkan aturan XML kustom untuk mengontrol file apa saja yang dicadangkan.
- Dalam
AndroidManifest.xml
, tambahkan atributandroid:fullBackupContent
ke elemen<application>
. Atribut ini mengarah ke file XML yang memuat aturan pencadangan. Contoh:<application ... android:fullBackupContent="@xml/my_backup_rules"> </application>
- Buat file XML bernama
my_backup_rules.xml
di direktorires/xml/
. Di dalam file ini, tambahkan aturan dengan elemen<include>
dan<exclude>
. Contoh berikut mencadangkan semua preferensi bersama kecualidevice.xml
:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </full-backup-content>
Sintaksis konfigurasi XML
Sintaksis XML untuk file konfigurasi ditunjukkan di bawah ini:
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> </full-backup-content>
Di dalam tag <full-backup-content>
, Anda dapat menentukan elemen <include>
dan <exclude>
:
-
<include>
- Menentukan file atau folder yang akan dicadangkan. Secara default, Auto Backup menyertakan hampir semua file aplikasi. Jika Anda menentukan elemen <include>, sistem tidak lagi menyertakan semua file secara default dan mencadangkan hanya file yang ditentukan. Untuk menyertakan beberapa file, gunakan beberapa elemen <include>.Catatan: File dalam direktori yang ditampilkan oleh
getCacheDir()
,getCodeCacheDir()
, ataugetNoBackupFilesDir()
selalu dikecualikan sekalipun Anda mencoba untuk menyertakannya. -
<exclude>
- Menentukan file atau folder yang akan dikecualikan selama proses pencadangan. Berikut ini beberapa file yang biasanya dikecualikan dari pencadangan:- File yang menyimpan ID khusus perangkat, baik yang diterbitkan oleh server maupun yang dihasilkan pada perangkat. Misalnya, Google Cloud Messaging (GCM) perlu membuat token registrasi setiap kali pengguna menginstal aplikasi Anda di perangkat baru. Jika token registrasi lama dipulihkan, aplikasi mungkin menampilkan perilaku yang tidak terduga.
- Kredensial akun atau informasi sensitif lainnya. Sebaiknya minta pengguna agar menjalankan autentikasi ulang saat pertama kali meluncurkan aplikasi yang dipulihkan, bukannya mengizinkan penyimpanan informasi tersebut dalam file cadangan.
- File yang terkait dengan proses debug aplikasi.
- File besar yang menyebabkan aplikasi melebihi kuota backup 25 MB.
Catatan: Jika file konfigurasi Anda menentukan kedua elemen, maka cadangan akan memuat apa saja yang diambil oleh elemen <include>
dikurangi resource yang disebutkan dalam elemen <exclude>
. Dengan kata lain, <exclude>
lebih diprioritaskan.
Setiap elemen harus menyertakan dua atribut berikut:
-
domain
- menentukan lokasi resource. Nilai yang valid untuk atribut ini meliputi:root
- direktori pada sistem file tempat semua file pribadi milik aplikasi ini disimpan.file
- direktori yang ditampilkan olehgetFilesDir()
.-
database
- direktori yang ditampilkan olehgetDatabasePath()
. Database yang dibuat denganSQLiteOpenHelper
disimpan di sini. -
sharedpref
- direktori tempatSharedPreferences
disimpan. -
external
direktori yang ditampilkan olehgetExternalFilesDir()
-
path
: Menentukan file atau folder yang disertakan atau dikecualikan dari pencadangan. Perhatikan bahwa:- Atribut ini tidak mendukung sintaks karakter pengganti atau regex.
- Anda dapat menggunakan
.
untuk merujuk direktori saat ini, tetapi, Anda tidak dapat merujuk direktori induk..
untuk alasan keamanan. - Jika Anda menentukan direktori, maka aturan tersebut berlaku pada semua file dalam direktori dan sub-direktori rekursif.
Catatan: Anda tidak dapat mem-backup file di luar lokasi ini.
Elemen include
juga dapat berisi atribut requireFlags
, yang akan dibahas lebih mendalam pada bagian cara menetapkan persyaratan kondisi pencadangan di bawah ini.
Menetapkan kondisi perangkat yang diperlukan untuk pencadangan
Jika aplikasi Anda menyimpan informasi sensitif pada perangkat, Anda dapat menentukan kondisi yang mengatur penyertaan data aplikasi Anda dalam cadangan pengguna. Anda dapat menambahkan kondisi berikut pada Android 9 (API level 28) atau yang lebih baru:
clientSideEncryption
: Cadangan pengguna dienkripsi dengan rahasia sistem klien. Bentuk enkripsi ini diaktifkan pada perangkat yang menjalankan Android 9 atau yang lebih tinggi dengan syarat pengguna telah mengaktifkan pencadangan pada Android 9 atau yang lebih baru dan telah menetapkan kunci layar (PIN, pola, atau sandi) pada perangkat mereka.deviceToDeviceTransfer
: Pengguna mentransfer cadangan mereka ke perangkat lain yang mendukung transfer perangkat ke perangkat lokal (misalnya, Google Pixel).
Jika sudah mengupgrade perangkat pengembangan ke Android 9, Anda perlu menonaktifkan lalu mengaktifkan kembali pencadangan data setelah proses upgrade. Hal ini karena Android hanya mengenkripsi cadangan dengan rahasia sistem klien setelah memberi tahu pengguna melalui Setelan atau Wizard Penyiapan.
Untuk mendeklarasikan kondisi penyertaan, tetapkan atribut requireFlags
ke nilai yang diinginkan atau nilai pada elemen <include>
dalam kumpulan aturan pencadangan:
my_backup_rules.xml
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /> <full-backup-content>
Jika aplikasi Anda mengimplementasikan sistem pencadangan nilai kunci, atau jika Anda mengimplementasikan BackupAgent sendiri, Anda juga dapat menerapkan persyaratan kondisi ini ke logika pencadangan dengan menjalankan perbandingan tingkat bit antara kumpulan flag transport BackupDataOutput
pada objek dengan flag FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
atau FLAG_DEVICE_TO_DEVICE_TRANSFER
pada agen cadangan kustom.
Cuplikan kode berikut menunjukkan contoh penggunaan metode ini:
Kotlin
class MyCustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here. }
Java
public class MyCustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here. }
Mengimplementasikan BackupAgent
Aplikasi yang menerapkan Auto Backup tidak perlu menerapkan file BackupAgent
. Namun, Anda dapat mengimplementasikan BackupAgent
kustom secara opsional. Biasanya, ada dua alasan untuk menggunakan opsi ini:
- Anda ingin menerima notifikasi peristiwa pencadangan seperti,
onRestoreFinished()
atauonQuotaExceeded(long, long)
. Metode callback ini dijalankan sekalipun aplikasi tidak berjalan. - Anda tidak dapat menyatakan dengan mudah kumpulan file yang ingin Anda cadangkan dengan aturan XML. Dalam kasus yang jarang terjadi ini, Anda dapat mengimplementasikan BackupAgent sebagai pengganti
onFullBackup(FullBackupDataOutput)
untuk menyimpan file yang Anda inginkan. Untuk mempertahankan implementasi default sistem, panggil metode terkait pada superclass dengansuper.onFullBackup()
.
Jika Anda mengimplementasikan BackupAgent, secara default sistem mengharapkan aplikasi Anda menjalankan pencadangan dan pemulihan nilai/kunci. Untuk menggunakan Auto Backup berbasis file sebagai gantinya, tetapkan atribut android:fullBackupOnly
ke true
dalam manifes aplikasi Anda.
Selama operasi pencadangan dan pemulihan otomatis, sistem meluncurkan aplikasi dalam mode terbatas agar aplikasi tidak mengakses file yang dapat menyebabkan konflik dan untuk mengizinkan aplikasi menjalankan metode callback dalam BackupAgent
-nya. Dalam mode terbatas ini, aktivitas utama aplikasi tidak otomatis diluncurkan, Penyedia Kontennya tidak diinisialisasi, Application
class dasar tidak dibuatkan instance sebagai ganti subclass yang dinyatakan dalam manifest aplikasi.
Perhatian: Untuk menghindari error, pastikan bagian aplikasi yang berjalan dalam mode terbatas (kemungkinan besar BackupAgent
) tidak mengakses penyedia konten dalam aplikasi yang sama atau mencoba mentransmisikan objek Application
.
Jika Anda tidak dapat menghindari pola tersebut, sebaiknya implementasikan Pencadangan Nilai/Kunci atau nonaktifkan pencadangan sepenuhnya.
BackupAgent
Anda harus mengimplementasikan metode abstrak di onBackup()
dan onRestore()
, yang digunakan untuk pencadangan nilai kunci. Namun, jika tidak ingin menjalankan pencadangan nilai kunci, Anda dapat membiarkan implementasi metode tersebut kosong.
Untuk informasi selengkapnya, baca Memperluas BackupAgent.