如何检查adb shell中的SharedPreferences?

时间:2009-08-07 05:45:00

标签: android adb android-sharedpreferences

既然我们可以Examining sqlite3 Databases from a Remote Shell,是否可以从adb shell检查SharedPreferences?因为在调试时从命令行检查和操作SharedPreferences会更方便。

或换句话说,在什么文件中保存SharedPreferences,以及如何查看和修改这些文件?

8 个答案:

答案 0 :(得分:45)

很好,我在上面提出问题之后就找到了这个文件。 (似乎提出问题公开刺激我更加努力地搜索自己的答案,因为我不希望亲爱的同伴把我视为一个懒惰的程序员。)

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

答案 1 :(得分:33)

如果应用可调试,您可以执行以下操作:

$ 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/

答案 2 :(得分:9)

我正在使用这种方便的单线程来拉取,在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

答案 3 :(得分:3)

Helper bash alias功能

function adb-pull-prefs {
    # ${1} - app package
    # ${2} - prefs name
    adb exec-out run-as ${1} cat /data/data/${1}/shared_prefs/${2}.xml
}

答案 4 :(得分:2)

如果有其他人遇到&#34;权限被拒绝&#34;如上所述使用上述所有建议的错误,您可能需要使用exec-out,如下所示:

adb exec-out run-as <package.name> cat /data/data/<package.name>/shared_prefs/<package.name>_preferences.xml

答案 5 :(得分:1)

如果您将shared_preferences用于Flutter,则文件为/data/data/your.app.package.name/shared_prefs/FlutterSharedPreferences.xml。请注意,如果您编辑文件,则必须重新启动应用程序,以使您的更改对您的应用程序可见。进行热重新加载/热重新启动不会将您的手动更改显示给应用程序。

答案 6 :(得分:0)

首先从设备中提取共享首选项文件。这需要根渗透。

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

答案 7 :(得分:0)

如果您要从adb 脚本中编辑共享首选项,请查看如何在Android模拟器here上获得根目录。 (如果您使用的是'adb root'还不够)。

如果您想在Android上安装vi编辑器/ busybox,请转到here。 [可选]

要编辑共享的首选项值,您需要先 COPY应用程序的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

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