Pregunta

Ahora que podemos El examen de las bases de datos SQLite3 desde un shell remoto , es posible examinar SharedPreferences de adb shell? Ya que sería mucho más conveniente para examinar y manipular SharedPreferences desde la línea de comandos durante la depuración.

O dicho de otro modo, en lo que se guardan los archivos SharedPreferences, y la forma de ver y modificar estos archivos?

¿Fue útil?

Solución

Bella, he encontrado el archivo justo tras plantearle la pregunta anterior. (Se parece a hacer preguntas públicamente estimularme a buscar respuestas por mí mismo mucho más diligente, ya que no quiero que mis queridos compañeros me ven como un programador perezoso.)

Es un archivo XML en /data/data/your.app.package.name/shared_prefs, y el nombre del archivo es your.app.package.name_preferences.xml. Es muy fácil de modificar las preferencias cuando calculas que el contenido es solo un mapa clave-valor.

Otros consejos

Si la aplicación es debugable usted podría hacer:

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

Tenga en cuenta que la preferencia puede ser almacenada en otro archivo para una mejor comprobar el directorio para encontrar que:

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

Estoy usando este conveniente de una sola línea para tirar, editar, en vim, y empujar las preferencias compartidas para una aplicación:

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/

El sistema justo APP_ID a su identificador de aplicación.

Tenga en cuenta que esto supone que está utilizando el nombre de archivo predeterminado de preferencias compartidas, como se obtiene de PreferenceManager.getDefaultSharedPreferences(context). Además, el BAD debe estar en ejecución en modo root: adb root

función golpe ayudante

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

En el caso cualquier otra persona se está ejecutando en "Permiso denegado" errores utilizando todas las sugerencias anteriores como yo, puede que tenga que utilizar exec-out como esto:

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

En primer lugar tire archivo de preferencias compartidas desde el dispositivo. Esto requiere permiso expreso de la raíz.

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

Ahora MyKeys.xml se almacena en el directorio actual de su sistema.

Modificar valores por

vim MyKeys.xml

Después de archivo de edición Guardar cambios y empuje al dispositivo.

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

Para verificar los cambios

adb shell
cat /data/data/org.test/shared_prefs/MyKeys.xml
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top