现在,我们可以从一个远程Shell检查sqlite3的数据库 ,是它可以检查从亚行外壳SharedPreferences? 由于这将是更方便检查和调试时在命令行操作SharedPreferences。
或以另一种方式,在哪些文件SharedPreferences保存,以及如何查看和修改这些文件?
现在,我们可以从一个远程Shell检查sqlite3的数据库 ,是它可以检查从亚行外壳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
助手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
先拉共享偏好从设备文件。 这需要根permision。
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