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?
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.
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/
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
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
}
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
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