3

背景

从版本 4.2 开始,Android 支持多用户(链接在这里这里)。

每个用户都有自己的应用程序,他们的私人数据只对用户可见。

问题

每个用户的数据封装在路径和访问文件方面如何工作?

我的意思是,每个用户的路径是什么:

  1. 私人内部存储。
  2. 模拟的外部存储(内置外部存储)
  3. “真正的”外部存储(SD卡)

?

我猜用户可以看到存储在属于其他用户的 sd 卡上的数据,但是模拟的外部存储呢?他们是否也可以写入其他用户的文件或只是读取它们?

每个用户是否会自动获得自己的特殊路径?还是开发人员应该处理这个?

如果开发者需要处理,应该用什么作为用户的ID呢?

文档说:

无论您使用这些 API 中的哪一个来保存给定用户的数据,在以不同用户身份运行时都无法访问这些数据。

但这一切都假设您将 API 用于您自己的路径。应用程序是否可以通过其他途径绕过这一点?

应用程序可以查询关于同一设备上自身的每次安装的什么信息?他们能得到其他用户的应用程序的大小吗?他们甚至可以获得其他用户的应用程序列表吗?

同一应用程序的多次安装是否也需要多个大小?

4

1 回答 1

3

每个用户的路径是什么

如果你在乎,那你就做错了。使用 Android SDK API 来确定基本目录,然后从那里开始工作。因此,例如:

  • getFilesDir()将为当前用户返回正确的内部存储位置
  • getExternalFilesDir()并且 on 方法Environment将为当前用户返回正确的外部存储位置

我猜用户可以看到存储在属于其他用户的 sd 卡上的数据

通常,这超出了 Android SDK 的范围

但是模拟的外部存储呢?

每个用户都有自己的空间。

他们是否也可以写入其他用户的文件或只是读取它们?

两者都没有,除非设备中存在错误。

每个用户是否会自动获得自己的特殊路径?

是的,如果您使用 Android SDK API 来确定基本目录。

应用程序是否可以通过其他途径绕过这一点?

不,因为他们既没有读也没有写访问权限,除非有错误。

应用程序可以查询关于同一设备上自身的每次安装的什么信息?

AFAIK,什么都没有。从应用程序的角度来看,在一台设备上进行多个安装这一事实与在多个设备上安装没有区别。

他们能得到其他用户的应用程序的大小吗?

我不知道您所说的“应用程序大小”是什么意思,抱歉。

他们甚至可以获得其他用户的应用程序列表吗?

这是个好问题。我还没有试验过PackageManager它在被次要用户运行的应用程序使用时会暴露什么。理论上,它应该只报告当前用户可用的东西,特别是考虑到 Android 的受限配置文件。

同一应用程序的多次安装是否也需要多个大小?

据我了解,APK 和解包的部分(例如,DEX 文件)是共享的。

于 2014-04-21T18:19:27.183 回答