Вопрос

Теперь, когда мы можем Проверка баз данных 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top