安卓数据存储问题

3
我想知道是否有可能在我的应用程序之外,通过其他应用程序更改我的应用程序的偏好设置值。当手机关闭时,Android是否会保留这些首选项?
在sharedpreferences上存储一些数据(标志),以便通知活动某些内容是安全的吗?
当用户清除应用程序数据时,到底删除了什么?其中包括shared preferences数据吗?
使用内部私有文件来存储安全数据,例如密码,是否更好?
此外,我希望能够在检测到某种行为时显示对话框,为此我有一个监视服务,必须通知主要活动。目前,通过回调方法完成该操作,但我希望即使应用程序被终止或手机重新启动,也能维持该状态。
因此,我考虑设置sharedpreference值(标志),然后在oncreate方法中检查是否存在该标志。还应该在resume方法中进行检查吗?
1个回答

3
偏好设置(包括SharedPreferences)存储在应用程序的私有数据目录下的文件中。除非手机已经被root,否则其他应用程序无法读取或写入该目录。这个内部存储是基于闪存的,并且即使手机关闭,它也能存活下来...如果没有它,很多东西都不能正常工作。 :)
作为一个普遍的安全原则,你不应该存储密码。安全系统存储和比较密码哈希值,而不是密码本身。
在偏好数据中存储应用程序状态是可以的...我个人会在onCreate()中读取它,在它发生变化的时候或者在onPause()中将值写回偏好设置。

非常感谢您的回复,但如果设备已经取得了 root 权限,这意味着用户可以更改这些文件,对吗?即使设备已经被 root,是否有一种方法可以防止用户更改这些文件? - maxsap
如果设备已经被root,所有文件都会变得容易受到攻击,而且无法百分之百地保证文件没有被篡改。因此,你的下一道防线就是尽可能让除了你的应用程序以外的任何东西都难以生成有效的首选项值。这意味着要熟悉javax.crypto中的加密API。当然,前提是你真的需要这么关心。 :) - Reuben Scratton

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