Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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