Как просмотреть 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