Как проверить SharedPreferences из adb shell?
-
12-09-2019 - |
Вопрос
Теперь, когда мы можем Проверка баз данных sqlite3 из удаленной командной оболочки, можно ли проверить SharedPreferences из adb shell?Поскольку было бы гораздо удобнее проверять SharedPreferences и манипулировать ими из командной строки при отладке.
Или сформулировать по-другому, в каких файлах сохраняются SharedPreferences, и как просматривать и изменять эти файлы?
Решение
Хорошо, я нашел файл сразу после того, как поднял вопрос выше.(Похоже, публичное задавание вопросов стимулирует меня к самостоятельному поиску ответов гораздо более усердно, поскольку я не хочу, чтобы мои дорогие коллеги считали меня ленивым программистом.)
Это XML-файл в разделе /data/data/your.app.package.name/shared_prefs
, и имя файла равно your.app.package.name_preferences.xml.Действительно легко изменить настройки, когда вы выясняете, что содержимое - это всего лишь карта ключ-значение.
Другие советы
Если приложение является отлаживаемый вы могли бы сделать:
$ 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/
Я использую этот удобный однострочник для извлечения, редактирования в 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 должен быть запущен в режиме root: adb root
Вспомогательная функция 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
}
В случае, если кто-либо еще столкнется с ошибками "Отказано в разрешении", используя все вышеперечисленные предложения, как и я, вам, возможно, потребуется использовать exec-out
вот так:
adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
Сначала извлеките файл общих настроек с устройства.Для этого требуется разрешение root.
adb pull /data/data/org.test/shared_prefs/MyKeys.xml MyKeys.xml
Now 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