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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top