如何从adb shell检查SharedPreferences?

现在我们可以从远程Shell检查sqlite3数据库了 ,是否可以从adb shell检查SharedPreferences? 因为debugging时从命令行检查和操作SharedPreferences要方便得多。

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

Solutions Collecting From Web of "如何从adb shell检查SharedPreferences?"

好吧,刚才我提出了上面的问题,我find了这个文件。 (似乎提出的问题公开激励着我更加努力地寻找答案,因为我不想让我亲爱的同行把我看成一个懒惰的程序员。)

它是/data/data/your.app.package.name/shared_prefs下的XML文件,文件名是your.app.package.name_preferences.xml。 当您发现内容仅仅是一个键值映射时,修改偏好非常容易。

如果应用程序是可debugging的,你可以这样做:

 $ adb shell $ run-as <app-package-id> $ cat /data/data/<app-package-id>/shared_prefs/prefs.xml 

请注意,首选项可能存储在另一个文件中,以便更好地检查目录以find它:

 $ 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)获取的默认文件名作为共享首PreferenceManager.getDefaultSharedPreferences(context) 。 另外,ADB需要以root模式运行: adb 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 

validation您的更改

 adb shell cat /data/data/org.test/shared_prefs/MyKeys.xml