我需要为设置保存一些int
和boolean
,现在我正在使用SharedPreference
进行设置,我想知道是否有这种方式有问题,我能确保这些数据不会被触及或丢失吗?使用这种方式有禁忌症吗?
现在真正的问题是:我需要保存一些字符串,这基本上就像某些网址和网址的文字说明,但我并不认为SharedPreference
会起作用因为我不知道这些物品有多少,它们可能是5,8,10,我不知道,这些数据将通过互联网下载,所以:我怎么能保存它们?
我并不擅长Android编程,但我很久以前就研究过Java,我可以将它保存为文件并解析它吗?我想我可以创建一个Serializable
包装器类并将文件写入文件但是......它真的安全吗?用户可以编辑这些文件或删除它们,我认为如果我能将它们保存在某些文件中可能会更好..."锁定仅限应用程序"文件夹,甚至存在这样的事情?如果是,我该如何访问它?
答案 0 :(得分:2)
SharedPreference基于存储在app文件夹中的xml文件。它像另一个xml文件上的写信息一样安全。它主要用于app配置。对于其他类型的数据,最好使用数据库(SQLite)或json(比xml更高的性能)。
在android中,您将使用已经在桌面版Java上学习的许多概念。但该平台非常不同,特别是在性能方面。
答案 1 :(得分:2)
Android应用程序就像Linux系统中的用户一样,每个用户都有自己的私有空间,应用程序也是如此,每个应用程序都有自己的存储空间,而这就是与应用程序相关的数据。
默认情况下,SharedPreferences存储在MODE_PRIVATE
中,因此只能由您的应用访问它们,其他任何外部应用都无法访问它们。如果您想要分享部分偏好设置,可以选择其他储存模式MODE_APPEND
,MODE_WORLD_READABLE
和MODE_WORLD_WRITEABLE
。
关于MODE_PRIVATE
的所有内容都适用于非Root设备。
有关Android安全性的详细信息,您可以查看这些resources
答案 2 :(得分:2)
sharedPreferences使用起来非常安全,加上您声明要实例化的类的隐私,只能由您的应用程序使用,并且还可以授予其他应用程序使用属性Context.MODE_PRIVATE的权限。任何人都可以看到您的设置的唯一方法是成为root用户,并且用户知道要根据您的偏好查找.XML的路线,个人SharedPreferences是完全可行的。另一种方法是使用SQLite数据库,但是作为root用户首选项可以访问.DB并修改任何数据库管理器数据,例如navicat
答案 3 :(得分:2)
我强烈建议您使用Facebook Conceal。 root用户可以在使用的MODE上独立修改SharedPreferences,而隐藏的keychain文件则不能。
Conceal创建的加密文件只能由应用访问,您的设置是安全的。当然用户可以删除此文件,但不能阻止删除数据,只能修改。
非常容易使用:
// Creates a new Crypto object with default implementations of
// a key chain as well as native library.
Crypto crypto = new Crypto(
new SharedPrefsBackedKeyChain(context),
new SystemNativeCryptoLibrary());
FileOutputStream fileStream = new FileOutputStream(file);
// Creates an output stream which encrypts the data as
// it is written to it and writes it out to the file.
OutputStream outputStream = crypto.getCipherOutputStream(
fileStream,
entity);
// Write plaintext to it.
outputStream.write(plainText);
outputStream.close();
享受;)