共享首选项存储在哪里?

173

在 Eclipse 项目中,一个人可能会遇到共享偏好设置文件在哪里?


我知道shared preference.xml存储在data中,但在安装之前它存储在哪里?是以.smali格式存储的吗? - sharath3589
8个回答

271

SharedPreferences 存储在应用数据文件夹中的xml文件中,即

/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml

或者在默认偏好设置中:

/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml

在运行时添加的SharedPreferences并不会存储在Eclipse项目中。

注意:访问/data/data/<package_name>需要超级用户权限。


3
默认的共享首选项文件实际上是:/data/data/<package>/shared_prefs/<package>_preferences.xml - inazaruk
@inazaruk 这确实是完整的包名,尽管我看到设备上混合使用 /<package>_preferences.xml/<package>.xml。也许这取决于应用程序的 API 级别? - Aleadam
1
请注意,我在谈论默认共享首选项。它们的文件名似乎总是相同的。请参见PreferenceManager.java的初始提交,这里的getDefaultSharedPreferences函数:http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/preference/PreferenceManager.java;hb=54b6cfa9a9e5b861a9930af873580d6dc20f773c#l351。在最新版本的`PrefencesManager.jave`中也没有更改:http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/preference/PreferenceManager.java;hb=HEAD#l353。 - inazaruk
有没有办法从系统中获取路径,而不是硬编码它?ContextImpl.java 在私有的 getPreferencesDir 函数中实现了它,以某种方式在运行时获取这个将会很有用。 - Pointer Null
你可以使用新的FIle(context.getFilesDir().getParent(), "shared_prefs")。它在Nexus 5上可以工作,但不确定其他制造商是否适用。 - gswierczynski
这个应用程序使得这些代码可以在不root手机的情况下工作,但是你需要查看手机目录下的文件:../data/data文件夹,只有在root你的Android设备之后才能访问。然而,如果你为了检查数据文件而对手机进行root操作,则会失去手机的保修。 - Bay

9

偏好设置可以在代码中设置,也可以在res/xml/preferences.xml中找到。您可以在Android SDK网站上了解更多关于偏好设置的信息。


4
只要你创建了一个Android项目,就可以在“res”目录上右键单击,然后添加一个名为“xml”的新文件夹。其他“特殊”的文件夹有anim、drawable、layout、menu、raw和values。请注意,您需要自行创建这些文件夹。 - JasCav

7
我刚试过像这样获取共享偏好路径。这对我有效。
File f = getDatabasePath("MyPrefsFile.xml");

if (f != null)
    Log.i("TAG", f.getAbsolutePath());

6

为了节省您的时间...

在我的Galaxy S v.2.3.3上,Shared Preferences不再存储在:/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml

而是现在位于:/dbdata/databases/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml

我认为这个更改是在2.3中进行的。


1
在2.2版本中是一样的吗?无论是在Eclipse还是项目位置上,我都找不到/data文件。 - Pramod
@pramod 不在 Eclipse 中 - 这是实际设备文件结构上的路径。 - Richard Le Mesurier
@Pramod 在文件资源管理器视图中查看,然后在 /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml 中找到。 - Akhil Jain
2
我的JB设备上不存在/dbdata/ - rekire

5

共享首选项是我们可以存储的键值对。它们是内部类型的存储,这意味着我们不必创建外部数据库来存储它。要查看它,请执行以下步骤: 1)在菜单栏中选择“View”(视图)。选择“Tool Windows”(工具窗口)。 2)点击“Device File Explorer”。 3)设备文件资源管理器将在右侧打开。 4)找到"data"文件夹并单击它。 5)在"data"文件夹中,您可以选择另一个"data"文件夹。 6)尝试在此"data"文件夹中搜索您的包名称。例如:com.example.com 7)然后单击“shared_prefs”并打开.xml文件。

希望这有所帮助!


5
数据存储在设备上,即您应用程序的私有数据区域。它不在Eclipse项目中。

1
使用http://facebook.github.io/stetho/库来使用chrome检查工具访问您的应用程序的本地存储。您可以在本地存储下找到sharedPreference文件 -> <您的应用程序包名称>。

enter image description here


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接