felhasználói adatok biztonsági mentése automatikus biztonsági mentéssel
automatikus biztonsági mentés alkalmazásokhoz automatikusan biztonsági másolatot készít a felhasználó adatairól az Android 6.0 (API szint 23) vagy újabb rendszeren futó alkalmazásokból. Az Android megőrzi az appdata-t úgy, hogy feltölti azt a felhasználó Google Drive—jára-ahol a felhasználó Google-fiókjának hitelesítő adatai védik. Az adatmennyiség az alkalmazás 25 MB-os olvasójára korlátozódik, és a biztonsági mentési adatok tárolásáért nincs díj. Az alkalmazás testreszabhatja a biztonsági mentési folyamatot, vagy letilthatja a biztonsági másolatokat.
az Android biztonsági mentési lehetőségeinek áttekintése és útmutatás arról, hogy mely adatokról kell biztonsági másolatot készíteni és visszaállítani, lásd a data backupoverview.
mentett fájlok
alapértelmezés szerint az automatikus biztonsági mentés a rendszer által az alkalmazáshoz rendelt legtöbb könyvtárban található fájlokat tartalmazza:
- Megosztott beállítások fájlok.
- az alkalmazás belső tárhelyére mentett fájlok, amelyekhez a
getFilesDir()
vagygetDir(String, int)
fér hozzá. - a
getDatabasePath(String)
könyvtárban található fájlok, amelyek aSQLiteOpenHelper
osztály által létrehozott fájlokat is tartalmazzák. - a
getExternalFilesDir(String)
által visszaadott könyvtárban lévő fájlok.
Az automatikus biztonsági mentés kizárja a getCacheDir()
getCodeCacheDir()
vagy getNoBackupFilesDir()
könyvtárakban található fájlokat. Az ezeken a helyeken mentett fájlokra csak ideiglenesen van szükség, vagy szándékosan kizárják őket a biztonsági mentési műveletekből.
beállíthatja, hogy az alkalmazás bizonyos fájlokat tartalmazzon és kizárjon. További információt a fájlok felvétele és kizárása szakaszban talál.
Megjegyzés: Az Android nem kezeli az összetevők konfigurációját felhasználói adatként. Ha az alkalmazás futása közben engedélyezi vagy letiltja a jegyzék bizonyos összetevőit, ne várja el, hogy az AutoBackup elmenti és visszaállítja a konfigurációt. A konfigurációs állapot megőrzéséhez mentse el a megosztott beállításokba, majd állítsa vissza a megosztott beállításokat a visszaállítás során. Ha azt szeretné, hogy az alkalmazás mentse az állapotát, tárolja az állapotot a megosztott beállításokban, és állítsa vissza a megosztott beállításokat a visszaállításkor.
biztonsági mentési hely
a biztonsági mentési adatokat a felhasználó Google Drive-fiókjának privát mappájában tárolja, alkalmazásonként 25 MB-ra korlátozva. A mentett adatok nem számítanak bele a felhasználóbaszemélyes Google Drive kvóta. Csak a legfrissebb biztonsági mentés van tárolva. Amikor meghökkent készül, az előző biztonsági mentés (ha van ilyen) törlődik. A biztonsági mentés adataia felhasználó vagy az eszköz más alkalmazásai nem olvashatók.
a felhasználók láthatják azoknak az alkalmazásoknak a listáját, amelyekről biztonsági másolatot készítettek a Google DriveAndroid alkalmazásban. Android-alapú eszközön a felhasználók ezt a listát a Driveapp navigációs fiókjában találhatják meg beállítások > Backup and reset > App data.
Az egyes Eszközök-Beállítások-élettartam biztonsági mentései külön adatkészletekben vannak tárolva, az alábbi példák szerint:
- ha a felhasználónak két eszköze van, akkor minden eszközhöz létezik biztonsági mentési adatkészlet.
- Ha a felhasználó gyárilag alaphelyzetbe állít egy eszközt, majd ugyanazzal a fiókkal állítja be az eszközt, a biztonsági mentés egy új adatkészletben kerül tárolásra. Az elavult adatkészletek inaktivitás után automatikusan törlődnek.
biztonsági mentés ütemezése
a biztonsági mentés automatikusan megtörténik, ha az alábbi feltételek mindegyike teljesül:
- a felhasználó engedélyezte a biztonsági mentést az eszközön. Az Android 9-ben ez a Beállítás inSettings > System > biztonsági mentés.
- legalább 24 óra telt el az utolsó biztonsági mentés óta.
- a készülék tétlen.
- az eszköz Wi-Fi hálózathoz csatlakozik (ha az eszköz felhasználója nem választotta ki a mobiladat-mentést).
a gyakorlatban ezek a feltételek nagyjából minden este előfordulnak, de egy eszköz soha nem állhat vissza (például ha soha nem csatlakozik hálózathoz). A networkbandwidth megőrzése érdekében a feltöltésre csak akkor kerül sor, ha az alkalmazás adatai megváltoztak.
Az automatikus biztonsági mentés során a rendszer leállítja az alkalmazást, hogy megbizonyosodjon arról, hogy már nem ír a fájlrendszerbe. Alapértelmezés szerint a biztonsági mentési rendszer figyelmen kívül hagyja az előtérben futó alkalmazásokat, mert a felhasználók észrevennék alkalmazásaik leállítását. Az alapértelmezett viselkedést felülbírálhatja, ha a backupInForeground
attribútumot true értékre állítja.
a tesztelés egyszerűsítése érdekében az Android olyan eszközöket tartalmaz, amelyek lehetővé teszik az alkalmazás biztonsági mentésének manuális kezdeményezését. További információ: Biztonsági mentés és visszaállítás tesztelése.
visszaállítási ütemezés
Az adatok visszaállnak az alkalmazás telepítésekor, akár a Play Áruházból, az eszköz beállítása során (amikor a rendszer telepíti a korábban telepített alkalmazásokat), akár az adb install futtatásakor. A visszaállítási művelet az APK telepítése után történik, de még mielőtt az alkalmazás elérhető lenne a felhasználó számára.
a kezdeti eszközbeállítási varázsló során a felhasználónak megjelenik a rendelkezésre álló biztonsági mentési adatkészletek listája, és megkérdezi, hogy melyikből állítsa vissza az adatokat. Bármelyik biztonsági mentési adatkészlet van kiválasztva, az eszköz ősi adatkészletévé válik. Az eszköz visszaállíthatja saját biztonsági másolataiból vagy az ősi adatkészletből. Az eszköz prioritásként kezeli a saját biztonsági mentését, ha mindkét forrásból rendelkezésre állnak biztonsági másolatok. Ha a felhasználó nem ment keresztül az eszközbeállító varázslón, akkor az eszköz csak a saját biztonsági másolataiból állíthat vissza.
a tesztelés egyszerűsítése érdekében az Android olyan eszközöket tartalmaz, amelyek segítségével manuálisan kezdeményezheti az alkalmazás visszaállítását. További információ: Biztonsági mentés és visszaállítás tesztelése.
biztonsági mentés engedélyezése és letiltása
az Android 6.0 (API szint 23) vagy magasabb szintű alkalmazásokat célzó alkalmazások automatikusan részt vesznek az automatikus biztonsági mentésben. Az app manifest fájlban állítsa be a logikai értéketandroid:allowBackup
A biztonsági mentés engedélyezéséhez vagy letiltásához. Az alapértelmezett érték true
de a szándékok egyértelművé tétele érdekében javasoljuk, hogy kifejezetten állítsa be az attribútumot az alább látható manifesztekben:
<manifest ... > ... <application android:allowBackup="true" ... > ... </application></manifest>
a android:allowBackup
beállításával letilthatja a biztonsági mentéseket false
. Lehet, hogy ezt meg akarja tenni, ha az alkalmazás valamilyen más mechanizmuson keresztül újra létrehozhatja állapotát, vagy ha az alkalmazás olyan érzékeny információkkal foglalkozik, amelyekről az Androidnak nem szabad biztonsági másolatot készítenie.
fájlok beillesztése és kizárása
alapértelmezés szerint a rendszer szinte az összes alkalmazásadatot biztonsági másolatot készít. További információ: a biztonsági mentés alatt álló fájlok. Ez a szakasz bemutatja, hogyan határozhat meg egyéni XML-Szabályokat a biztonsági mentés ellenőrzéséhez.
- a
AndroidManifest.xml
– ben adja hozzá aandroid:fullBackupContent
attribútumot a<application>
elemhez. Ez az attribútum egy XML fájlra mutat, amely biztonsági mentési szabályokat tartalmaz. Például:<application ... android:fullBackupContent="@xml/my_backup_rules"></application>
- hozzon létre egy
my_backup_rules.xml
nevű XML fájlt ares/xml/
könyvtárban. A fájl belsejében adjon hozzá Szabályokat a<include>
és<exclude>
elemekkel.A következő minta biztonsági másolatot készít az összes megosztott beállításról, kivévedevice.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. Ha megad egy <include> elemet, a rendszer alapértelmezés szerint nem tartalmaz fájlokat, és csak a megadott fájlokról készít biztonsági másolatot. Több fájl felvételéhez használjon több <include> elemet.Megjegyzés: A
getCacheDir()
getCodeCacheDir()
vagygetNoBackupFilesDir()
által visszaadott könyvtárakban lévő fájlok mindig ki vannak zárva, még akkor is, ha megpróbálja felvenni őket. -
<exclude>
– megadja a biztonsági mentés során kizárandó fájlt vagy mappát. Íme néhány fájl, amelyet általában kizárnak a biztonsági mentésből:- olyan fájlok, amelyek eszközspecifikus azonosítókkal rendelkeznek, akár egy szerver által kiadott, akár az eszközön generált. Például a Google Cloud Messaging (GCM) – nek regisztrációs tokent kell létrehoznia minden alkalommal, amikor a felhasználó telepíti az alkalmazást egy új eszközre. Ha a régi regisztrációs token visszaáll, az alkalmazás váratlanul viselkedhet.
- fiók hitelesítő adatai vagy más érzékeny információk. Fontolja meg, hogy kérje meg a felhasználót, hogy hitelesítse újra a visszaállított alkalmazás első indításakor, ahelyett, hogy lehetővé tenné az ilyen információk tárolását a biztonsági mentésben.
- Az alkalmazás hibakeresésével kapcsolatos fájlok.
- nagy fájlok, amelyek miatt az alkalmazás meghaladja a 25 MB biztonsági mentési kvótát.
Megjegyzés: Ha a konfigurációs fájl mindkét elemet megadja, akkor a biztonsági mentés mindent tartalmaz, amelyet a<include>
elemek rögzítenek, levonva a<exclude>
elemekben megnevezett erőforrásokat. Más szavakkal, a <exclude>
elsőbbséget élvez.
minden elemnek a következő két attribútumot kell tartalmaznia:
-
domain
– meghatározza az erőforrás helyét. Az attribútum érvényes értékei a következők:-
root
– a fájlrendszer könyvtárában, ahol az alkalmazáshoz tartozó összes privát fájl tárolódik. -
file
– agetFilesDir()
által visszaadott könyvtárak. -
database
– agetDatabasePath()
által visszaadott könyvtárak. ASQLiteOpenHelper
segítségével létrehozott adatbázisok itt tárolódnak. -
sharedpref
– A könyvtár, ahol aSharedPreferences
tárolódik. -
external
A könyvtár által visszaadottgetExternalFilesDir()
-
-
path
: megadja a biztonsági mentésbe belefoglalandó vagy abból kizárandó fájlt vagy mappát. Vegye figyelembe, hogy:- ez az attribútum nem támogatja a helyettesítő karaktert vagy a regex szintaxist.
- a
.
használatával hivatkozhat az aktuális könyvtárra, azonban biztonsági okokból nem hivatkozhat a..
szülőkönyvtárra. - Ha megad egy könyvtárat, akkor a szabály a könyvtár összes fájljára és a rekurzív alkönyvtárakra vonatkozik.
Megjegyzés: ezeken a helyeken kívül nem lehet biztonsági másolatot készíteni a fájlokról.
a include
elem tartalmazhatja a requireFlags
attribútumot is, amelyet a feltételes követelmények meghatározásának módjaA biztonsági mentés szakasz részletesebben tárgyalja.
adja meg a biztonsági mentéshez szükséges eszközfeltételeket
Ha az alkalmazás érzékeny információkat ment az eszközre, megadhatja azokat a feltételeket, amelyek mellett az alkalmazás adatai szerepelnek a felhasználói biztonsági mentésben. A következő feltételeket adhatja hozzá az Android 9-hez (API szint 28) vagymagasabb:
-
clientSideEncryption
: a felhasználó biztonsági mentését egy kliens-sidesecret titkosítja. Ez a titkosítási forma engedélyezve van az Android 9 orhigher rendszert futtató eszközökön, mindaddig,amíg a felhasználó engedélyezte a biztonsági mentést az Android 9 orhigher alkalmazásban, és beállította az ascreen lock (PIN, minta vagy jelszó) eszközt. -
deviceToDeviceTransfer
: a felhasználó a biztonsági mentést egy másik eszközre továbbítja,amely támogatja a helyi eszköz-eszköz transzfert (például Google Pixel).
ha frissítette fejlesztőeszközeit Android 9-re, akkor le kell tiltaniés majd frissítés után engedélyezze újra az adatmentést. Ez azért van, mert az Android onlyencrypts biztonsági mentések egy kliens oldali titkos tájékoztatása után a felhasználók a Beállítások vagya telepítő varázsló.
a felvételi feltételek deklarálásához állítsa be arequireFlags
attribútumot a kívánt értékhez vagy értékekhez a<include>
elemek a készletben ofbackup szabályok:
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>
Ha az alkalmazás kulcsértékű biztonsági mentési rendszert valósít meg, vagy ha saját maga hajtja végre a BackupAgent alkalmazást,akkor ezeket a feltételes követelményeket a biztonsági mentési logikára is alkalmazhatja, ha bitenkénti összehasonlítást végez aBackupDataOutput
a szállítási zászlók objektumkészlete és az egyéni biztonsági mentési ügynökFLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
zászlók.
a következő kódrészlet ennek a módszernek a használatát mutatja be:
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.}
BackupAgent végrehajtása
Az automatikus biztonsági mentést megvalósító alkalmazásoknak nem kell végrehajtaniuk a BackupAgent
. Opcionálisan azonban megvalósíthat egy egyedi BackupAgent
. Ennek általában két oka van:
- értesítést szeretne kapni a biztonsági mentési eseményekről, például:
onRestoreFinished()
vagyonQuotaExceeded(long, long)
. Ezek a visszahívási módszerek akkor is végrehajtásra kerülnek, ha az alkalmazás nem fut. - nem lehet könnyen kifejezni a készlet kívánt fájlokat menteni XML szabályokat. Ezekben a ritka esetekben, akkor végre egy BackupAgent, amely felülírja
onFullBackup(FullBackupDataOutput)
tárolni, amit akar. A rendszer alapértelmezett megvalósításának megőrzéséhez hívja meg a megfelelő módszert a szuperosztályonsuper.onFullBackup()
.
Ha BackupAgent-et hajt végre, a rendszer alapértelmezés szerint elvárja, hogy az alkalmazás végrehajtsa a kulcs / érték biztonsági mentését és visszaállítását. A fájlalapú automatikus biztonsági mentés használatához állítsa be aandroid:fullBackupOnly
attribútumot atrue
értékre az alkalmazás jegyzékében.
az automatikus biztonsági mentés és visszaállítás során a rendszer korlátozott módban indítja el az alkalmazást, hogy megakadályozza az ütközéseket okozó fájlokhoz való hozzáférést, és hagyja, hogy az alkalmazás visszahívási módszereket hajtson végre a BackupAgent
fájlban. Ebben a korlátozott módban az alkalmazás fő tevékenysége nem indul el automatikusan, a tartalomszolgáltatói nem inicializálódnak, és az alaposztály Application
példányosul az alkalmazás jegyzékében deklarált alosztály helyett.
Vigyázat: a hibák elkerülése érdekében győződjön meg arról, hogy az alkalmazás korlátozott módban végrehajtott részei (többnyire a BackupAgent
) nem férnek hozzá ugyanazon alkalmazás tartalomszolgáltatóihoz, vagy nem próbálják meg leadni a Application
objektumot. Ha nem tudja elkerülni ezeket a mintákat, akkor fontolja meg a kulcs/érték biztonsági mentésének végrehajtását vagy a biztonsági mentés teljes letiltását.
a BackupAgent
kell végrehajtani az absztrakt módszerek onBackup()
és onRestore()
, amelyeket a kulcs-érték biztonsági mentés. De ha nem akarja végrehajtani a kulcsérték-biztonsági mentést, akkor hagyja üresen ezeknek a módszereknek a végrehajtását.
További információ: a BackupAgent kiterjesztése.