androidsharedpreferences

Android "remembers" shared preferences after complete app uninstall


In my Android app I use a set of randomly generated file names to store some data. In order to ensure that the same set of file names are generated at app restart - and are yet different for each app installation - I start off the process by picking the names as substrings from a long string of random alphanumeric characters which I generate when the app is installed. This latter string is stored in Shared Prefereneces.

As I am testing out the app I have run into a rather peculiar issue. From time-to-time I make major changes so I fully uninstall the app - and even Force Close it + clear all its data. At that point I would expect that the device would have no "prior knowledge" of the app if it is reinstalled. And yet I find that the Shared Preferences string is somehow "remembered". This causes havoc if in the interim I have changed how the file name substrings are picked up from the stored shared preferences string.

How can I ensure that the app has "zero memory" of a previously installed version that has subsequently been uninstalled?


One solution I have used in the past is to instruct Android not to do any backups via the manifest file, android:allowBackup = "false". However, I have backed away from that idea since - unless I am mistaken - it effectively means that I am stopping the user from porting their app over to a new device when they decide to change handsets.


Solution

  • On (re)install, your app may be restoring files from Google auto-backup (via Google Drive). To disable this feature, you can explicitly set it to false in the manifest:

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

    If you'd like more granular control over what is backed up/restored and what is not, you can include or exclude specific files from the backups.

    See auto backup documentation: https://developer.android.com/guide/topics/data/autobackup#EnablingAutoBackup

    If you don't want to disable auto backups, but want to reinstall with a "clean slate" (for testing purposes), you can do one of the following:

    See how to test backups documentation: https://developer.android.com/guide/topics/data/testingbackup#TestingBackup