Come esaminare SharedPreferences da adb shell?
-
12-09-2019 - |
Domanda
Ora che siamo in grado di L'esame di Database sqlite3 da una Shell Remota, è possibile esaminare SharedPreferences da adb shell?Dal momento che sarebbe molto più conveniente per esaminare e manipolare SharedPreferences da linea di comando quando il debug.
O per dirla in altro modo, in quali file SharedPreferences sono salvati, e come visualizzare e modificare questi file?
Soluzione
Bene, ho trovato il file solo dopo che ho sollevato la questione di cui sopra.(Sembra di fare domande pubblicamente mi stimolano a cercare risposte da solo molto di più diligente, dal momento che non voglio che I miei cari colleghi di vista me come un programmatore pigro.)
Si tratta di un file XML in /data/data/your.app.package.name/shared_prefs
, e il nome del file è your.app.package.name_preferences.xml.E ' davvero facile da modificare le preferenze quando si figura che il contenuto è un valore-chiave della mappa.
Altri suggerimenti
Se l'app è debugable si potrebbe fare:
$ adb shell
$ run-as <app-package-id>
$ cat /data/data/<app-package-id>/shared_prefs/prefs.xml
Nota che le preferenze possono essere memorizzati in un altro file in modo migliore controllare la directory per trovare:
$ ls /data/data/<app-package-id>/shared_prefs/
Sto utilizzando questo comodo one-liner, estrarre, modificare in vim, e spingere condiviso le preferenze di un'app:
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/
Basta impostare APP_ID
per il vostro id di applicazione.
Si noti che questo presuppone che si sta utilizzando il nome file predefinito per condiviso preferenze ottenute da PreferenceManager.getDefaultSharedPreferences(context)
.Inoltre, ADB ha bisogno di essere in esecuzione in modalità root: adb root
Helper funzione bash
function adb-pull-prefs {
# ${1} - app package
# ${2} - prefs name
adb exec-out run-as ${1} cat /data/data/${1}/shared_prefs/${2}.xml
}
In caso di chiunque altro è in esecuzione in "Permesso Negato" errori con tutti i suggerimenti sopra riportati sono come mi è stato, potrebbe essere necessario utilizzare exec-out
come questa:
adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
Prima di tirare condiviso preferenze di file dal dispositivo.Questo richiede root permision.
adb pull /data/data/org.test/shared_prefs/MyKeys.xml MyKeys.xml
Ora MyKeys.xml viene memorizzato nella directory corrente del sistema.
Modificare i valori di
vim MyKeys.xml
Dopo la modifica di file di salvare le modifiche e spingere al dispositivo.
adb push MyKeys.xml /data/data/org.test/shared_prefs/MyKeys.xml
Per Verificare le modifiche apportate
adb shell
cat /data/data/org.test/shared_prefs/MyKeys.xml