Uygulamalar için Otomatik Yedekleme, Android 6.0 (API düzeyi 23) veya sonraki sürümleri hedefleyen ve çalışan uygulamalardaki kullanıcı verilerini otomatik olarak yedekler. Android, uygulama verilerini kullanıcının Google Drive'ına yükleyerek korur. Bu veriler, kullanıcının Google Hesabı kimlik bilgileriyle korunur. Yedekleme; Android 9 veya sonraki sürümleri çalıştıran cihazlarda cihazın PIN'i, deseni veya şifresi kullanılarak uçtan uca şifrelenir. Her uygulama, uygulama kullanıcısı başına 25 MB'a kadar yedek veri ayırabilir. Yedekleme verilerinin depolanması için ücret alınmaz. Uygulamanız, yedekleme işlemini özelleştirebilir veya yedeklemeleri devre dışı bırakarak kapsam dışında kalmayı seçebilir.
Android'in yedekleme seçeneklerine genel bakış ve hangi verilerin yedeklenip geri yükleneceğiyle ilgili bilgi için Veri yedeklemeye genel bakış başlıklı makaleyi inceleyin.
Yedeklenen dosyalar
Otomatik Yedekleme, varsayılan olarak sistem tarafından uygulamanıza atanan dizinlerin çoğundaki dosyaları içerir:
Paylaşılan tercih dosyaları
Uygulamanızın dahili depolama alanına kaydedilen ve
getFilesDir()
veyagetDir(String, int)
tarafından erişilen dosyalargetDatabasePath(String)
tarafından döndürülen dizindeki dosyalar (SQLiteOpenHelper
sınıfıyla oluşturulan dosyalar da dahildir)Dizindeki harici depolama alanında bulunan ve
getExternalFilesDir(String)
tarafından döndürülen dosyalar
getCacheDir()
, getCodeCacheDir()
ve getNoBackupFilesDir()
tarafından döndürülen dizinlerdeki dosyalar Otomatik Yedekleme'de hariç tutulur. Bu konumlara kaydedilen dosyalara yalnızca geçici olarak ihtiyaç duyulur ve bu dosyalar yedekleme işlemlerinden kasıtlı olarak hariç tutulur.
Uygulamanızı belirli dosyaları dahil edecek ve hariç tutacak şekilde yapılandırabilirsiniz. Daha fazla bilgi için Dosyaları dahil etme ve hariç tutma bölümüne bakın.
Yedek konumu
Yedekleme verileri, kullanıcının Google Drive hesabındaki gizli bir klasörde saklanır ve uygulama başına 25 MB ile sınırlıdır. Kayıtlı veriler, kullanıcının kişisel Google Drive kotasına dahil edilmez. Yalnızca en son yedek saklanır. Yedekleme yapıldığında önceki yedekler silinir. Yedekleme verileri kullanıcı veya cihazdaki diğer uygulamalar tarafından okunamaz.
Kullanıcılar, Google Drive Android uygulamasında yedeklenen uygulamaların listesini görebilir. Android işletim sistemli cihazlarda bu listeyi Drive uygulamasının gezinme çekmecesinde Ayarlar > Yedekleme ve sıfırlama bölümünde bulabilirler.
Her bir cihaz kurulumu ömründen alınan yedekler, aşağıdaki örneklerde açıklandığı gibi ayrı veri kümelerinde depolanır:
Kullanıcının iki cihazı varsa her cihaz için bir yedek veri kümesi bulunur.
Kullanıcı bir cihazı fabrika ayarlarına sıfırlayıp cihazı aynı hesapla kurarsa yedekleme yeni bir veri kümesinde depolanır. Kullanılmayan veri kümeleri, belirli bir süre işlem yapılmadığında otomatik olarak silinir.
Yedekleme planlaması
Yedeklemeler, aşağıdaki koşulların tümü karşılandığında otomatik olarak gerçekleşir:
- Kullanıcı, cihazda yedeklemeyi etkinleştirmiştir. Android 9'da bu ayar Ayarlar > Sistem > Yedekleme bölümündedir.
- Son yedekleme işleminden bu yana en az 24 saat geçmiş olmalıdır.
- Cihaz boştadır.
- Cihaz bir kablosuz ağa bağlı (cihaz kullanıcısı mobil veri yedeklerini etkinleştirmediyse).
Pratikte bu koşullar yaklaşık olarak her gece gerçekleşir ancak bir cihaz hiçbir zaman yedeklenmeyebilir (örneğin, bir ağa hiçbir zaman bağlanmazsa). Ağ bant genişliğini korumak için yükleme yalnızca uygulama verileri değiştiyse gerçekleşir.
Otomatik Yedekleme sırasında sistem, artık dosya sistemine yazmadığından emin olmak için uygulamayı kapatır. Yedekleme sistemi, varsayılan olarak kötü bir kullanıcı deneyimi yaşamamak için ön planda çalışan uygulamaları yoksayar. android:backupInForeground
özelliğini "true" (doğru) olarak ayarlayarak varsayılan davranışı geçersiz kılabilirsiniz.
Android, testi kolaylaştırmak için uygulamanızın manuel olarak yedeklenmesini başlatabileceğiniz araçlar içerir. Daha fazla bilgi için Yedekleme ve geri yüklemeyi test etme bölümüne bakın.
Programı geri yükleme
Veriler, uygulama Play Store'dan yüklendiğinde, cihaz kurulumu sırasında (sistem daha önce yüklenmiş uygulamaları yüklediğinde) veya adb
install çalıştırıldığında geri yüklenir. Geri yükleme işlemi, APK yüklendikten sonra ancak uygulama kullanıcı tarafından başlatılmadan önce gerçekleşir.
İlk cihaz kurulum sihirbazı sırasında kullanıcıya mevcut yedek veri kümelerinin listesi gösterilir ve verilerin hangisinden geri yükleneceği sorulur. Seçilen yedek veri kümesi, cihazın ana veri kümesi olur. Cihaz, kendi yedeklerinden veya ata veri kümesinden geri yükleme yapabilir. Her iki kaynaktan da yedekleme varsa cihaz kendi yedeklemesine öncelik verir. Kullanıcı, cihaz kurulum sihirbazını tamamlamadıysa cihaz yalnızca kendi yedeklemelerini geri yükleyebilir.
Android, test sürecini basitleştirmek için uygulamanızın geri yükleme işlemini manuel olarak başlatmanıza olanak tanıyan araçlar içerir. Daha fazla bilgi için Yedekleme ve geri yüklemeyi test etme başlıklı makaleyi inceleyin.
Yedeklemeyi etkinleştirin ve devre dışı bırakın
Android 6.0 (API düzeyi 23) veya sonraki sürümleri hedefleyen uygulamalar otomatik olarak Otomatik Yedekleme'ye katılır. Yedeklemeyi etkinleştirmek veya devre dışı bırakmak için uygulama manifest dosyanızda android:allowBackup
Boole değerini ayarlayın. Varsayılan değer true
'tür ancak aşağıdaki örnekte gösterildiği gibi manifest dosyanızda özelliği açıkça ayarlamanız önerilir:
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
android:allowBackup
değerini false
olarak ayarlayarak yedeklemeleri devre dışı bırakabilirsiniz. Uygulamanız başka bir mekanizma aracılığıyla durumunu yeniden oluşturabiliyorsa veya hassas bilgilerle ilgileniyorsa bunu yapmak isteyebilirsiniz.
Dosyaları dahil etme ve hariç tutma
Sistem varsayılan olarak neredeyse tüm uygulama verilerini yedeklemektedir. Daha fazla bilgi için yedeklenen dosyalar bölümüne bakın.
Bu bölümde, nelerin yedekleneceğini kontrol etmek için özel XML kurallarının nasıl tanımlanacağı açıklanmaktadır. Uygulamanız Android 12 (API düzeyi 31) veya sonraki sürümleri hedefliyorsa bu Android sürümlerini çalıştıran cihazlar için yapılan yedek geri yüklemeyle ilgili değişiklikleri desteklemek üzere bu bölümde açıklandığı gibi ek bir XML yedekleme kuralı grubu belirtmeniz gerekir.
Android 11 ve önceki sürümlerde yedeklemeyi kontrol etme
Android 11 (API düzeyi 30) veya daha eski sürümlerin yüklü olduğu cihazlarda hangi dosyaların yedekleneceğini kontrol etmek için bu bölümdeki adımları uygulayın.
AndroidManifest.xml
dosyanızda, aşağıdaki örnekte gösterildiği gibi<application>
öğesineandroid:fullBackupContent
özelliğini ekleyin. Bu özellik, yedekleme kurallarını içeren bir XML dosyasını işaret eder.<application ... android:fullBackupContent="@xml/backup_rules"> </application>
res/xml/
dizininde@xml/backup_rules
adlı bir XML dosyası oluşturun. Bu dosyaya<include>
ve<exclude>
öğeleriyle kurallar ekleyin. Aşağıdaki örnek,device.xml
hariç tüm paylaşılan tercihleri yedeklemektedir:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </full-backup-content>
Yedekleme için gereken cihaz koşullarını tanımlama
Uygulamanız cihaza hassas bilgiler kaydediyorsa uygulamanızın verilerinin kullanıcının yedeğine dahil edileceği koşulları belirtebilirsiniz. Android 9 (API düzeyi 28) veya sonraki sürümlerde aşağıdaki koşulları ekleyebilirsiniz:
clientSideEncryption
: Kullanıcının yedeği, istemci tarafı gizli bir anahtarla şifrelenir. Bu şifreleme biçimi, Android 9 veya sonraki sürümleri çalıştıran cihazlarda etkinleştirilir. Bunun için kullanıcının, Android 9 veya sonraki bir sürümde yedeklemeyi etkinleştirmesi ve cihazında bir ekran kilidi ayarlamış olması (PIN, desen veya şifre) gerekir.deviceToDeviceTransfer
: Kullanıcı, yedeklemesini cihazlar arasında yerel aktarım özelliğini destekleyen başka bir cihaza (ör. Google Pixel) aktarıyor.
Geliştirme cihazlarınızı Android 9'a yükselttiyseniz yükseltme işleminden sonra veri yedeklemeyi devre dışı bırakıp yeniden etkinleştirmeniz gerekir. Bunun nedeni, Android'in yedeklemeleri yalnızca Ayarlar'da veya kurulum sihirbazında bilgilendirdikten sonra istemci tarafı gizli anahtarıyla şifrelemesidir.
Dahil etme koşullarını beyan etmek için requireFlags
özelliğini, yedek kural grubunuzdaki <include>
öğelerinde seçili bir değere veya değerlere ayarlayın:
<?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>
Uygulamanız bir anahtar/değer yedekleme sistemi uyguluyorsa veya BackupAgent
kendiniz uyguluyorsanız BackupDataOutput
nesnesinin aktarım işaretleri ile özel yedekleme aracınızın FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
veya FLAG_DEVICE_TO_DEVICE_TRANSFER
işaretleri arasında bit eşleme karşılaştırması yaparak bu koşullu koşulları yedekleme mantığınıza da uygulayabilirsiniz.
Aşağıdaki kod snippet'inde bu yöntemin örnek kullanımı gösterilmektedir:
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. }
Android 12 veya sonraki sürümlerde yedeklemeyi kontrol etme
Uygulamanız Android 12 (API düzeyi 31) veya sonraki sürümleri hedefliyorsa Android 12 veya sonraki sürümleri çalıştıran cihazlarda hangi dosyaların yedekleneceğini kontrol etmek için bu bölümdeki adımları uygulayın.
AndroidManifest.xml
dosyanızda, aşağıdaki örnekte gösterildiği gibi<application>
öğesineandroid:dataExtractionRules
özelliğini ekleyin. Bu özellik, yedekleme kuralları içeren bir XML dosyasını işaret eder.<application ... android:dataExtractionRules="backup_rules.xml"> </application>
res/xml/
dizinindebackup_rules.xml
adlı bir XML dosyası oluşturun. Bu dosyaya<include>
ve<exclude>
öğeleriyle kurallar ekleyin. Aşağıdaki örnek,device.xml
hariç tüm paylaşılan tercihleri yedeklemektedir:<?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>
XML yapılandırma söz dizimi
Yapılandırma dosyasının XML söz dizimi, uygulamanızın hedeflediği ve çalıştığı Android sürümüne bağlı olarak değişir.
Android 11 veya önceki sürümler
Android 11 veya önceki sürümleri çalıştıran cihazlarda yedeklemeyi kontrol eden yapılandırma dosyası için aşağıdaki XML söz dizimini kullanın.
<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 veya sonraki sürümler
Uygulamanız Android 12 (API düzeyi 31) veya sonraki sürümleri hedefliyorsa Android 12 veya sonraki sürümleri çalıştıran cihazlarda yedeklemeyi kontrol eden yapılandırma dosyası için aşağıdaki XML söz dizimini kullanın.
<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> </data-extraction-rules>
Yapılandırmanın her bölümü (<cloud-backup>
, <device-transfer>
), yalnızca ilgili aktarım türü için geçerli olan kurallar içerir. Bu ayrım, örneğin, bir dosyayı veya dizini cihazlar arası (D2D) aktarım sırasında aktarırken Google Drive yedeklemelerinden hariç tutmanıza olanak tanır. Bu özellik, buluta yedekleyemeyecek kadar büyük ancak sorunsuz cihazlar arasında aktarılabilen dosyalarınız varsa kullanışlıdır.
Belirli bir yedekleme modu için kural yoksa (örneğin, <device-transfer>
bölümü yoksa) bu mod, Yedeklenen dosyalar bölümünde açıklandığı gibi no-backup
ve cache
dizinleri dışındaki tüm içerikler için tamamen etkinleştirilir.
Uygulamanız, yedeklemenin yalnızca şifrelenebildiği durumlarda (ör. kullanıcının kilit ekranı varsa) gerçekleşmesini sağlamak için <cloud-backup>
bölümünde disableIfNoEncryptionCapabilities
işaretini ayarlayabilir. Bu kısıtlamayı ayarladığınızda, kullanıcının cihazı şifrelemeyi desteklemiyorsa yedeklemelerin buluta gönderilmesi durdurulur. Ancak D2D aktarımları sunucuya gönderilmediği için şifrelemeyi desteklemeyen cihazlarda bile çalışmaya devam eder.
Dahil etme ve hariç tutma öğelerinin söz dizimi
<full-backup-content>
, <cloud-backup>
ve <device-transfer>
etiketlerinin içinde (cihazın Android sürümüne ve uygulamanızın targetSDKVersion
sürümüne bağlı olarak) <include>
ve <exclude>
öğelerini tanımlayabilirsiniz:
<include>
Yedeklenecek bir dosya veya klasör belirtir. Otomatik Yedekleme, varsayılan olarak neredeyse tüm uygulama dosyalarını içerir. Bir
<include>
öğesi belirtirseniz sistem artık varsayılan olarak hiçbir dosyayı dahil etmez ve yalnızca belirtilen dosyaları yedekleyebilir. Birden fazla dosya eklemek için birden fazla<include>
öğesi kullanın.Android 11 ve önceki sürümlerde bu öğe
requireFlags
özelliğini de içerebilir. Yedekleme için koşullu koşulları tanımlama bölümünü inceleyerek bu özellik hakkında daha fazla bilgi edinebilirsiniz.getCacheDir()
,getCodeCacheDir()
veyagetNoBackupFilesDir()
tarafından döndürülen dizinlerdeki dosyalar, dahil etmeye çalışsanız bile her zaman hariç tutulur.<exclude>
Yedekleme sırasında hariç tutulacak bir dosya veya klasörü belirtir. Genellikle yedeklemeden hariç tutulan bazı dosyalar şunlardır:
Bir sunucu tarafından verilen veya cihazda oluşturulan, cihaza özgü tanımlayıcılara sahip dosyalar. Örneğin, Firebase Cloud Messaging (FCM)'in, kullanıcılar uygulamanızı yeni bir cihaza her yüklediğinde kayıt jetonu oluşturması gerekir. Eski kayıt jetonu geri yüklenirse uygulama beklenmedik şekilde davranabilir.
Uygulama hata ayıklamayla ilgili dosyalar.
Uygulamanın 25 MB'lık yedekleme kotasını aşmasına neden olan büyük dosyalar.
Her <include>
ve <exclude>
öğesi aşağıdaki iki özelliği içermelidir:
domain
Kaynağın konumunu belirtir. Bu özellik için geçerli değerler şunlardır:
root
: Bu uygulamaya ait tüm gizli dosyaların dosya sisteminde depolandığı dizin.file
:getFilesDir()
tarafından döndürülen dizinler.database
:getDatabasePath()
tarafından döndürülen dizinler.SQLiteOpenHelper
ile oluşturulan veritabanları burada depolanır.sharedpref
:SharedPreferences
dosyasının depolandığı dizin.external
:getExternalFilesDir()
tarafından döndürülen dizin.device_root
:root
gibi ancak cihaz tarafından korunan depolama alanı için.device_file
:file
gibi ancak cihaz tarafından korunan depolama alanı için.device_database
:database
gibi ancak cihaz tarafından korunan depolama alanı için.device_sharedpref
:sharedpref
gibi ancak cihaz tarafından korunan depolama alanı için.
path
Yedeklemeye dahil edilecek veya yedekleme kapsamı dışında tutulacak bir dosya ya da klasörü belirtir. Aşağıdakileri göz önünde bulundurun:
- Bu özellik, joker karakter veya normal ifade söz dizimini desteklemiyor.
./
kullanarak mevcut dizine referans verebilirsiniz ancak güvenlik nedeniyle üst dizine (ör...
kullanarak) referans veremezsiniz.- Bir dizin belirtirseniz kural, dizindeki ve yinelemeli alt dizinlerdeki tüm dosyalara uygulanır.
BackupAgent'ı uygulama
Otomatik Yedekleme'yi kullanan uygulamaların BackupAgent
uygulaması gerekmez.
Ancak isteğe bağlı olarak özel bir BackupAgent
uygulayabilirsiniz. Genellikle bunu yapmanın
iki nedeni vardır:
onRestoreFinished()
veonQuotaExceeded(long, long)
gibi yedekleme etkinlikleri hakkında bildirim almak istiyorsunuz. Bu geri çağırma yöntemleri, uygulama çalışmasa bile yürütülür.Yedeklemek istediğiniz dosya grubunu XML kurallarıyla kolayca ifade edemezsiniz. Bu nadir durumlarda, istediğiniz verileri depolamak için
onFullBackup(FullBackupDataOutput)
değerini geçersiz kılan birBackupAgent
uygulayabilirsiniz. Sistemin varsayılan uygulamasını korumak içinsuper.onFullBackup()
ile üst sınıftaki ilgili yöntemi çağırın.
Bir BackupAgent
uygularsanız sistem varsayılan olarak uygulamanızın anahtar/değer yedekleme ve geri yükleme işlemi gerçekleştirmesini bekler. Bunun yerine dosya tabanlı otomatik yedeklemeyi kullanmak için uygulamanızın manifest dosyasında android:fullBackupOnly
özelliğini true
olarak ayarlayın.
Sistem, otomatik yedekleme ve geri yükleme işlemleri sırasında uygulamayı kısıtlı modda başlatır. Böylece, uygulamanın çakışmalara neden olabilecek dosyalara erişmesini engeller ve uygulamanın BackupAgent
içinde geri çağırma yöntemleri yürütmesini sağlarsınız. Bu kısıtlanmış modda, uygulamanın ana etkinliği otomatik olarak başlatılmaz, içerik sağlayıcıları başlatılmaz ve uygulamanın manifest dosyasında tanımlanan alt sınıflar yerine temel sınıf Application
örneklenir.
BackupAgent
, anahtar/değer yedekleme için kullanılan soyut onBackup()
ve onRestore()
yöntemlerini uygulamalıdır. Anahtar/değer yedekleme yapmak istemiyorsanız bu yöntemlerin uygulamanızı boş bırakabilirsiniz.
Daha fazla bilgi için BackupAgent'ı genişletme başlıklı makaleyi inceleyin.