Sikkerhetskopier brukerdata med Automatisk Sikkerhetskopiering
Automatisk Sikkerhetskopiering for Apper sikkerhetskopierer automatisk brukerens data fra apper som mål og kjør På Android 6.0 (API-NIVÅ 23) eller nyere. Android bevarer appdata ved å laste den opp til brukerens Google Disk – hvor den er beskyttet av brukerens google-kontoinformasjon. Mengden data er begrenset TIL 25 MB peruser av appen din, og det er ingen kostnad for lagring av sikkerhetskopierte data. Appen din kantilpass sikkerhetskopieringsprosessen eller velg bort ved å deaktivere sikkerhetskopiering.
for en oversikt Over Android backup alternativer og veiledning om hvilke data du bør sikkerhetskopiere og gjenopprette, se data backupoverview.
Filer som er sikkerhetskopiert
Som standard Inkluderer Automatisk Sikkerhetskopiering filer i de fleste katalogene som er tilordnet appen din av systemet:
- Delte innstillingsfiler.
- Filer lagret i appens interne lagring, åpnet av
getFilesDir()
ellergetDir(String, int)
. - Filer i katalogen returnert av
getDatabasePath(String)
, som også inneholder filer opprettet medSQLiteOpenHelper
– klassen. - Filer på ekstern lagring i katalogen returnert av
getExternalFilesDir(String)
.
automatisk Sikkerhetskopiering utelukker filer i kataloger som returneres av getCacheDir()
getCodeCacheDir()
eller getNoBackupFilesDir()
. Filene som er lagret på disse stedene, er bare nødvendig midlertidig, eller er med vilje utelukket fra sikkerhetskopieringsoperasjoner.
du kan konfigurere appen til å inkludere og ekskludere bestemte filer. Hvis du vil ha Mer informasjon, kan du se Delen Inkluder og ekskluder filer.
Merk: Android behandler ikke konfigurasjonen av komponenter som brukerdata. Hvis appen aktiverer eller deaktiverer bestemte komponenter i manifestet mens Det kjører, må Du ikke forvente At AutoBackup lagrer og gjenoppretter konfigurasjonen. Hvis du vil beholde konfigurasjonstilstanden, lagrer du den I Delte Innstillinger og gjenoppretter Delte Innstillinger ved gjenoppretting. Hvis du vil at appen skal lagre tilstanden, lagrer du tilstanden I Delte Innstillinger og gjenoppretter Delte Innstillinger ved gjenoppretting.
Backup location
Backup data lagres i en privat mappe i brukerens Google Disk-konto, begrenset TIL 25MB per app. De lagrede dataene teller ikke mot brukerens personlige Google Disk kvote. Bare den nyeste sikkerhetskopien er lagret. Når bakk er gjort, slettes den forrige sikkerhetskopien (hvis den finnes). Sikkerhetskopieringsdataene kan ikke leses av brukeren eller andre apper på enheten.
Brukere kan se en liste over apper som er sikkerhetskopiert i Google Diskandroid-appen. På En Android-drevet enhet kan brukerne finne denne listen i Driveapps navigasjonsskuff under Innstillinger> Sikkerhetskopiering og tilbakestilling> Appdata.
Sikkerhetskopier fra hver enhet-oppsett-levetid lagres i separate datasett som vist i følgende eksempler:
- hvis brukeren eier to enheter, finnes det et sikkerhetskopieringsdatasett for hver enhet.
- hvis brukerfabrikken tilbakestiller en enhet og deretter setter opp enheten med samme konto, lagres sikkerhetskopien i et nytt datasett. Foreldede datasett slettes automatisk etter en periode med inaktivitet.
backup schedule
Backup skjer automatisk når alle følgende betingelser er oppfylt:
- brukeren har aktivert backup på enheten. I Android 9 er denne innstillingen inSettings> System> Backup.
- minst 24 timer har gått siden siste backup.
- enheten er inaktiv.
- enheten er koblet Til Et Wi-Fi-nettverk(hvis enhetsbrukeren ikke har valgt sikkerhetskopiering av mobildata).
i praksis skjer disse forholdene omtrent hver natt, men en enhet kan aldri sikkerhetskopiere (for eksempel hvis den aldri kobles til et nettverk). For å spare networkbandwidth, tar opplastingen sted bare hvis app data er endret.
under Automatisk Sikkerhetskopiering slår systemet av appen for å sikre at den ikke lenger skriver til filsystemet. Som standard ignorerer sikkerhetskopieringssystemet apper som kjører i forgrunnen fordi brukere vil legge merke til at appene deres blir stengt. Du kan overstyre standard virkemåte ved å sette attributtetbackupInForeground
til true.For å forenkle testingen inkluderer Android verktøy som lar deg manuelt starte en sikkerhetskopi av appen din. Hvis Du vil Ha Mer informasjon, kan Du se Teste sikkerhetskopiering og gjenoppretting.
Gjenopprett tidsplan
Data gjenopprettes når appen er installert, enten fra Play store, under enhetsoppsett (når systemet installerer tidligere installerte apper), eller fra å kjøre adb install. Gjenopprettingsoperasjonen skjer etter AT APK er installert, men før appen er tilgjengelig for å bli lansert av brukeren.
under den første enhetsoppsettveiviseren vises brukeren en liste over tilgjengelige sikkerhetskopieringsdatasett og blir spurt om hvilket datasett du vil gjenopprette dataene fra. Uansett hvilken backup datasett er valgt blir forfedrenes datasett for enheten. Enheten kan gjenopprette fra enten egne sikkerhetskopier eller forfedrenes datasett. Enheten prioriterer sin egen sikkerhetskopi hvis sikkerhetskopier fra begge kilder er tilgjengelige. Hvis brukeren ikke gikk gjennom enhetsoppsettveiviseren, kan enheten bare gjenopprette fra egne sikkerhetskopier.For å forenkle testingen inkluderer Android verktøy som lar deg manuelt starte en gjenoppretting av appen din. Hvis Du vil Ha Mer informasjon, kan Du se Teste sikkerhetskopiering og gjenoppretting.
Aktiver og deaktiver sikkerhetskopiering
Apper som er Rettet Mot Android 6.0 (API-nivå 23) eller høyere, deltar automatisk I Automatisk Sikkerhetskopiering. I app manifest-filen angir du boolsk verdiandroid:allowBackup
for å aktivere eller deaktivere sikkerhetskopiering. Standardverdien er true
men for å gjøre yourintentions klare, anbefaler vi eksplisitt å sette attributtet i manifestene dine vist nedenfor:
<manifest ... > ... <application android:allowBackup="true" ... > ... </application></manifest>
du kan deaktivere sikkerhetskopier ved å sette android:allowBackup
til false
. Du kan gjøre dette hvis appen din kan gjenskape sin tilstand gjennom en annen mekanisme eller hvis appen din omhandler sensitiv informasjon Som Android Ikke bør sikkerhetskopiere.
Inkluder og ekskluder filer
som standard sikkerhetskopierer systemet nesten alle appdata. Hvis Du vil ha Mer informasjon, kan Du se Filer som er sikkerhetskopiert. Denne delen viser hvordan du definerer egendefinerte XML-regler for å kontrollere hva som sikkerhetskopieres.
- i
AndroidManifest.xml
legger du tilandroid:fullBackupContent
attributtet til<application>
– elementet. Dette attributtet peker på EN XML-fil som inneholder regler for sikkerhetskopiering. For eksempel:<application ... android:fullBackupContent="@xml/my_backup_rules"></application>
- Opprett EN XML-fil kalt
my_backup_rules.xml
ires/xml/
katalogen. Inne i filen legger du til regler med<include>
og<exclude>
– elementene.Følgende eksempel sikkerhetskopierer alle delte preferanser unntattdevice.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. Hvis du angir et <inkluder> – element, inneholder systemet ikke lenger noen filer som standard og sikkerhetskopierer bare de angitte filene. For å inkludere flere filer, bruk flere <inkluder> elementer.Merk: Filer i kataloger returnert av
getCacheDir()
getCodeCacheDir()
ellergetNoBackupFilesDir()
er alltid ekskludert selv om du prøver å inkludere dem. -
<exclude>
– Angir en fil eller mappe som skal utelates under sikkerhetskopiering. Her er noen filer som vanligvis utelukkes fra sikkerhetskopiering:- Filer som har enhetsspesifikke identifikatorer, enten utstedt av en server eller generert på enheten. For Eksempel Må Google Cloud Messaging (GCM) generere et registreringstoken hver gang en bruker installerer appen din på en ny enhet. Hvis det gamle registreringstokenet gjenopprettes, kan appen oppføre seg uventet.
- kontoinformasjon eller annen sensitiv informasjon. Vurder å be brukeren om å reauthenticate første gang de starter en restaurert app i stedet for å tillate lagring av slik informasjon i sikkerhetskopien.
- Filer relatert til app debugging.
- Store filer som gjør at appen overskrider reservekvoten PÅ 25 MB.
Merk: hvis konfigurasjonsfilen angir begge elementene, inneholder sikkerhetskopien alt som er fanget av<include>
elementer minus ressursene som er navngitt i<exclude>
elementer. Med andre ord har <exclude>
forrang.
hvert element må inneholde følgende to attributter:
-
domain
– angir plasseringen av ressursen. Gyldige verdier for dette attributtet inkluderer følgende:-
root
– katalogen på filsystemet der alle private filer som tilhører denne appen er lagret. -
file
– kataloger returnert avgetFilesDir()
. -
database
– kataloger returnert avgetDatabasePath()
. Databaser opprettet medSQLiteOpenHelper
lagres her. -
sharedpref
– katalogen derSharedPreferences
er lagret.
external
katalogen returnert avgetExternalFilesDir()
-
Merk: du kan ikke sikkerhetskopiere filer utenfor disse plasseringene.
path
: Angir en fil eller mappe som skal inkluderes i eller utelates fra sikkerhetskopiering. Merk at:
- dette attributtet støtter ikke jokertegn eller regex-syntaks.
- Du kan bruke
.
for å referere til gjeldende katalog, men du kan ikke referere til overordnet katalog..
av sikkerhetsgrunner. - hvis du angir en katalog, gjelder regelen for alle filer i katalogen og rekursive underkataloger.
include
– elementet kan også inneholderequireFlags
– attributtet, som delen som beskriver hvordan du definerer betingede krav til sikkerhetskopiering, diskuterer mer detaljert.
Definer enhetsbetingelser som kreves for sikkerhetskopiering
hvis appen lagrer sensitiv informasjon på enheten, kan du spesifiserebetingelser der appens data er inkludert i brukerens sikkerhetskopiering. Du kan legge Til Følgende forhold I Android 9 (API level 28) ellerhøyere:
-
clientSideEncryption
: brukerens backup er kryptert med en klient-sidesecret. Denne form for kryptering er aktivert på enheter som kjører Android 9 orhigher så lenge brukeren har aktivert backup I Android 9 orhigher og har satt ascreen lock (PIN, mønster eller passord) for enheten. -
deviceToDeviceTransfer
: brukeren overfører sikkerhetskopien til en annen enhet som støtter lokal enhet-til-enhetoverføring (For Eksempel Google Pixel).
hvis du har oppgradert utviklingsenhetene dine Til Android 9, må du deaktivereog deretter aktivere sikkerhetskopiering av data etter oppgradering. Dette skyldes At Android barekrypterer sikkerhetskopier med en klientside hemmelighet etter å ha informert brukere I Innstillinger elleroppsettveiviseren.
for å deklarere inklusjonsbetingelsene, settrequireFlags
attributtet til ønsket verdi eller verdier i din i <include>
elementer i ditt sett med sikkerhetsregler:
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>
hvis appen din implementerer et backupsystem med nøkkelverdi, eller hvis du implementererbackupagent selv,kan du også bruke disse betingede kravene til sikkerhetskopilogikken din ved å utføre en bitvis sammenligning mellom enBackupDataOutput
objektsett med transportflagg og den egendefinerte backup-agentensFLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
eller FLAG_DEVICE_TO_DEVICE_TRANSFER
flagg.
følgende kodebit viser et eksempel på bruk av denne metoden:
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.}
Implementere BackupAgent
Apper som implementerer Automatisk Sikkerhetskopiering trenger ikke å implementere en BackupAgent
. Du kan imidlertid eventuelt implementere en egendefinert BackupAgent
. Vanligvis er det to grunner til å gjøre dette:
- Du vil motta varsel om sikkerhetskopieringshendelser som
onRestoreFinished()
elleronQuotaExceeded(long, long)
. Disse tilbakeringingsmetodene utføres selv om appen ikke kjører. - du kan ikke enkelt uttrykke settet med filer du vil sikkerhetskopiere MED XML-regler. I disse sjeldne tilfellene kan du implementere En BackupAgent som overstyrer
onFullBackup(FullBackupDataOutput)
for å lagre det du vil ha. For å beholde systemets standardimplementering, ring den tilsvarende metoden på superklassen medsuper.onFullBackup()
.
hvis Du implementerer En BackupAgent, forventer systemet som standard at appen din skal utføre nøkkel / verdi sikkerhetskopiering og gjenoppretting. For å bruke filbasert Automatisk Sikkerhetskopiering i stedet, settandroid:fullBackupOnly
attributtet til true
i appens manifest.under automatisk sikkerhetskopiering og gjenoppretting starter systemet appen i begrenset innhold-modus for å forhindre at appen får tilgang til filer som kan forårsake konflikter, og la appen utføre tilbakeringingsmetoder i sin BackupAgent
. I denne begrensede modusen startes ikke appens hovedaktivitet automatisk, Innholdsleverandørene initialiseres ikke, og grunnklassen Application
startes i stedet for noen underklasse som er oppgitt i appens manifest.
Forsiktig: for å unngå feil må du sørge for at delene av appen din som kjører i begrenset innhold-modus (for det meste BackupAgent
) ikke får tilgang til innholdsleverandører i samme app eller prøver å kasteApplication
– objektet. Hvis du ikke kan unngå disse mønstrene, bør du vurdere å implementere Nøkkel / Verdi backup eller deaktivere backup helt.
din BackupAgent
må implementere de abstrakte metodene onBackup()
og onRestore()
, som brukes til sikkerhetskopiering av nøkkelverdier. Men hvis du ikke vil utføre nøkkelverdibackup, kan du bare la implementeringen av disse metodene være tom.
Hvis du vil Ha mer informasjon, kan Du Se Utvide BackupAgent.