backup de date de utilizator cu Auto Backup
Backup automat pentru aplicații Backup automat datele unui utilizator de la aplicații thattarget și rula pe Android 6.0 (nivel API 23) sau mai târziu. Android păstrează appdata încărcându—l pe Google Drive-ul utilizatorului-unde este protejat de acreditările contului Google al utilizatorului. Cantitatea de date este limitată la 25 MB peruser de aplicația dvs. și nu există nici o taxă pentru stocarea datelor de rezervă. Aplicația dvs. poateobișnuiți procesul de backup sau renunțați la dezactivarebackup-uri.
pentru o prezentare generală a opțiunilor de backup Android și îndrumări despre ce datear trebui să faceți backup și să restaurați, consultați backupoverview de date.
fișiere care sunt salvate
în mod implicit, Backup automat include fișiere în majoritatea directoarelor care sunt atribuite aplicației dvs. de către sistem:
- fișiere de preferințe partajate.
- fișiere salvate în memoria internă a aplicației dvs., accesate de
getFilesDir()
saugetDir(String, int)
. - fișiere din Directorul returnat de
getDatabasePath(String)
, care include, de asemenea, fișiere create cuSQLiteOpenHelper
clasă. - fișiere pe Stocare externă în directorul returnat de
getExternalFilesDir(String)
.
Backup-ul automat exclude fișierele din directoarele returnate degetCacheDir()
getCodeCacheDir()
saugetNoBackupFilesDir()
. Fișierele salvate în aceste locații sunt necesare doar temporar sau sunt excluse intenționat din operațiunile de backup.
puteți configura aplicația pentru a include și exclude anumite fișiere. Pentru mai multe informații, consultați secțiunea includere și excludere fișiere.
Notă: Android nu tratează configurația componentelor ca date de utilizator. Dacă aplicația dvs. activează sau dezactivează anumite componente din manifestul său în timp ce rulează, nu vă așteptați ca AutoBackup să salveze și să restaureze configurația. Pentru a păstra starea de configurare, salvați-o în Preferințe partajate și recuperați preferințele partajate la restaurare. Dacă doriți ca aplicația dvs. să-și salveze starea, stocați starea în Preferințe partajate și recuperați preferințele partajate la restaurare.
locația de Backup
datele de Backup sunt stocate într-un folder privat din Contul Google Drive al utilizatorului,limitat la 25 MB pe aplicație. Datele salvate nu sunt luate în considerare pentru utilizatorcota personală Google Drive. Numai cea mai recentă copie de rezervă este stocată. Când se face abackup, copia de rezervă anterioară (dacă există) este ștearsă. Datele de backup nu pot fi citite de utilizator sau de alte aplicații de pe dispozitiv.
utilizatorii pot vedea o listă de aplicații care au fost salvate în aplicația Google DriveAndroid. Pe un dispozitiv cu Android, utilizatorii pot găsi această listă în sertarul de navigare al Driveapp sub Setări > Backup și resetare > date despre Aplicații.
backup-urile de pe fiecare dispozitiv-setup-lifetime sunt stocate în seturi de date separate, așa cum se arată în următoarele exemple:
- dacă utilizatorul deține două dispozitive, atunci există un set de date de rezervă pentru fiecare dispozitiv.
- dacă Fabrica de utilizatori resetează un dispozitiv și apoi configurează dispozitivul cu același cont, copia de rezervă este stocată într-un nou set de date. Seturile de date învechite sunt șterse automat după o perioadă de inactivitate.
program Backup
backup-urile apar automat când sunt îndeplinite toate condițiile următoare:
- utilizatorul a activat backup-ul pe dispozitiv. În Android 9, această setare este înSetări > sistem > Backup.
- au trecut cel puțin 24 de ore de la ultima copie de rezervă.
- dispozitivul este inactiv.
- dispozitivul este conectat la o rețea Wi-Fi (dacă utilizatorul dispozitivului nu a optat pentru backup-uri de date mobile).
în practică, aceste condiții apar aproximativ în fiecare noapte, dar este posibil ca un dispozitiv să nu revină niciodată (de exemplu, dacă nu se conectează niciodată la o rețea). Pentru a conserva networkbandwidth, încărcarea are loc numai dacă datele aplicației s-au schimbat.
în timpul Backup-ului automat, sistemul oprește aplicația pentru a vă asigura că nu mai scrie în sistemul de fișiere. În mod implicit, sistemul de backup ignoră aplicațiile care rulează în prim-plan, deoarece utilizatorii ar observa că aplicațiile lor sunt închise. Puteți suprascrie comportamentul implicit setând atributulbackupInForeground
la true.pentru a simplifica testarea, Android include instrumente care vă permit să inițiați manual o copie de rezervă a aplicației. Pentru mai multe informații, consultați Test backup and restore.
program de restaurare
datele sunt restaurate ori de câte ori aplicația este instalată, fie din Play store, în timpul configurării dispozitivului (când sistemul instalează aplicațiile instalate anterior), fie din rularea ADB install. Operația de restaurare are loc după instalarea APK-ului, dar înainte ca aplicația să fie disponibilă pentru a fi lansată de utilizator.
în timpul expertului inițial de configurare a dispozitivului, utilizatorului i se afișează o listă de seturi de date de rezervă disponibile și este întrebat din care să restaureze datele. Oricare set de date de rezervă este selectat devine setul de date ancestral pentru dispozitiv. Dispozitivul poate restaura fie din propriile backup-uri, fie din setul de date ancestral. Dispozitivul prioritizează propria copie de rezervă dacă sunt disponibile copii de rezervă din ambele surse. Dacă utilizatorul nu a trecut prin expertul de configurare a dispozitivului, atunci dispozitivul poate restaura numai din propriile copii de rezervă.
pentru a simplifica testarea, Android include instrumente care vă permit să inițiați manual o restaurare a aplicației. Pentru mai multe informații, consultați Test backup and restore.
activați și dezactivați backup
aplicațiile care vizează Android 6.0 (nivel API 23) sau mai mare participă automatîn Backup automat. În fișierul manifest al aplicației, setați valoarea booleană android:allowBackup
pentru a activa sau dezactiva backup-ul. Valoarea implicită este true
dar pentru a vă clarifica intențiile, vă recomandăm să setați Explicit atributul în manifestele dvs. prezentate mai jos:
<manifest ... > ... <application android:allowBackup="true" ... > ... </application></manifest>
puteți dezactiva copiile de rezervă prin setareaandroid:allowBackup
lafalse
. S-ar putea să doriți să faceți acest lucru dacă aplicația dvs. își poate recrea starea printr-un alt mecanism sau dacă aplicația dvs. se ocupă de informații sensibile pe care Android nu ar trebui să le facă backup.
includeți și excludeți fișierele
în mod implicit, sistemul face backup pentru aproape toate datele aplicației. Pentru mai multe informații, consultați fișierele care sunt salvate. Această secțiune vă arată cum să definiți reguli XML personalizate pentru a controla ce se face backup.
- În
AndroidManifest.xml
, adăugațiandroid:fullBackupContent
atributul<application>
element. Acest atribut indică un fișier XML care conține reguli de rezervă. De exemplu:<application ... android:fullBackupContent="@xml/my_backup_rules"></application>
- creați un fișier XML numit
my_backup_rules.xml
în directorulres/xml/
. În interiorul fișierului, adăugați reguli cu<include>
și<exclude>
elemente.Următorul eșantion susține toate preferințele partajate, cu excepțiadevice.xml
<?xml version="1.0" encoding="utf-8"?><full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/></full-backup-content>
XML config syntax
The XML syntax for the configuration file is shown below:
<full-backup-content> <include domain= path="string" requireFlags= /> <exclude domain= path="string" /></full-backup-content>
Inside the <full-backup-content>
tag, you can define <include>
and <exclude>
elements:
-
<include>
– Specifies a file or folder to backup. By default, Auto Backup includes almost all app files. Dacă specificați un element <include>, sistemul nu mai include niciun fișier în mod implicit și face backup doar pentru fișierele specificate. Pentru a include mai multe fișiere, utilizați mai multe <includeți> elemente.notă: fișierele din directoarele returnate de
getCacheDir()
getCodeCacheDir()
saugetNoBackupFilesDir()
sunt întotdeauna excluse chiar dacă încercați să le includeți. -
<exclude>
– specifică un fișier sau un folder de exclus în timpul copierii de rezervă. Iată câteva fișiere care sunt de obicei excluse din backup:- fișiere care au identificatori specifici dispozitivului, fie emise de un server, fie generate pe dispozitiv. De exemplu, Google Cloud Messaging (GCM) trebuie să genereze un simbol de înregistrare de fiecare dată când un utilizator instalează aplicația pe un dispozitiv nou. Dacă vechiul jeton de înregistrare este restabilit, aplicația se poate comporta în mod neașteptat.
- acreditările contului sau alte informații sensibile. Luați în considerare solicitarea utilizatorului să reautentifice prima dată când lansează o aplicație restaurată, mai degrabă decât să permită stocarea unor astfel de informații în copia de rezervă.
- fișiere legate de depanarea aplicațiilor.
- fișiere mari care determină aplicația să depășească cota de rezervă de 25 MB.
Notă: Dacă fișierul dvs. de configurare specifică ambele elemente, atunci copia de rezervă conține tot ceea ce este capturat de<include>
elemente minus resursele numite în<exclude>
elemente. Cu alte cuvinte, <exclude>
are prioritate.
fiecare element trebuie să includă următoarele două atribute:
-
domain
– specifică locația resursei. Valorile valide pentru acest atribut includ următoarele:-
root
– directorul din sistemul de fișiere în care sunt stocate toate fișierele private aparținând acestei aplicații. -
file
– directoare returnate degetFilesDir()
. -
database
– directoare returnate degetDatabasePath()
. Bazele de date create cuSQLiteOpenHelper
sunt stocate aici. -
sharedpref
– directorul în careSharedPreferences
sunt stocate. -
external
directorul returnat degetExternalFilesDir()
-
-
path
: specifică un fișier sau un folder de inclus sau exclus din backup. Rețineți că:- acest atribut nu acceptă sintaxa wildcard sau regex.
- puteți utiliza
.
pentru a face referire la directorul curent, cu toate acestea, nu puteți face referire la directorul părinte..
din motive de securitate. - dacă specificați un director, atunci regula se aplică tuturor fișierelor din director și sub-directoarelor recursive.
notă: nu puteți face copii de rezervă ale fișierelor în afara acestor locații.
include
elementul poate conține, de asemenea,requireFlags
atribut, care thesection descrie modul de definire a cerințelor condiționale pentrusecțiunea de rezervă discută mai detaliat.
definiți condițiile dispozitivului necesare pentru backup
Dacă aplicația salvează informații sensibile pe dispozitiv, puteți specifica condițiile în care datele aplicației sunt incluse în backupul utilizatorului. Puteți adăuga următoarele condiții în Android 9 (nivel API 28) saude mai sus:
-
clientSideEncryption
: copia de rezervă a utilizatorului este criptată cu un client-sidesecret. Această formă de criptare este activată pe dispozitivele care rulează Android 9 orhigher,atâta timp cât utilizatorul a activat backup-ul în Android 9 orhigher și a setat ascreen lock (PIN, model sau parolă) pentru dispozitivul lor. -
deviceToDeviceTransfer
: utilizatorul își transferă copia de rezervă pe altuldispozitiv care acceptă transferul local de la dispozitiv la dispozitiv (de exemplu,Google Pixel).
Dacă ați actualizat dispozitivele de dezvoltare la Android 9, trebuie să dezactivați și apoi să reactivați backup-ul datelor după actualizare. Acest lucru se datorează faptului că numai Androidcriptează copiile de rezervă cu un secret din partea clientului după informarea utilizatorilor în Setări sauavizorul de configurare.
pentru a declara condițiile de includere, setați requireFlags
atributul valorii dorite sau valorilor din <include>
elemente din setul de reguli de backup:
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>
dacă aplicația implementează un sistem de backupsystem cheie-valoare, sau dacă implementBackupAgent-te,puteți aplica, de asemenea, aceste cerințe condiționale pentru logica de rezervă prin efectuarea unei comparații bit între unBackupDataOutput
set obiect de steaguri de transport și agentul de backup personalizatFLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
sau FLAG_DEVICE_TO_DEVICE_TRANSFER
steaguri.
următorul fragment de cod arată un exemplu de utilizare a acestei metode:
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.}
implementați BackupAgent
aplicațiile care implementează Backup automat nu trebuie să implementeze un BackupAgent
. Cu toate acestea, puteți implementa opțional un personalizat BackupAgent
. De obicei, există două motive pentru a face acest lucru:
- doriți să primiți notificări despre evenimente de rezervă, cum ar fi
onRestoreFinished()
sauonQuotaExceeded(long, long)
. Aceste metode de apel invers sunt executate chiar dacă aplicația nu rulează. - nu puteți exprima cu ușurință setul de fișiere pe care doriți să le copiați cu reguli XML. În aceste cazuri rare, puteți implementa un BackupAgent care înlocuiește
onFullBackup(FullBackupDataOutput)
pentru a stoca ceea ce doriți. Pentru a păstra implementarea implicită a sistemului, apelați metoda corespunzătoare pe superclasă cusuper.onFullBackup()
.
dacă implementați un BackupAgent, în mod implicit sistemul se așteaptă ca aplicația dvs. să efectueze backup și restaurare cheie / valoare. Pentru a utiliza copia de rezervă automată bazată pe fișiere, setați android:fullBackupOnly
atribut la true
în manifestul aplicației.
în timpul operațiunilor de backup și restaurare automată, sistemul lansează aplicația într-un mod restricționat pentru a împiedica aplicația să acceseze fișiere care ar putea provoca conflicte și pentru a permite aplicației să execute metode de apel invers înBackupAgent
. În acest mod restricționat, activitatea principală a aplicației nu este lansată automat, furnizorii săi de conținut nu sunt inițializați, iar clasa de bază Application
este instanțiată în locul oricărei subclase declarate în manifestul aplicației.
atenție: pentru a evita erorile, asigurați-vă că părțile aplicației dvs. care se execută în modul restricționat (mai alesBackupAgent
) nu accesează furnizorii de conținut din aceeași aplicație sau încearcă să arunce obiectulApplication
. Dacă nu puteți evita aceste modele, atunci luați în considerare implementarea backup-ului cheie/valoare sau dezactivarea completă a copiei de rezervă.
BackupAgent
trebuie să implementeze metodele abstracteonBackup()
șionRestore()
, care sunt utilizate pentru backup-ul valorii cheii. Dar dacă nu doriți să efectuați o copie de rezervă a valorii cheie, puteți lăsa necompletată implementarea acestor metode.
pentru mai multe informații, consultați extinderea BackupAgent.