Aplikasi Android mengingat datanya setelah menghapus dan menginstal ulang

194

Saat mengembangkan aplikasi Android yang menargetkan semua versi di atas 4.1, saya mengamati bahwa mencopot aplikasi saya dan menginstalnya lagi tidak menghapus datanya.

Aplikasi ini dirancang untuk menyimpan detail yang diminta di layar pertamanya. Setelah menghapus dan menginstal lagi di OS versi 4.4.4, aplikasi meminta pengguna untuk mengisi data, yang normal. Namun dalam versi 6.0 urutan instal / hapus instalan yang sama mengembalikan data input aslinya.

Saya mencoba memastikan dengan mengunjungi /data/data/my package folderuntuk melihat basis data yang hilang setelah menghapus instalan dan memang folder itu dihapus saat menghapus instalan.

Saya mencoba menghapus aplikasi dengan mengunjungi halaman pengaturan, melalui Titanium Backup dan hasilnya sama. Perangkat ini berakar Nexus 5 menjalankan v6.0.

Apa yang bisa menjadi alasan perilaku aneh ini?

Narayanan
sumber

Jawaban:

329

Itu karena Android 6 memiliki cadangan otomatis. Anda perlu menyetel android:allowBackupdan tag android:fullBackupContentmanifes <application>Anda jika Anda tidak ingin data Anda dicadangkan atau jika Anda ingin menyertakan atau mengecualikan beberapa sumber daya. Itu bukan bug.

Lebih lanjut tentang AutoBackup di Android di sini .

greywolf82
sumber
28
Ini adalah jawaban yang benar dan itu berfungsi untuk saya (saya memiliki masalah yang sama) Untuk menghindari perilaku ini, Anda perlu meletakkan android: allowBackup = "false" dan android: fullBackupContent = "false" dalam manifest.xml
frusso
33
Jika beberapa dari Anda bertanya-tanya, android: allowBackup dan android: fullBackupContent adalah properti yang ditambahkan di <application />
Jack '
2
Dari dokumentasi: android: fullBackupContent menunjuk ke file XML yang berisi opsi cadangan. Secara default, sebagian besar file dicadangkan. Meskipun pengaturan ini ke "false" tidak memicu kesalahan, saya kira itu salah untuk diatur.
bajicdusko
3
Tidak yakin mengapa mereka menjaga perilaku default untuk mengambil cadangan, karena perilaku tersebut tidak sinkron dengan versi sebelumnya sehingga menjadi menjengkelkan. Mereka yang menginginkannya bisa menyalakannya.
Atul
7
Adakah yang tahu cara menghapus cadangan?
1800 INFORMASI
31

Jawaban greywolf82 benar tetapi saya ingin menambahkan beberapa info untuk ini.

Ketika mengembangkan aplikasi Android saya (menggunakan Xamarin), saya perhatikan bahwa setiap kali saya meluncurkan kembali aplikasi dari Visual Studio, data saya akan kembali ke data dari beberapa bulan yang lalu. Tidak masalah jika saya berhenti dan menjalankannya kembali dari VS, atau jika saya benar-benar menghapus aplikasi dan menginstalnya kembali.

Perlu juga dicatat bahwa kami tidak pernah secara eksplisit memberi tahu aplikasi untuk menyimpan cadangan.

Cadangan juga tampaknya menimpa data yang lebih baru saat meluncurkan dari Visual Studio, dan kami memiliki laporan pengguna yang menggunakan rilis rilis aplikasi kami dan juga mendapatkan data yang lebih baru ditimpa oleh cadangan.

Karena saya tidak tahu persis kapan pencadangan dan pemulihan terjadi, fitur ini tampaknya hanya menimbulkan masalah.

Kami telah memodifikasi AndroidManifest kami seperti yang ditunjukkan pada xml berikut:

<?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>

Setelah kami secara eksplisit mengatur nilai ke false, semua tampak berfungsi. Saya berharap ini menjadi fitur opt-in tapi ... sepertinya mungkin diaktifkan secara default untuk aplikasi yang tidak menentukan nilainya.

Victor Chelaru
sumber
Terima kasih. Saya memiliki masalah yang sama.
Hadi Fooladi Talari
15

Anda harus memeriksa pengaturan Cadangan dan Reset perangkat Anda, dan mematikan Pemulihan otomatis (saat menginstal ulang aplikasi, pengaturan yang dicadangkan, dan data akan dipulihkan.)

Mematikan cadangan otomatis berbeda dari pemulihan otomatis. Jika menurut Anda akan sangat membantu untuk mengaktifkan pencadangan otomatis untuk aplikasi Anda. Tetapi jika Anda berpikir ini akan membuat pengguna akhir yang tidak menyadari bahwa fitur pengembalian otomatis perangkat mereka dihidupkan, jangan ragu untuk mematikannya.

Dalam kasus saya, saya mematikan fitur allowBackup, tetapi karena saya sudah memiliki cadangan dari versi sebelumnya di Cloud, itu masih terus memulihkan.

Lihat gambar sebagai referensi untuk perangkat Samsung di Android 6.0. Perangkat dan versi lain mungkin memiliki layar yang berbeda. Lihat gambar di bawah.

Automatic Restore Setting di bawah Backup and Reset

Matcieou7
sumber
Saya memiliki masalah yang sama, aplikasi saya telah mencadangkan data untuk beberapa pengguna saat diaktifkan. Apakah ada kemungkinan untuk menghapus / membuang data yang disinkronkan?
Aditya Chauhan
5

Saya baru-baru ini perlu mengambil keuntungan dari fitur-fitur ini, saya dapat mengungkap dokumentasi dan setelah pengujian ekstensif inilah yang dapat saya simpulkan:

Android: allowbackup - akan mencadangkan data aplikasi lokal di perangkat tempatnya berada.

Android: fullBackupContent - digunakan bersama dengan api pemulihan cadangan Google dan BISA dikontrol melalui file xml untuk menentukan apa tepatnya yang akan dicadangkan, serta kelas BackupManager yang dapat Anda terapkan untuk kontrol lebih lanjut atas proses.

Namun dokumentasi menyatakan, dan saya telah mengkonfirmasi dengan pengujian, bahwa pemulihan hanya akan terjadi baik ketika perangkat dipulihkan dan proses data aplikasi pemulihan dipicu. ATAU itu juga akan mengembalikan ketika aplikasi di-sideload melalui adb, yang kami lakukan ketika kami menjalankan aplikasi untuk pengujian atau debug pada perangkat kami melalui Android Studio. Perhatikan bahwa jika Anda mengatur android: allowbackup tetapi tidak mengkonfigurasi android: fullBackupContent dengan kode Google api maka data aplikasi hanya akan disimpan secara lokal, sedangkan jika Anda mengonfigurasinya dengan benar maka jika aplikasi Anda dicadangkan dan Anda mendapatkan perangkat baru aplikasi tersebut data disimpan di cloud sehingga dapat dipulihkan pada perangkat baru.

Xijukx
sumber
3

Menambahkan android: allowBackup = "false" di bawah tag aplikasi dalam file Manifest menyelesaikan masalah saya.

Ini dia dokumentasi android untuk Cadangkan data pengguna dengan Auto Backup

Vinay John
sumber
2

Cukup ganti android: allowBackup = "true" ke android: allowBackup = "false" di manifiest.xml. Itu akan berhasil.

<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>
Nag Kosanam
sumber
2

Hanya menambahkan ini, kami menemukan bahwa di Android 9 (pada perangkat HMD Nokia) bahwa aset dimiliki, bahkan setelah menghapus aplikasi melalui antarmuka dan melalui adb.

Jawaban menambahkan:

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

Jelas, ini bukan jawaban baru - tetapi sebuah pengamatan untuk orang-orang yang berada di posisi yang sama dengan kita.

JRK
sumber
2

Jika Anda menargetkan Android 10 maka Anda harus memasukkan android:hasFragileUserData="true"tag aplikasiAndroidManifest.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 adalah pengaturan manifes baru (saya menduga). "Jika benar, pengguna diminta untuk menyimpan data aplikasi di uninstall". Tampaknya ini sudah siap untuk disalahgunakan, tetapi saya bisa melihat di mana itu mungkin berguna untuk beberapa aplikasi.

Lihat https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html

Manohar Reddy
sumber