现在我们可以从远程 Shell 检查 sqlite3 数据库,是否可以从 adb shell 检查 SharedPreferences?因为在调试时从命令行检查和操作 SharedPreferences 会更方便。
或者换一种说法,SharedPreferences保存在哪些文件中,如何查看和修改这些文件?
现在我们可以从远程 Shell 检查 sqlite3 数据库,是否可以从 adb shell 检查 SharedPreferences?因为在调试时从命令行检查和操作 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
为您的应用程序 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
现在 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
如果你在 Flutter 中使用shared_preferences,文件是/data/data/your.app.package.name/shared_prefs/FlutterSharedPreferences.xml
. 请注意,如果您编辑该文件,则必须重新启动您的应用程序才能让您的应用程序看到您的更改。进行热重载/热重启不会将您的手动更改暴露给您的应用程序。
如果您想从 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
不要忘记重新启动应用程序以查看结果。