как удалить общие настройки при удалении приложения в Android

У меня есть приложение для Android для сохранения данных для входа, таких как имя пользователя и пароль, через SharedPreferences, которое отлично работает, но мне нужно удалить все используемые SharedPreferences при удалении моего приложения. Как это сделать?

SavePreferences("one ", "");
SavePreferences("two", "");
LoadPreferences();

 private void SavePreferences(String key, String value){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
   }

 private void LoadPreferences(){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    String strSavedMem1 = sharedPreferences.getString("MEM1", "");
    String strSavedMem2 = sharedPreferences.getString("MEM2", "");   
   } 

Я хочу удалить это SharedPreferences при удалении моего приложения.


person shivcena    schedule 08.04.2013    source источник
comment
Это будет автоматически удалено ОС Android при удалении приложения...   -  person umair.ali    schedule 08.04.2013
comment
спасибо за ценную деталь   -  person shivcena    schedule 08.04.2013
comment
Не на моем рутированном Samsung Galaxy 1 (Froyo). Еще остался в /dbdata/database/my.package/shared_prefs. Не знаю, потому ли это, потому что он укоренен или потому, что это Froyo. Не удалось протестировать новые устройства.   -  person Nilzor    schedule 29.10.2014


Ответы (6)


SharedPreferences всегда удаляется вместе с удалением приложения.

Когда вы удаляете любое приложение, все изменения, внесенные приложением во внутреннюю память, отменяются, это означает, что ваши файлы SharedPreference, другие файлы данных, файл базы данных, приложение автоматически удаляются ОС Android.

EDITED: 29/04/15: для >= 21 API см. @Maher Abuthraa answer

person Dhaval Parmar    schedule 08.04.2013
comment
Не так на Nexus 6P, выясняю это прямо сейчас. - person AndyRoid; 27.01.2016
comment
Да, я также заметил, что Nexus 5 с Android 6 не удаляет общие настройки. Мне пришлось перезагрузить устройство после удаления, и общие настройки исчезли. - person Santhana; 28.01.2016
comment
@AndyRoid: я не думаю, что это происходит. у меня нексус 5 с 6.1.1 никогда не бывает. тем не менее вы можете выполнить поиск в списке ошибок code.google.com/p/android/issues если нет связанной с этим ошибки, добавьте новую ошибку, чтобы они исправили ее как можно скорее. - person Dhaval Parmar; 29.01.2016
comment
Galaxy s7 здесь с той же проблемой. Я удаляю, и после установки общие настройки все еще установлены. Действительно раздражает, потому что я не могу протестировать новые установки, просто удалив их. - person Dpedrinha; 13.04.2016
comment
У @Maher Abuthraa есть правильный ответ, этот ответ неверен. - person Юрій Мазуревич; 26.04.2016
comment
галакси с6 край. и имеет ту же проблему. не удаляет значения в файле настроек. Следует попробовать ответ @Maher - person k9yosh; 02.06.2016
comment
технически этот ответ правильный, настройки удаляются, но на 21+ с включенным резервным копированием настройки восстанавливаются после установки - person tango whiskey double; 05.10.2016
comment
Устройство Samsung s8 s8+ также не удаляет общие настройки, я недавно тестировал. Полностью разочарована Самсунгом. - person Vrajesh; 30.04.2018

Проблема не в предпочтениях. Это просто менеджер резервного копирования! .. начиная с Android-23 по умолчанию резервное копирование, так как задача хранит данные приложения, включая настройки для облака. Позже, когда вы удалите, а затем установите более новую версию, вы, вероятно, будете использовать восстановленные настройки. Чтобы этого избежать, просто добавьте это в свой манифест (или хотя бы в отладочный манифест):

<application ...
        android:allowBackup="false">
...
</application>

Прочитайте это: http://developer.android.com/guide/topics/data/backup.html

Вы также увидите, что если вы запустите Lint под Android > Lint > Security:

предупреждение о ворсе при резервном копировании

Здесь хорошо упомянуть, что процесс резервного копирования подобен черному ящику.. вы не знаете, когда он начнется, и период между проверками... поэтому для разработчиков лучше его отключить.

==== Обновление ====

У вас могут возникнуть проблемы со слиянием манифеста после установки allowbackup на false. Чтобы исправить эту проблему, добавьте:

tools:replace="android:allowBackup"

в элементе приложения. Кредит @shahzain-ali

Кроме того, вы можете очистить кеш перед удалением приложения.

Я надеюсь, что это может помочь.

person Maher Abuthraa    schedule 09.02.2016
comment
Эй, я заметил, что на некоторых устройствах общие настройки сохраняются после удаления с помощью перезагрузки устройства. Это связано с этим? Если да, то безопасно ли устанавливать для этого флага значение false в производственных приложениях? Повлияет ли это на пользователя? - person Eliahu Horwitz; 06.08.2016
comment
Не рекомендуется устанавливать false в рабочей среде. Пользователь потеряет все настройки во время обновления. Лучше в рабочей среде перенести данные, если это необходимо. В отладочном коде настройки могут меняться много раз, где лучше отключить резервное копирование - person Maher Abuthraa; 07.08.2016
comment
Престижность @MaherAbuthraa .. Я столкнулся с проблемой сохранения определенных общих данных о предпочтениях после удаления и переустановки приложения. Никогда не знал, что такое делается. - person SoulRayder; 17.01.2017
comment
Большое спасибо! Вы спасли мою жизнь. - person hungtdo; 27.03.2017
comment
Как я могу убедиться, что настройки сохраняются во время обновления, но удаляются при удалении вручную? Конечно, это было бы ожидаемым поведением. - person Gannet; 22.08.2017
comment
Настройки @Gannet были бы удалены после удаления. но может быть восстановлено из облака позже. Это в конечном итоге отличается от того, что происходит во время обновления приложения. когда приложение обновляется, система сохраняет настройки. Чтобы достичь своей цели, просто установите эту команду выше, и ваше приложение никогда не восстановит настройки после удаления приложения. - person Maher Abuthraa; 25.08.2017
comment
@MaherAbuthraa спасибо за ответ. Я все еще немного запутался, потому что вы упомянули выше, что не рекомендуется делать это на производстве, потому что пользователь потеряет все настройки во время обновления. Вот что я пока понял: 1. Prefs всегда будут удаляться после деинсталляции, вне зависимости от allowBackup. 2. Настройки могут быть восстановлены из облака при переустановке, если для параметра allowBackup установлено значение true (лично я не думаю, что это уместно). 3. Обновления... не уверен. - person Gannet; 27.08.2017
comment
@ Ганнет. Начнем с того, что устройства на базе Android-23+ могут восстанавливать настройки после переустановки (не обновления). Как правило, это проблема с разработчиками и QA. Поскольку настройки могут часто меняться, и разработчики ожидают, что настройки будут потеряны при переустановке. Вот почему рекомендуется отключать резервное копирование только при отладке. это в случае, если приложение не имеет конфигурации резервного копирования. В рабочей среде приложение должно иметь план миграции, как перейти с более ранней версии Preferences на более новую, что на самом деле не рекомендуется делать с отладочными версиями во время разработки. чистый ? - person Maher Abuthraa; 31.08.2017
comment
Несмотря на то, что я оставил android:allowBackup="false" и tools:replace="android:allowBackup" свои предпочтения, есть идеи, в чем проблема? - person Shailendra Madda; 16.04.2018
comment
@ShylendraMadda Проверьте, есть ли у вас этот конкретный телефон или вообще. вы можете попробовать этот атрибут fullBackupContent. некоторые производители добавляют приложения для резервного копирования, которые не учитывают атрибут android:allowBackup . Я бы сказал для таких сценариев: действуйте агрессивно и очистите кеш при первом запуске приложения для этого конкретного телефона, если это такая критическая проблема. - person Maher Abuthraa; 26.07.2018
comment
Идеальное решение. Большое спасибо .. вы спасли мой день. - person Dnyanesh M; 07.08.2019
comment
Клянусь, я делал это раньше... после тестирования на новом телефоне я вернулся, и код оказался правдой.... очень-очень странно. - person Delark; 05.02.2021

Странно, но я нашел решение следующим образом:

  1. Добавьте xmlns:tools="http://schemas.android.com/tools" в тег манифеста файла Manifest.xml.
  2. Добавьте android:allowBackup="false" в тег приложения файла Manifest.xml.
  3. Добавьте tools:replace="android:allowBackup" в тег приложения файла Manifest.xml.

Файл Manifest.xml должен выглядеть следующим образом.

    <?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.package">

        // Other code

    <application
        android:name="com.package.Application"
        android:allowBackup="false"
        android:hardwareAccelerated="true"
        android:icon="@drawable/appicon"
        android:label="@string/application_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme"
        tools:replace="android:allowBackup">

        <activity
            android:name="com.package.SplashActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/application_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        // Other code

    </application>

    </manifest>

Это сделано.

person Hiren Patel    schedule 11.07.2017
comment
Ваша проблема заключалась в том, что один из ваших модулей/AAR имеет android:allowBackup=true .. Вот почему вам нужно снова настроить его с помощью инструментов атрибутов: заменить. - person Maher Abuthraa; 09.11.2017
comment
Несмотря на то, что я оставил android:allowBackup="false" и tools:replace="android:allowBackup" свои предпочтения, есть идеи, в чем проблема? - person Shailendra Madda; 16.04.2018
comment
Я также получаю ту же проблему. После добавления этого кода невозможно очистить настройки - person Pawan Soni; 12.05.2020

Проблема не в предпочтениях.

используйте этот код для исправления .......

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>
person Mohammad Faizan    schedule 24.09.2018
comment
Это помогло. Кстати, почему бы нам не установить для параметра allowbackup значение false? - person Shakle; 21.08.2019

Параметр allowBackup="false" отключает приложение как от резервного копирования, так и от восстановления.

 android:allowBackup="false"
person Mahendran Candy    schedule 09.08.2017

Общие настройки больше не всегда удаляются, как в зефире. Добавьте эту строку в свой манифест: android:allowBackup=false

person Binyamin Robbins    schedule 12.07.2020