web-dev-qa-db-fra.com

Comment examiner les SharedPreferences à partir du shell adb?

Maintenant que nous pouvons Examiner les bases de données sqlite3 à partir d’un shell distant , est-il possible d’examiner les références partagées à partir d’un shell adb? Puisqu'il serait beaucoup plus pratique d'examiner et de manipuler SharedPreferences à partir de la ligne de commande lors du débogage.

Ou, autrement dit, dans quels fichiers SharedPreferences sont enregistrés et comment visualiser et modifier ces fichiers?

35
an0

Bien, j'ai trouvé le fichier juste après avoir soulevé la question ci-dessus. (Il semble que le fait de poser des questions publiquement me pousse à chercher les réponses par moi-même avec beaucoup plus de diligence, car je ne veux pas que mes chers pairs me considèrent comme un programmeur paresseux.)

Il s'agit d'un fichier XML sous /data/data/your.app.package.name/shared_prefs et le nom du fichier est votre.app.package.nom_preferences.xml. Il est très facile de modifier les préférences lorsque vous vous rendez compte que le contenu est simplement une carte clé-valeur.

43
an0

Si l'application est debugable vous pourriez faire: 

$ adb Shell
$ run-as <app-package-id>
$ cat /data/data/<app-package-id>/shared_prefs/prefs.xml

Notez que la préférence peut être stockée dans un autre fichier afin de mieux Vérifier le répertoire pour le trouver:

$ ls /data/data/<app-package-id>/shared_prefs/
31
joecks

J'utilise ce one-liner pratique pour extraire, modifier dans vim et définir les préférences partagées d'une application:

APP_ID=com.myapp; adb pull /data/data/${APP_ID}/shared_prefs/${APP_ID}_preferences.xml /tmp/${APP_ID}_preferences.xml && vim /tmp/${APP_ID}_preferences.xml && adb Push /tmp/${APP_ID}_preferences.xml /data/data/${APP_ID}/shared_prefs/

Il suffit de définir APP_ID avec votre identifiant d'application.

Notez que cela suppose que vous utilisez le nom de fichier par défaut pour les préférences partagées, obtenu à partir de PreferenceManager.getDefaultSharedPreferences(context). De plus, ADB doit être exécuté en mode racine: adb root

6
friederbluemle

Helper bash alias fonction

function adb-pull-prefs {
    # ${1} - app package
    # ${2} - prefs name
    adb exec-out run-as ${1} cat /data/data/${1}/shared_prefs/${2}.xml
}
3
eleven

Si quelqu'un d'autre rencontre des erreurs "Autorisation refusée" en utilisant toutes les suggestions ci-dessus comme je le faisais, vous devrez peut-être utiliser exec-out comme ceci:

adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
2
CFL_Jeff

Tout d'abord, extrayez le fichier de préférences partagé de l'appareil. Cela nécessite une permision de racine.

adb pull /data/data/org.test/shared_prefs/MyKeys.xml MyKeys.xml

MyKeys.xml est maintenant stocké dans le répertoire actuel de votre système. 

Modifier les valeurs en

vim MyKeys.xml

Après avoir modifié le fichier, enregistrez les modifications et Push to device.

adb Push MyKeys.xml /data/data/org.test/shared_prefs/MyKeys.xml

Pour vérifier vos modifications 

adb Shell
cat /data/data/org.test/shared_prefs/MyKeys.xml
0
ShivBuyya