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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top