Как проверить SharedPreferences из оболочки adb? - PullRequest
38 голосов
/ 07 августа 2009

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

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

Ответы [ 6 ]

45 голосов
/ 07 августа 2009

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

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

34 голосов
/ 09 января 2016

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

$ 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/
9 голосов
/ 24 февраля 2016

Я использую эту удобную однострочную строку для извлечения, редактирования в 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

3 голосов
/ 04 апреля 2018

Функция псевдонима помощника 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
}
2 голосов
/ 12 марта 2018

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

adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
0 голосов
/ 18 июля 2017

Сначала извлеките файл общих настроек с устройства. Это требует разрешения root.

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
...