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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top