既然我们可以从远程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$ cat /data/data/ /shared_prefs/prefs.xml
请注意,首选项可能存储在另一个文件中,因此最好检查目录以找到它:
$ ls /data/data//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 }