Como examinar SharedPreferences de adb shell?
-
12-09-2019 - |
Pergunta
Agora que podemos Examinando sqlite3 bancos de dados a partir de um remoto Shell , é possível examinar SharedPreferences de adb shell? Uma vez que seria muito mais conveniente para examinar e manipular SharedPreferences de linha de comando quando a depuração.
Ou, dito de outra forma, em que arquivos SharedPreferences são salvas, e como visualizar e modificar esses arquivos?
Solução
Fine, eu encontrei o arquivo logo depois que levantou a questão acima. (Ele parece fazer perguntas publicamente estimular-me a procurar respostas por mim muito mais diligentemente, desde que eu não quero que meus queridos colegas para ver-me como um programador preguiçoso.)
É um arquivo XML sob /data/data/your.app.package.name/shared_prefs
, eo nome do arquivo é your.app.package.name_preferences.xml. É realmente fácil de modificar as preferências quando você descobrir que o conteúdo é apenas um mapa de valores-chave.
Outras dicas
Se o aplicativo é debugable você pode fazer:
$ adb shell
$ run-as <app-package-id>
$ cat /data/data/<app-package-id>/shared_prefs/prefs.xml
Note que a preferência pode ser armazenado em outro arquivo então é melhor verifique o diretório para encontrá-lo:
$ ls /data/data/<app-package-id>/shared_prefs/
Eu estou usando este one-liner conveniente para puxar, editar no vim, e empurre preferências compartilhados para uma aplicação:
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/
Apenas conjunto APP_ID
ao seu ID de aplicação.
Note que este assume que você está usando o nome de arquivo padrão para as preferências compartilhados, como obtido PreferenceManager.getDefaultSharedPreferences(context)
. Além disso, o BAD tem de ser executado no modo de root: adb root
Função festa 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
}
No caso de alguém mais está funcionando em "Permission Denied" erros usando todas as sugestões acima como eu estava, você pode precisar usar exec-out
assim:
adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
Primeiro puxar compartilhada arquivo de preferências do dispositivo. Isso requer permision raiz.
adb pull /data/data/org.test/shared_prefs/MyKeys.xml MyKeys.xml
Agora MyKeys.xml é armazenado no diretório atual de seu sistema.
Modifique os valores de
vim MyKeys.xml
Depois de editar arquivo de save mudanças e empurrar para o dispositivo.
adb push MyKeys.xml /data/data/org.test/shared_prefs/MyKeys.xml
Para verificar as alterações
adb shell
cat /data/data/org.test/shared_prefs/MyKeys.xml