我正在探索有关 PackageManager 的Android 多用户行为。\nI\xe2\x80\x99m 试图了解如何在每个用户中安装软件包以及如何在所有用户中实现安装。
\n
找不到为所有用户安装软件包的方法,只能为当前用户安装软件包。使用我的示例应用程序在 Android 11 模拟器 (AOSP) 中进行测试,该应用程序使用 PackageInstaller 安装软件包。
\n
我能够测试什么:
\n
\n- 将我的示例应用程序作为系统应用程序,因此它将具有安装和删除包的受限权限,并且它将显示在每个用户中
\n- 创建新用户并在它们之间切换
\n- 列出当前用户安装的所有应用程序包
\n- 使用我的示例应用程序,为当前用户安装包。我正在使用PackageInstaller.Session来成功实现这一目标。
\n- 使用用户 A 安装软件包 X,切换到用户 B,我在应用程序中看不到软件包 X,但是我能够在用户 B 上安装相同的软件包 X
\n- 无法安装同一软件包(相同软件包名称)的较低版本。(在用户 A 上安装软件包 X,verCode=2,切换到用户 B 并尝试安装软件包 X,verCode=1)。不过我可以安装 vercode >= 的软件包
\n- 用户 B 看不到用户 A 安装的内容
\n- 在 Android Studio (AS) 设备资源管理器的帮助下,我能够找到位于此处的已安装包元数据 (apk):/data/app/[一些奇怪的哈希值]/[应用程序的包名称]
\n- 在 AS 设备资源管理器的帮助下,我能够找到专用于每个用户的每个包的数据文件夹:/data/user/[用户 ID]/[应用程序的包名称]
\n
\n
据我所知,我只是参考我在官方 Android 文档中找到的内容,我找不到一种以编程方式在所有用户中安装软件包的方法。另外,我找不到列出设备中安装的所有软件包的方法(不是在当前用户中,而是在设备中)。
\n
既然您知道了我的调查状况,也许有人可以帮助我提供一些官方声明或解决方法。
\n
1. 有没有办法(以编程方式)列出设备中所有已安装的软件包,而不依赖于当前用户?
\n
2. …