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.
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:
getFilesDir()
getDatabasePath(String)
getDir(String, int)
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é à 25
MB 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)
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
<application ...
Android:allowBackup="false"
Android:fullBackupContent="false"
tools:replace="Android:allowBackup"
</application>
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"