Auto Backup untuk Aplikasi otomatis mencadangkan data pengguna dari aplikasi yang menargetkan dan berjalan pada Android 6.0 (API level 23) atau yang lebih tinggi. Android menyimpan data aplikasi dengan menguploadnya ke Google Drive pengguna, yang dilindungi oleh kredensial Akun Google pengguna. Cadangan dienkripsi menyeluruh pada perangkat yang menjalankan Android 9 atau yang lebih baru menggunakan PIN, pola, atau sandi perangkat. Setiap aplikasi dapat mengalokasikan hingga 25 MB data cadangan per pengguna aplikasi. Menyimpan data cadangan tidak dikenai biaya. Aplikasi Anda dapat menyesuaikan proses pencadangan atau memilih untuk tidak menggunakannya dengan menonaktifkan pencadangan.
Untuk ringkasan mengenai opsi pencadangan Android dan panduan terkait data apa saja yang sebaiknya dicadangkan dan dipulihkan, baca ringkasan pencadangan data.
File yang dicadangkan
Secara default, Pencadangan Otomatis menyertakan file di sebagian besar direktori yang ditetapkan oleh sistem ke aplikasi Anda:
File preferensi bersama
File yang disimpan ke penyimpanan internal aplikasi Anda dan diakses oleh
getFilesDir()ataugetDir(String, int)File dalam direktori yang ditampilkan oleh
getDatabasePath(String), yang juga mencakup file yang dibuat dengan classSQLiteOpenHelperFile di penyimpanan eksternal di direktori yang ditampilkan oleh
getExternalFilesDir(String)
Pencadangan Otomatis mengecualikan file di direktori yang ditampilkan oleh getCacheDir(),
getCodeCacheDir(), dan getNoBackupFilesDir(). File yang disimpan di lokasi ini hanya diperlukan sementara dan sengaja dikecualikan dalam operasi pencadangan.
Anda dapat mengonfigurasi aplikasi agar menyertakan dan mengecualikan file tertentu. Untuk mengetahui informasi selengkapnya, lihat bagian Menyertakan dan mengecualikan file.
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 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 > Cadangkan dan reset.
Cadangan dari setiap perangkat-penyiapan-masa pakai disimpan dalam set data terpisah, seperti dijelaskan dalam contoh berikut:
Jika pengguna memiliki dua perangkat, set data cadangan akan dibuat untuk setiap perangkat.
Jika pengguna mereset 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
Pencadangan otomatis terjadi saat semua kondisi berikut terpenuhi:
- Pengguna telah mengaktifkan pencadangan di perangkatnya. Pada Android 9, setelan ini ada di Setelan > Sistem > Pencadangan.
- Minimal 24 jam telah berlalu sejak pencadangan terakhir.
- Tidak ada aktivitas pada perangkat.
- 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 Pencadangan Otomatis, sistem akan menghentikan aplikasi untuk memastikan tidak ada lagi operasi tulis yang dilakukannya ke sistem file. Secara default, sistem pencadangan mengabaikan aplikasi yang
berjalan di latar depan untuk menghindari pengalaman pengguna yang buruk. Anda dapat mengganti
perilaku default dengan menyetel atribut android:backupInForeground ke
benar (true).
Untuk menyederhanakan pengujian, Android menyertakan alat yang memungkinkan Anda memulai pencadangan aplikasi secara manual. Untuk informasi selengkapnya, lihat Menguji pencadangan dan pemulihan.
Jadwal pemulihan
Data dipulihkan setiap kali aplikasi diinstal, baik dari Play Store,
selama penyiapan perangkat (saat sistem menginstal aplikasi yang pernah diinstal sebelumnya), atau dengan
menjalankan penginstalan adb. 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 melakukan pemulihan dari cadangannya sendiri atau set data ancestral. Jika cadangan dari kedua sumber tersedia, perangkat akan memprioritaskan cadangannya sendiri. Jika pengguna tidak memanfaatkan wizard penyiapan perangkat, maka perangkat hanya dapat dipulihkan dari cadangannya 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 (level API 23) atau yang lebih baru otomatis mengimplementasikan
Pencadangan Otomatis. Di file manifes aplikasi, tetapkan nilai boolean android:allowBackup untuk mengaktifkan atau menonaktifkan pencadangan. Nilai defaultnya adalah
true, tetapi sebaiknya setel atribut secara eksplisit dalam manifes Anda, seperti
yang ditunjukkan dalam contoh berikut:
<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.
Menyertakan dan mengecualikan file
Secara default, sistem mencadangkan hampir semua data aplikasi. Untuk mengetahui informasi selengkapnya, lihat bagian tentang file yang dicadangkan.
Anda dapat mengontrol data mana yang disertakan dalam cadangan berdasarkan jenis transfer.
Pencadangan Otomatis mendukung pencadangan cloud ke Google Drive dan transfer langsung dari perangkat ke perangkat (D2D). Metode konfigurasi bervariasi berdasarkan versi Android dan
targetSdkVersion aplikasi Anda.
- Untuk perangkat yang menjalankan Android 11 atau yang lebih lama, lihat Mengontrol pencadangan di Android 11 dan yang lebih lama.
- Untuk perangkat yang menjalankan Android 12 atau yang lebih tinggi, aplikasi yang menargetkan level API 31+ menggunakan
format
data-extraction-rules. Baca Mengontrol pencadangan di Android 12 atau yang lebih tinggi untuk mengetahui detailnya. - Format
data-extraction-rulesjuga mendukung Transfer Lintas Platform (misalnya, ke iOS). Kemampuan ini tersedia mulai dari Android 16 QPR2. Pelajari lebih lanjut di Mengonfigurasi Transfer Lintas Platform.
Mengontrol cadangan di Android 11 dan yang lebih lama
Ikuti langkah-langkah di bagian ini untuk mengontrol file mana yang dicadangkan di perangkat yang menjalankan Android 11 (level API 30) atau yang lebih rendah.
Dalam file
AndroidManifest.xmlAnda, tambahkan atributandroid:fullBackupContentke elemen<application>, seperti yang ditunjukkan dalam contoh berikut. Atribut ini mengarah ke file XML yang berisi aturan pencadangan.<application ... android:fullBackupContent="@xml/backup_rules"> </application>
Buat file XML bernama
@xml/backup_rulesdi direktorires/xml/. 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>
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 di Android 9 (level API 28) atau yang lebih tinggi:
clientSideEncryption: cadangan pengguna dienkripsi dengan secret sisi 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 tinggi 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 secret sisi klien setelah memberi tahu pengguna melalui Setelan atau wizard penyiapan.
Untuk mendeklarasikan kondisi penyertaan, tetapkan atribut requireFlags ke
nilai yang dipilih atau nilai pada elemen <include> dalam kumpulan aturan
pencadangan:
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 menerapkan sistem pencadangan key-value atau jika Anda menerapkan
BackupAgent sendiri, Anda juga dapat menerapkan persyaratan bersyarat ini
ke logika pencadangan dengan melakukan perbandingan bitwise antara
kumpulan flag transportasi objek BackupDataOutput dan flag FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED atau
FLAG_DEVICE_TO_DEVICE_TRANSFER agen pencadangan kustom Anda.
Cuplikan kode berikut menunjukkan contoh penggunaan metode ini:
Kotlin
class CustomBackupAgent : 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 CustomBackupAgent 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. }
Mengontrol cadangan di Android 12 atau yang lebih baru
Jika aplikasi Anda menargetkan Android 12 (level API 31) atau yang lebih baru, ikuti langkah-langkah di bagian ini untuk mengontrol file mana yang dicadangkan di perangkat yang menjalankan Android 12 atau yang lebih baru.
Dalam file
AndroidManifest.xmlAnda, tambahkan atributandroid:dataExtractionRuleske elemen<application>, seperti ditunjukkan dalam contoh berikut. Atribut ini mengarah ke file XML yang memuat aturan pencadangan.<application ... android:dataExtractionRules="backup_rules.xml"> </application>
Buat file XML bernama
backup_rules.xmldi direktorires/xml/. 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"?> <data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </cloud-backup> </data-extraction-rules>
Sintaksis konfigurasi XML
Sintaksis XML untuk file konfigurasi bervariasi bergantung pada versi Android yang ditargetkan dan dijalankan oleh aplikasi Anda.
Android 11 atau yang lebih lama
Gunakan sintaksis XML berikut untuk file konfigurasi yang mengontrol pencadangan untuk perangkat yang menjalankan Android 11 atau yang lebih lama.
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" /> </full-backup-content>
Android 12 atau yang lebih baru
Jika aplikasi Anda menargetkan Android 12 (level API 31) atau yang lebih baru, gunakan sintaksis XML berikut untuk file konfigurasi yang mengontrol pencadangan untuk perangkat yang menjalankan Android 12 atau yang lebih baru.
<data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </cloud-backup> <device-transfer> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </device-transfer> <cross-platform-transfer platform="ios"> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <platform-specific-params bundleId="string" teamId="string" contentVersion="string"/> ... </cross-platform-transfer> </data-extraction-rules>
Setiap bagian konfigurasi (<cloud-backup>, <device-transfer>,
<cross-platform-transfer>) berisi aturan yang hanya berlaku untuk jenis
transfer tersebut. Pemisahan ini memungkinkan Anda, misalnya, mengecualikan file atau direktori dari pencadangan Google Drive saat masih mentransfernya selama transfer antar-perangkat (D2D) atau transfer lintas platform. Hal ini berguna jika Anda memiliki file
berukuran terlalu besar untuk dicadangkan ke cloud, tetapi dapat ditransfer antar
perangkat tanpa masalah.
Jika tidak ada aturan untuk mode pencadangan tertentu, seperti jika
bagian <device-transfer> tidak ada, mode tersebut akan diaktifkan sepenuhnya untuk semua
konten kecuali untuk direktori no-backup dan cache, seperti yang dijelaskan di bagian
File yang dicadangkan.
Aplikasi Anda dapat menetapkan flag disableIfNoEncryptionCapabilities di
bagian <cloud-backup> untuk memastikan pencadangan hanya terjadi jika dapat
dienkripsi, seperti saat pengguna memiliki layar kunci. Menyetel batasan ini
akan mencegah cadangan dikirim ke cloud jika perangkat pengguna tidak dapat mendukung
enkripsi. Akan tetapi, karena transfer D2D tidak dikirim ke server, pencadangan akan terus berjalan, bahkan pada perangkat yang tidak mendukung enkripsi.
Sintaksis untuk elemen sertakan dan kecualikan
Di dalam tag <full-backup-content>, <cloud-backup>, dan <device-transfer> (bergantung pada versi Android perangkat dan targetSDKVersion
aplikasi), 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>.Di Android 11 dan yang lebih lama, elemen ini juga dapat berisi atribut
requireFlags, yang akan dibahas lebih mendetail pada bagian cara menentukan persyaratan kondisional untuk pencadangan.File di direktori yang ditampilkan oleh
getCacheDir(),getCodeCacheDir(), ataugetNoBackupFilesDir()selalu dikecualikan meskipun Anda mencoba 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, Firebase Cloud Messaging (FCM) perlu membuat token registrasi setiap kali pengguna menginstal aplikasi Anda di perangkat baru. Jika token pendaftaran lama dipulihkan, aplikasi mungkin menampilkan perilaku yang tidak terduga.
File yang terkait dengan proses debug aplikasi.
File besar yang menyebabkan aplikasi melebihi kuota pencadangan 25 MB.
Setiap elemen <include> dan <exclude> harus menyertakan dua atribut berikut:
domainMenentukan 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 denganSQLiteOpenHelperdisimpan di sini.sharedpref: direktori tempatSharedPreferencesdisimpan.external: direktori yang ditampilkan olehgetExternalFilesDir().device_root: sepertiroot, tetapi untuk penyimpanan yang dilindungi perangkat.device_file: sepertifile, tetapi untuk penyimpanan yang dilindungi perangkat.device_database: sepertidatabase, tetapi untuk penyimpanan yang dilindungi perangkat.device_sharedpref: sepertisharedpref, tetapi untuk penyimpanan yang dilindungi perangkat.
pathMenentukan file atau folder yang akan disertakan atau dikecualikan dari pencadangan. Perhatikan hal berikut:
- Atribut ini tidak mendukung sintaksis karakter pengganti atau ekspresi reguler.
- Anda dapat merujuk direktori saat ini menggunakan
./, tetapi Anda tidak dapat merujuk direktori induk, misalnya menggunakan.., karena alasan keamanan. - Jika Anda menentukan direktori, aturan tersebut akan berlaku pada semua file dalam direktori dan subdirektori berulang.
Mengonfigurasi Transfer Lintas Platform
Mulai dari Android 16 QPR2 (level API 36.1), Anda dapat mengonfigurasi Pencadangan Otomatis untuk transfer data ke dan dari perangkat non-Android. Untuk melakukannya, tambahkan elemen
<cross-platform-transfer> dalam konfigurasi <data-extraction-rules>
Anda, seperti yang ditunjukkan dalam sintaksis Android 12 atau yang lebih tinggi. Anda harus
menentukan platform target menggunakan atribut platform yang diperlukan. Satu-satunya
nilai yang didukung adalah ios.
Di dalam bagian ini, Anda dapat menggunakan elemen <include> dan <exclude> standar seperti yang dijelaskan dalam Sintaksis untuk elemen sertakan dan kecualikan untuk menentukan data mana yang akan ditransfer.
Selain itu, Anda harus menyertakan elemen <platform-specific-params> untuk membantu
sistem mencocokkan aplikasi Anda dengan aplikasi yang sesuai di platform target.
Elemen ini memiliki atribut wajib berikut:
bundleId: ID paket aplikasi di platform lain (misalnya, ID Paket aplikasi iOS Anda).teamId: ID tim aplikasi di platform lain (misalnya, ID Tim aplikasi iOS Anda).contentVersion: String versi yang Anda tentukan, terkait dengan format data yang diekspor.
Atribut bundleId dan teamId digunakan untuk membantu memverifikasi integritas data dan pencocokan aplikasi-ke-aplikasi yang tepat. Hal ini menjamin bahwa data hanya ditransfer
ke aplikasi yang ditentukan di platform lain selama ekspor, dan bahwa aplikasi
Android ini hanya mengimpor data dari aplikasi tertentu tersebut selama impor.
Untuk kontrol yang lebih terperinci atas proses transformasi dan transfer data di luar yang disediakan oleh aturan XML, Anda dapat menerapkan BackupAgent kustom dan menggunakan API Transfer Lintas Platform.
Pemetaan File untuk Transfer iOS
Saat mentransfer file ke iOS, domain dan path Android yang Anda tentukan dalam
aturan <include> dipetakan ke struktur direktori tertentu. Tabel berikut menunjukkan jalur tujuan di iOS relatif terhadap root tujuan transfer, berdasarkan domain Android:
Android domain |
Jalur di iOS (relatif terhadap root transfer) |
|---|---|
root |
app/ |
file |
app/files/ |
database |
app/databases/ |
sharedpref |
app/shared_prefs/ |
external |
external/files/ |
device_root |
device/app/ |
device_file |
device/app/files/ |
device_database |
device/app/databases/ |
device_sharedpref |
device/app/shared_prefs/ |
Misalnya, file yang disertakan dengan <include domain="file"
path="my_settings.txt"/> akan tersedia di sisi iOS di app/files/my_settings.txt relatif terhadap root tujuan transfer.
Mengimplementasikan BackupAgent
Aplikasi yang mengimplementasikan Pencadangan Otomatis tidak perlu mengimplementasikan 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()danonQuotaExceeded(). Metode callback ini akan tetap dieksekusi meskipun aplikasi tidak sedang berjalan.Anda tidak dapat mengekspresikan dengan mudah kumpulan file yang ingin Anda cadangkan dengan aturan XML. Dalam kasus yang jarang terjadi ini, Anda dapat mengimplementasikan
BackupAgentsebagai penggantionFullBackup(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 mungkin menyebabkan
konflik dan untuk memungkinkan aplikasi mengeksekusi metode callback dalam BackupAgent-nya. Dalam
mode terbatas ini, aktivitas utama aplikasi tidak otomatis diluncurkan, penyedia konten-nya tidak diinisialisasi, dan Application class dasar tidak dibuatkan instance sebagai ganti subclass yang dinyatakan dalam
manifes aplikasi.
BackupAgent Anda harus mengimplementasikan metode abstrak onBackup() dan
onRestore(), yang digunakan untuk pencadangan nilai kunci. Jika tidak ingin menjalankan pencadangan nilai kunci, Anda dapat membiarkan implementasi metode tersebut kosong.
Untuk mengetahui informasi selengkapnya, lihat Memperluas BackupAgent.
Menangani Transfer Lintas Platform di BackupAgent
Mulai dari Android 16 QPR2 (level API 36.1), beberapa API baru tersedia
di BackupAgent untuk mendukung transfer data lintas platform dengan lebih baik.
Flag Transportasi Baru:
FLAG_CROSS_PLATFORM_TRANSFER_IOS: Flag ini ditambahkan ketransportFlagsyang diberikan keBackupAgentAnda.- Di
onFullBackup, tanda ini disetel jika operasi pencadangan saat ini adalah bagian dari ekspor data ke perangkat iOS. - Dalam overload
onRestoreFilebaru, tanda ini disetel jika data sedang diimpor dari perangkat iOS.
- Di
Metode onRestoreFile Baru:
Overload baru onRestoreFile diperkenalkan, yang menggunakan satu parameter
FullRestoreDataInput. Objek ini memberikan lebih banyak konteks tentang
operasi pemulihan:
FullRestoreDataInput.getTransportFlags(): Menampilkan flag transportasi untuk operasi pemulihan saat ini, yang dapat mencakupFLAG_CROSS_PLATFORM_TRANSFER_IOS.FullRestoreDataInput.getContentVersion(): Menampilkan string versi konten yang disediakan oleh aplikasi sumber di platform lain selama transfer lintas platform. Nilai ini adalah string kosong jika tidak disediakan oleh sumber.
Metode Estimasi Ukuran Baru:
onEstimateFullBackupBytes(): Metode ini memungkinkan Anda memberikan perkiraan ukuran data yang akan dicadangkan oleh aplikasi Anda. Penerapan sangat direkomendasikan jika aplikasi Anda melakukan transformasi data yang signifikan selama pencadangan atau menangani data dalam jumlah besar, karena dapat meningkatkan efisiensi dengan menghindari uji coba sistem default. Untuk aplikasi dengan pencadangan kecil dan sederhana, metode ini biasanya tidak diperlukan.
Contoh Penggunaan:
Kotlin
// In your custom BackupAgent class
override fun onFullBackup(out: FullBackupDataOutput) {
// Check if this is a cross-platform export to iOS
if ((out.transportFlags and FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
Log.d(TAG, "onFullBackup for iOS transfer")
// Your custom export logic here
// Call fullBackupFile() for files to include
}
}
override fun onRestoreFile(input: FullRestoreDataInput) {
if ((input.transportFlags and FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
val sourceContentVersion = input.contentVersion
Log.d(TAG, "onRestoreFile from iOS, content version: $sourceContentVersion")
// Your custom import logic here, using input.data, input.destination, etc.
}
}
// Optional: Provide an estimate of the backup size
override fun onEstimateFullBackupBytes(): Long {
return calculateEstimatedBackupSize()
}
Java
// In your custom BackupAgent class
@Override
public void onFullBackup(FullBackupDataOutput out) throws IOException {
// Check if this is a cross-platform export to iOS
if ((out.getTransportFlags() & FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
Log.d(TAG, "onFullBackup for iOS transfer");
// Your custom export logic here
// Call fullBackupFile() for files to include
}
}
@Override
public void onRestoreFile(FullRestoreDataInput input) {
if ((input.getTransportFlags() & FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
String sourceContentVersion = input.getContentVersion();
Log.d(TAG, "onRestoreFile from iOS, content version: " + sourceContentVersion);
// Your custom import logic here, using input.getData(), input.getDestination(), etc.
}
}
// Optional: Provide an estimate of the backup size
@Override
public long onEstimateFullBackupBytes() {
return calculateEstimatedBackupSize();
}