Bir Android uygulaması, kaldırdıktan ve yeniden yükledikten sonra verilerini hatırlar


194

4.1'in üzerindeki tüm sürümleri hedefleyen bir Android uygulaması geliştirirken, uygulamamı kaldırmanın ve tekrar yüklemenin verilerini temizlemediğini gözlemledim.

Uygulama ilk ekranında sorduğu ayrıntıları saklamak için tasarlanmıştır. İşletim sistemi 4.4.4 sürümünde yeniden kaldırıp yükledikten sonra uygulama kullanıcıdan verileri doldurmasını ister ve bu normaldir. Ancak, 6.0 sürümünde aynı yükleme / kaldırma dizisi başlangıçta girilen verileri geri getirir.

/data/data/my package folderVeritabanını kaldırdıktan sonra gittiğini görmek için ziyaret ederek emin olmaya çalıştım ve aslında kaldırma sırasında klasör silinir.

Titanium Backup aracılığıyla ayarlar sayfasını ziyaret ederek uygulamayı silmeye çalıştım ve sonuçlar aynı. Aygıt v6.0 çalıştıran köklü Nexus 5'e sahip.

Bu garip davranışın nedeni ne olabilir?

Yanıtlar:


329

Android 6'nın otomatik yedeklemesi var. Sen ayarlamak gerekir android:allowBackupve android:fullBackupContentManifest'inizde <application>size veri yedeklenen istemiyorsanız etiketi veya eklemek istediğiniz veya eğer bazı kaynaklar dahil değildir. Bu bir hata değil.

Android'de AutoBackup hakkında daha fazla bilgi burada .


28
Bu doğru cevap ve benim için çalışıyor (aynı sorunu vardı) Bu davranıştan kaçınmak için android koymak gerekir : allowBackup = "false" ve android: fullBackupContent = " manifest.xml içinde " false "
frusso

33
Bazılarınızın merak etmesi durumunda, android: allowBackup ve android: fullBackupContent, <application />
Jack '

2
Belgelerden: android: fullBackupContent yedekleme seçeneklerini içeren XML dosyasına işaret eder. Varsayılan olarak, dosyaların çoğu yedeklenir. Her ne kadar bu ayarlar "false" herhangi bir hatayı tetiklemese de, sanırım ayarlamak yanlıştır.
bajicdusko

3
Davranış önceki sürümlerle senkronize olmadığından, neden yedekleme almak için varsayılan davranışı sürdürdüklerinden emin değilsiniz, bu yüzden can sıkıcı hale gelir. İsteyenler onu açabilir.
Atul

7
Yedekleri nasıl sileceğinizi bilen var mı?
1800 BİLGİ

31

greywolf82'nin cevabı doğru ama buna biraz bilgi eklemek istiyorum.

Android uygulamamı geliştirirken (Xamarin kullanarak), uygulamayı Visual Studio'dan yeniden başlattığımda, verilerimin birkaç ay önceki verilere geri döneceğini fark ettim. Sadece VS'den durdurup yeniden çalıştırmamın veya uygulamayı tamamen kaldırmam ve yeniden yüklemem önemli değildi.

Ayrıca, uygulamaya hiçbir zaman bir yedek depolamasını söylemediğimizi de belirtmek gerekir.

Yedekleme, Visual Studio'dan başlatıldığında daha yeni verilerin üzerine yazmış gibi görünüyordu ve uygulamamızın yayın yapısını kullanan ve ayrıca yedeklemeler tarafından daha yeni verilerin üzerine yazılan kullanıcıların raporlarına sahibiz.

Yedeklemelerin ve geri yüklemelerin ne zaman gerçekleştiğini tam olarak bilmediğim için bu özellik sadece sorunlara neden görünüyor.

AndroidManifest'imizi aşağıdaki xml'de gösterildiği gibi değiştirdik:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.XXXXXXX" android:versionName="8.0.0" android:installLocation="auto" android:versionCode="439">
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" />
    <application 
               android:label="@string/appName" 
               android:icon="@drawable/icon_small" 
               android:installLocation="internalOnly" 
               android:largeHeap="true"
               android:allowBackup="false"
               android:fullBackupOnly="false"
               />
...
</manifest>

Değeri açıkça false olarak ayarladıktan sonra, hepsi işe yarar görünüyor. Bunun bir tercih özelliği olmasını beklerdim ama ... her iki şekilde de değeri belirtmeyen uygulamalar için varsayılan olarak açık gibi görünüyor.


Teşekkürler. Aynı sorunu yaşadım.
Hadi Fooladi Talari

15

Cihazınızın Yedekleme ve Sıfırlama ayarlarını kontrol etmeli ve Otomatik geri yükleme özelliğini kapatmalısınız (bir uygulamayı yeniden yüklerken yedeklenen ayarlar ve veriler geri yüklenecektir.)

Otomatik yedeklemenin kapatılması otomatik geri yüklemeden farklıdır. Uygulamanız için otomatik yedeklemeyi açmanın yararlı olacağını düşünüyorsanız. Ancak, bunun, cihazlarının otomatik geri yükleme özelliğinin açık olduğunu bilmeyen son kullanıcıları yapacağını düşünüyorsanız, onu kapatmaktan çekinmeyin.

Benim durumumda allowBackup özelliğini kapattım, ancak Cloud'da önceki sürümün yedeğini aldığımdan beri hala geri yüklemeye devam etti.

Android 6.0'da bir Samsung cihazı için referans olarak resme bakın. Diğer cihazlar ve sürümler farklı bir ekrana sahip olabilir. Aşağıdaki resme bakın.

Yedekleme ve Sıfırlama altında Otomatik Geri Yükleme Ayarı


Aynı sorunu yaşıyorum, uygulamam açıkken birkaç kullanıcı için verileri yedeklemişti. Senkronize edilmiş verileri temizleme / atma olasılığı var mı?
Aditya Chauhan

5

Son zamanlarda bu özelliklerden yararlanmam gerekiyordu, belgeleri ortaya çıkartabildim ve kapsamlı testler sonucunda çıkarım yapabildim:

Android: allowbackup - bulunduğu cihazdaki yerel uygulama verilerini yedekler.

Android: fullBackupContent - Google'ın yedekleme geri yükleme api ile birlikte kullanılır ve tam olarak neyin yedekleneceğini ve işlem üzerinde daha fazla kontrol için uygulayabileceğiniz bir BackupManager sınıfını belirtmek için bir xml dosyası aracılığıyla kontrol edilebilir.

Bununla birlikte, belgelerin durumları ve test ile onayladığım bir geri yükleme işleminin yalnızca aygıt geri yüklendiğinde ve geri yükleme uygulaması veri işlemi tetiklendiğinde gerçekleşeceğini doğruladım. VEYA, uygulama adb aracılığıyla yandan yüklendiğinde de geri yüklenir; bu, uygulamayı Android Studio aracılığıyla cihazlarımızda test etmek veya hata ayıklamak için çalıştırdığımızda yaptığımız şeydir. Android: allowbackup'ı ayarlarsanız, ancak android: fullBackupContent'i bir Google api koduyla ayarlarsanız, uygulama verilerinin yalnızca yerel olarak depolandığını, oysa düzgün yapılandırdıysanız uygulamanız yedeklendiyse ve yeni bir cihaz aldığınızda veriler bulutta depolandı, böylece yeni bir cihaza geri yüklenebilir.


3

Manifest dosyasındaki uygulama etiketi altında android: allowBackup = "false" eklemek sorunumu çözdü.

Burada Otomatik Yedekleme ile kullanıcı verilerini yedeklemek için android belgelerine gider


2

Sadece android değiştirin: android için allowBackup = "true": manifiest.xml içinde allowBackup = "false". Çalışacak.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    <application
        android:allowBackup="false"
        android:icon="@mipmap/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
</manifest>

2

Sadece buna ek olarak, Android 9'da (bir HMD Nokia cihazında), arayüzü ve adb üzerinden uygulamayı sildikten sonra bile varlıkların tutulduğunu gördük.

Ekleme cevabı:

android:allowBackup="false" android:fullBackupOnly="false"

Açıkçası, bu yeni bir cevap değil - bizimle aynı pozisyonda olan insanlar için bir gözlem.


2

Android 10'u hedefliyorsanız android:hasFragileUserData="true", uygulama etiketiniAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="true"
    android:hasFragileUserData="true">

    .....

     </application>

 </manifest>

android: hasFragileUserData yeni bir manifest ayarıdır (tahmin ediyorum). “Doğru ise kullanıcıdan uygulamanın verilerini kaldırmaya devam etmesi istenir”. Bu kötüye kullanım için olgun görünüyor, ancak bazı uygulamalar için nerede yararlı olabileceğini görebiliyorum.

Bkz. Https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.