Comment examiner SharedPreferences de adb shell?
-
12-09-2019 - |
Question
Maintenant que nous pouvons examen des bases de données sqlite3 d'une télécommande Shell , est-il possible d'examiner SharedPreferences de adb shell? Comme il serait beaucoup plus pratique pour examiner et manipuler SharedPreferences de la ligne de commande lors du débogage.
Ou en d'autres termes, dans ce que les fichiers SharedPreferences sont enregistrés, et comment afficher et modifier ces fichiers?
La solution
Très bien, je trouve le fichier juste après que je posé la question ci-dessus. (Il semble poser des questions me stimuler publiquement à rechercher des réponses par moi-même beaucoup plus avec diligence, puisque je ne veux pas que mes chers collègues me considèrent comme un programmeur paresseux.)
Il est un fichier XML sous /data/data/your.app.package.name/shared_prefs
, et le nom du fichier est your.app.package.name_preferences.xml. Il est très facile de modifier les préférences lorsque vous figurez que le contenu est juste une carte clé-valeur.
Autres conseils
Si l'application est debugable vous pouvez 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érifiez le répertoire pour trouver:
$ ls /data/data/<app-package-id>/shared_prefs/
J'utilise cette pratique d'une doublure pour tirer, modifier dans vim, et pousser les préférences partagées pour 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 régler APP_ID
à votre identifiant d'application.
Notez que cela suppose que vous utilisez le nom de fichier par défaut des préférences partagées, obtenue à partir PreferenceManager.getDefaultSharedPreferences(context)
. En outre, la BAD doit être en cours d'exécution en mode root: adb root
Fonction bash Helper
function adb-pull-prefs {
# ${1} - app package
# ${2} - prefs name
adb exec-out run-as ${1} cat /data/data/${1}/shared_prefs/${2}.xml
}
Dans le cas où tout le monde est en cours d'exécution dans les autres erreurs « Autorisation refusée » en utilisant toutes les suggestions ci-dessus comme moi, vous pourriez avoir besoin d'utiliser exec-out
comme ceci:
adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
Tirer d'abord préférences partagées fichier à partir du périphérique. Cela nécessite permision racine.
adb pull /data/data/org.test/shared_prefs/MyKeys.xml MyKeys.xml
MyKeys.xml est stocké dans le répertoire courant de votre système.
Modification des valeurs par
vim MyKeys.xml
Après le fichier d'édition Enregistrer les modifications et pousser à l'appareil.
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