45

现在我们可以从远程 Shell 检查 sqlite3 数据库,是否可以从 adb shell 检查 SharedPreferences?因为在调试时从命令行检查和操作 SharedPreferences 会更方便。

或者换一种说法,SharedPreferences保存在哪些文件中,如何查看和修改这些文件?

4

8 回答 8

50

好吧,我是在我提出上述问题后才找到该文件的。(公开提问似乎促使我更加努力地自己寻找答案,因为我不希望我亲爱的同行将我视为一个懒惰的程序员。)

它是一个XML文件/data/data/your.app.package.name/shared_prefs,文件名为your.app.package.name_preferences.xml。当您发现内容只是一个键值映射时,修改首选项真的很容易。

于 2009-08-07T06:00:08.143 回答
41

如果应用程序是可调试的,你可以这样做:

$ 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/
于 2016-01-09T14:21:50.763 回答
13

我正在使用这个方便的单线来拉取、在 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为您的应用程序 ID。

请注意,这假设您使用共享首选项的默认文件名,从PreferenceManager.getDefaultSharedPreferences(context). 此外,ADB 需要以 root 模式运行:adb root

于 2016-02-24T10:28:36.620 回答
5

助手 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
}
于 2018-04-04T15:24:58.950 回答
4

如果其他人像我一样使用上述所有建议遇到​​“权限被拒绝”错误,您可能需要exec-out像这样使用:

adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml
于 2018-03-12T12:43:54.970 回答
1

首先从设备中提取共享首选项文件。这需要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
于 2017-07-18T03:35:32.393 回答
1

如果你在 Flutter 中使用shared_preferences,文件是/data/data/your.app.package.name/shared_prefs/FlutterSharedPreferences.xml. 请注意,如果您编辑该文件,则必须重新启动您的应用程序才能让您的应用程序看到您的更改。进行热重载/热重启不会将您的手动更改暴露给您的应用程序。

于 2020-09-06T17:06:25.400 回答
0

如果您想从 adb脚本编辑共享首选项,请在此处查看如何在 Android 模拟器上获取 root 权限。(如果在您的情况下使用 'adb root' 还不够)。

如果你想在 Android 上安装 vi 编辑器/busybox 去这里。[选修的]

要编辑共享偏好值,您需要先将应用程序的 xml 文件复制到 SDstorage,将其复制到本地文件系统,编辑然后上传回手机。

adb shell
su
cp /data/data/com.your.package.name/shared_prefs/com.your.package.name_preferences.xml /storage/emulated/0/
adb pull /storage/emulated/0/com.your.package.name_preferences.xml
nano com.your.package.name_preferences.xml
adb push com.your.package.name_preferences.xml /storage/emulated/0/com.your.package.name_preferences.xml
cp /storage/emulated/0/com.your.package.name_preferences.xml /data/data/com.your.package.name/shared_prefs/com.your.package.name_preferences.xml

不要忘记重新启动应用程序以查看结果。

于 2020-10-14T09:41:50.173 回答