web-dev-qa-db-fra.com

Comment empêcher la sauvegarde automatique d'une application Android?

Je suis confronté à une situation très étrange sur certains appareils (Nexus 5x avec Android 7): lorsque je nettoie et désinstalle ses données, puis l’installe avec Studio, l’application n’est pas unifiée, mais elle utilise les données du 24 janvier! J'ai essayé la même procédure avec une tablette et l'application n'a pas de données.

J'ai répété cette procédure plusieurs fois, j'ai nettoyé mon projet, je l'ai reconstruit plusieurs fois et il commence toujours par les données du 24 janvier (les préférences de base de données et partagées).

J'ai même essayé adb Shell et je cours pour nettoyer les données:

bullhead:/data/data/lelisoft.com.lelimath.debug $ ls -l databases/
total 232
-rw-rw---- 1 u0_a259 u0_a259 98304 2017-02-05 11:03 lelimath.sqlite
-rw------- 1 u0_a259 u0_a259 16928 2017-02-05 11:03 lelimath.sqlite-journal

Je les ai supprimés et l'application semblait vide - jusqu'à ce que je la supprime et que je l'installe à nouveau - le 24 janvier était de retour.

Ceci est un journal comment ça commence:

$ adb Shell am start -n "lelisoft.com.lelimath.debug/lelisoft.com.lelimath.activities.DashboardActivity" -a Android.intent.action.MAIN -c Android.intent.category.LAUNCHER -D
Waiting for application to come online: lelisoft.com.lelimath.debug | lelisoft.com.lelimath.debug.test
I/InstantRun: Instant Run Runtime started. Android package is lelisoft.com.lelimath.debug, real application class is lelisoft.com.lelimath.helpers.LeliMathApp.
D/l.c.l.h.LeliMathApp: onCreate()
D/l.c.l.h.BalanceHelper: Current points balance: 234

Ceci est un emplacement d'une base de données, obtenue d'un débogueur:

/data/user/0/lelisoft.com.lelimath.debug/databases/lelimath.sqlite

Gradle:

Android {
signingConfigs {
}
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
    applicationId "lelisoft.com.lelimath"
    resValue 'string', 'app_name', 'LeliMath'
    minSdkVersion 16
    targetSdkVersion 24
    versionCode 300
    versionName '3.0.0'
    resValue "string", "app_build_number", getDate();
    resValue "string", "app_version", versionName;
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }

    debug {
        applicationIdSuffix ".debug"
        resValue 'string', 'app_name', 'LeliMath DEV'
    }
}

Partie manifeste:

<application
    Android:name=".helpers.LeliMathApp"
    Android:allowBackup="true"
    Android:fullBackupContent="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme"
    tools:ignore="GoogleAppIndexingWarning">

Je ne veux pas que mon téléphone soit réinitialisé en usine pour se débarrasser de ces données. Je ne pense pas que ces données sont dans ma construction. Je ne les ai pas ajoutés et l'application de la tablette était vide lors de son installation.

13
Leos Literak

Depuis Android 6.0 (v 23), Android a introduit une nouvelle fonctionnalité appelée Sauvegarde automatique pour les applications . Cela permet de sauvegarder certains fichiers d'une application sur le lecteur Google d'un utilisateur. La liste des fichiers qu'il met à jour comprend:

  • Fichiers de préférences partagés
  • Fichiers du répertoire renvoyés par getFilesDir()
  • Fichiers du répertoire renvoyés par getDatabasePath(String)
  • Fichiers dans les répertoires créés avec getDir(String, int)
  • Fichiers sur le stockage externe dans le répertoire renvoyé par getExternalFilesDir(String)

Maintenant, cette ligne dans le manifest.xml en est responsable:

Android:allowBackup="true"

Si vous préférez désactiver la sauvegarde, devez-vous choisir de définir la valeur sur false.

De plus, les données sauvegardées sont espacées de 24 heures et Android utilise l'API JobScheduler à cette fin, ce qui signifie qu'un utilisateur n'a aucun contrôle sur le processus de transfert des données.

De plus, l'espace pour les sauvegardes automatiques est limité à 25MB et n'est pas comptabilisé dans le quota d'espace de l'utilisateur.

En outre, vous pouvez définir sur <include> et <exclude> certains types de données en cours de téléchargement. Par exemple, vous n'avez peut-être pas besoin de sauvegarder les données confidentielles de l'utilisateur. Il est donc flexible pour cela également. Pour plus d'informations, rendez-vous sur: Android Auto Sauvegarde des applications (100 jours de Google Dev)

19
OBX

J'ai eu le même problème et j'ai vraiment dû me gratter la tête, car Google n'a pas mis en évidence de changement subtil dans la fonctionnalité de sauvegarde des applications. À partir du niveau 23 de l'API, toutes les données des applications seront automatiquement sauvegardées sur Google Drive. Ces données seraient restaurées lors de la réinstallation de l'application. Ainsi, les données ne disparaissent pas, même lorsque vous désinstallez l'application. 

Surtout le manifeste de votre application aurait une entrée comme celle-ci - 

Android:allowBackup="true"

Modifiez la valeur en false ou suivez le lien ci-dessous et configurez un fichier XML permettant au service de sauvegarde de savoir ce qu'il faut sauvegarder et ce qu'il ne faut pas faire.

https://developer.Android.com/guide/topics/data/autobackup.html

1
Dibzmania
<application ...
    Android:allowBackup="false"
    Android:fullBackupContent="false"
    tools:replace="Android:allowBackup"
</application>
1
Ashwin Khadgi

Il suffit de changer 

Android:allowBackup="true"

à 

Android:allowBackup="false"

Et si vous utilisez une dépendance, pour remplacer cette propriété, utilisez 

tools:replace="Android:allowBackup"
Android:allowBackup="false"
0
Vikash Bijarniya