Android - 存储下载内容的位置,内部存储与外部存储?

Col*_*lin 6 storage android android-sdcard

关于在我的应用程序中存储下载内容的位置的许多单独但相关的问题.

我有一个从中央服务器下载内容的应用程序.此内容有时是高级内容,或者至少是发布者不希望其自由分发的内容.我知道"外部"存储很容易访问,而"内部"存储是受保护的,除非电话是根的.

如果应用程序安装在SDCARD上(因为我的配置是),那么SDCARD上的"内部"存储也是物理上的吗?因此,如果我的SDCARD安装的应用程序下载了100MB的内容到内部存储,那么它实际上是在SDCARD上结束了,还是最终在设备的物理板载存储中?

如果应用程序安装在SDCARD上,并且带有下载内容的"内部"存储器位于SDCARD上,那么它是以开放格式物理存储还是加密?我似乎记得读过存储在SDCARD上的应用程序是加密的.这也适用于"内部"存储吗?

(删除有关将文件存储在单个目录中的问题,如Context.getDir()意味着可以在内部存储中创建和维护目录系统)

有更好的方法吗?

Col*_*lin 5

在摩托罗拉 Droid 2 上使用 Android 2.2 进行了大量实验并得出以下结论:

  • 当应用程序安装/移动到 SDCARD 时,它会作为 .asec 文件存储在 SDCARD 上的隐藏 /.android_secure 目录中。这是一个加密和压缩的文件。
  • 当应用程序在“内部存储”中创建数据文件时,它们存储在设备的内部存储器中,而不是存储在SDCARD 上。
  • 应用程序的设置/管理应用程序详细信息对话框具有“数据”值 - 这是应用程序在其内部存储中使用的数据量,即在内部存储器中而不是在 SDCARD 上
  • 外部存储最终位于 /Android/data 目录下的 SDACRD 上
  • 从设置/管理应用程序详细信息对话框中清除数据确实会清除所有内容,这意味着已安装的应用程序需要有足够的知识/逻辑来处理“无数据”情况。

我的应用程序是一个下载内容应用程序。这一切对我来说意味着:

  • 将我的小应用程序存储在 SDCARD 上几乎没有实际价值,因为它在手机上消耗的大部分存储空间将在设备的内部存储器中。当然,允许应用程序安装在 SDCARD 上总是好的。
  • 安装包需要能够在被用户擦除的情况下恢复用户下载的内容。
  • 在内部存储器中存储唯一安装 id的概念很有效,直到用户删除应用程序的数据并因此导致计算新的安装 id。因此,要能够记住哪些内容已下载到设备需要中央服务器上的用户帐户,每当应用程序从头启动时,用户都会创建/登录该帐户。