Как просмотреть SharedPreferences из оболочки adb?

Теперь, когда мы можем Изучать базы данных sqlite3 из удаленной оболочки, можно ли просмотреть SharedPreferences из оболочки adb? Поскольку было бы гораздо удобнее рассматривать и управлять SharedPreferences из командной строки при отладке.

Или иначе, в каких файлах сохраняются SharedPreferences и как просматривать и изменять эти файлы?

Ответ 1

Хорошо, я нашел файл сразу после того, как поднял вопрос выше. (Кажется, задавать вопросы публично стимулировать меня к поиску ответов мною более усердно, так как я не хочу, чтобы мои дорогие коллеги рассматривали меня как ленивого программиста.)

Это файл XML под /data/data/your.app.package.name/shared_prefs, а имя файла - ваш .app.package.name_preferences.xml. Очень легко изменить настройки, когда вы выясните, что контент - это всего лишь карта с ключом.

Ответ 2

Если приложение debugable, вы можете сделать:

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

Обратите внимание, что предпочтение может быть сохранено в другом файле, поэтому лучше проверьте каталог, чтобы найти его:

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

Ответ 3

Я использую этот удобный однострочный движок, который вытягивает, редактирует в vim и нажимает общие настройки для приложения:

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/

Просто установите APP_ID на свой идентификатор приложения.

Обратите внимание, что это предполагает, что вы используете имя файла по умолчанию для общих настроек, как получено из PreferenceManager.getDefaultSharedPreferences(context). Кроме того, ADB должен работать в корневом режиме: adb root

Ответ 4

Вспомогательная функция 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
}

Ответ 5

В случае, если кто-то еще сталкивается с ошибками "Отказано в доступе", используя все вышеперечисленные предложения, как я, вам может понадобиться использовать exec-out следующим образом:

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

Ответ 6

Сначала вытащите файл общих предпочтений с устройства. Для этого требуется корневое разрешение.

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

Теперь MyKeys.xml хранится в текущем каталоге вашей системы.

Изменить значения

vim MyKeys.xml

После редактирования файла сохранить изменения и нажать на устройство.

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

Чтобы проверить свои изменения

adb shell
cat /data/data/org.test/shared_prefs/MyKeys.xml