既然我们可以Examining sqlite3 Databases from a Remote Shell,是否可以从adb shell检查SharedPreferences?因为在调试时从命令行检查和操作SharedPreferences会更方便。
或换句话说,在什么文件中保存SharedPreferences,以及如何查看和修改这些文件?
答案 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
不要忘记重新启动应用以查看结果。