Android 保存设置和数据的最佳方式
Android best way to save settings and data
我需要为设置保存一些int
和boolean
,目前我是SharedPreference
,我想知道是否有问题通过这种方式,我可以确保这些数据不会被触及或丢失吗?这样使用有禁忌症吗?
现在真正的问题是:我需要保存一些字符串,基本上类似于...一些 url 和 url 的文本描述,但我真的认为 SharedPreference
行不通因为我不知道这些项目有多少,它们可能是 5、8、10,我不知道,这些数据将通过互联网下载,所以:我怎么能保存它们?
我不太擅长Android编程,但我以前学过Java,我可以将它保存为文件并解析它吗?我想我可以创建一个 Serializable
包装器 class 并将项目写入一个文件,但是......它真的安全吗?用户可以编辑这些文件或删除它们,我认为如果我可以将它们保存在某个... "locked for app-only" 文件夹中可能会更好,这样的东西是否存在?如果是,我该如何访问它?
SharedPreference 基于存储在 app 文件夹中的 xml 文件。它像在另一个 xml 文件上写入信息一样安全。它主要用于应用配置。对于其他类型的数据,最好使用数据库 (SQLite) 或 json(性能优于 xml)。
在 android 中,您将使用您在桌面版 Java 中已经学过的许多概念。但是平台有很大的不同,尤其是在性能方面。
在Android中,应用就像Linux系统中的用户,每个用户都有自己的私有space,应用也一样,每个应用都有自己的存储空间space,这就是与应用程序相关的数据所在的位置。
默认情况下,SharedPreferences 存储在 MODE_PRIVATE
中,因此它们只能由您的应用程序访问,其他外部应用程序无法访问它们。如果您想分享您的一些偏好,您可以选择其他存储模式 MODE_APPEND
、MODE_WORLD_READABLE
和 MODE_WORLD_WRITEABLE
.
所有关于 MODE_PRIVATE
的内容都适用于未 Root 的设备。
有关 Android 安全性的更多详细信息,您可以查看这些 resources
sharedPreferences 使用起来是完全安全的,加上您声明 class 实例化的隐私,只能由您的应用程序使用,也可以授予其他应用程序使用的权限 属性 Context.MODE_PRIVATE。任何人都可以看到您的设置的唯一方法是成为 root 用户,并且该用户知道根据您的喜好找到 .XML 的路径,个人 SharedPreferences 是完全可行的。另一种方法是使用 SQLite 数据库,但作为 root 用户首选项可以访问您的 .DB 并修改任何数据库管理器数据,例如 navicat
我强烈推荐使用 Facebook Conceal。 SharedPreferences 可以由 root 用户根据使用的 MODE 独立修改,隐藏钥匙串文件不能。
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();
尽情享受 ;)
我需要为设置保存一些int
和boolean
,目前我是SharedPreference
,我想知道是否有问题通过这种方式,我可以确保这些数据不会被触及或丢失吗?这样使用有禁忌症吗?
现在真正的问题是:我需要保存一些字符串,基本上类似于...一些 url 和 url 的文本描述,但我真的认为 SharedPreference
行不通因为我不知道这些项目有多少,它们可能是 5、8、10,我不知道,这些数据将通过互联网下载,所以:我怎么能保存它们?
我不太擅长Android编程,但我以前学过Java,我可以将它保存为文件并解析它吗?我想我可以创建一个 Serializable
包装器 class 并将项目写入一个文件,但是......它真的安全吗?用户可以编辑这些文件或删除它们,我认为如果我可以将它们保存在某个... "locked for app-only" 文件夹中可能会更好,这样的东西是否存在?如果是,我该如何访问它?
SharedPreference 基于存储在 app 文件夹中的 xml 文件。它像在另一个 xml 文件上写入信息一样安全。它主要用于应用配置。对于其他类型的数据,最好使用数据库 (SQLite) 或 json(性能优于 xml)。
在 android 中,您将使用您在桌面版 Java 中已经学过的许多概念。但是平台有很大的不同,尤其是在性能方面。
在Android中,应用就像Linux系统中的用户,每个用户都有自己的私有space,应用也一样,每个应用都有自己的存储空间space,这就是与应用程序相关的数据所在的位置。
默认情况下,SharedPreferences 存储在 MODE_PRIVATE
中,因此它们只能由您的应用程序访问,其他外部应用程序无法访问它们。如果您想分享您的一些偏好,您可以选择其他存储模式 MODE_APPEND
、MODE_WORLD_READABLE
和 MODE_WORLD_WRITEABLE
.
所有关于 MODE_PRIVATE
的内容都适用于未 Root 的设备。
有关 Android 安全性的更多详细信息,您可以查看这些 resources
sharedPreferences 使用起来是完全安全的,加上您声明 class 实例化的隐私,只能由您的应用程序使用,也可以授予其他应用程序使用的权限 属性 Context.MODE_PRIVATE。任何人都可以看到您的设置的唯一方法是成为 root 用户,并且该用户知道根据您的喜好找到 .XML 的路径,个人 SharedPreferences 是完全可行的。另一种方法是使用 SQLite 数据库,但作为 root 用户首选项可以访问您的 .DB 并修改任何数据库管理器数据,例如 navicat
我强烈推荐使用 Facebook Conceal。 SharedPreferences 可以由 root 用户根据使用的 MODE 独立修改,隐藏钥匙串文件不能。
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();
尽情享受 ;)