Android 应用程序共享相同 UID 的问题

Posted

技术标签:

【中文标题】Android 应用程序共享相同 UID 的问题【英文标题】:Issues with Android apps sharing same UID 【发布时间】:2013-08-07 23:20:54 【问题描述】:

我有三个安卓应用:app_1、app_2 和 app_3。所有人都使用相同的密钥签名并共享相同的 UID。 app_1 和 app_3 没有持久存储(没有数据库 + 文件系统),它们都在 app_2 用户空间上工作。我有两个问题:

    如果 app_2 死掉或被系统关闭,它的用户空间会怎样? app_1 和 app_2 还能访问吗?

    我需要一种方法来在 app_1 和 app_3 完成持久存储时通知 app_2,然后 app_2 可以采取一些措施。我不确定我是否在 app_2 中运行带有一些事件侦听器的服务是否符合我的需要。是否有保证的方法可以让 app_2 进入睡眠模式并在事件期间唤醒?还有其他方法吗?

【问题讨论】:

【参考方案1】:

    即使应用程序未运行,您在 /data/data 中的持久存储也将保持不变。只有当您删除应用程序时,它才会被擦除。也不要硬编码你的路径,因为在 4.3 中每个用户都有自己的数据路径。

    广播侦听器将用于此目的。在应用 2 的清单中声明它。

【讨论】:

感谢您的及时回复!我知道自 4.2 以来已经引入了多用户支持。我仍然希望将共享数据保存在相对于 app_2 的目录中,即 /data/data//。这会是 4.3 中的问题吗?广播侦听器是否需要 app_2 处于活动状态才能获得通知(我在某处读到过这方面的内容,如果有错误请纠正我)? 活动状态是什么意思?就像在前台运行活动或在后台运行服务一样?如果是这样,那么没有。如果你在清单中声明了你的监听器,它将被调用(除非它是一个有序广播并且一些更高优先级的接收器取消了它) Honeycomb 3.1 或以上版本后,应用安装时处于停止状态。当应用程序首次启动时,它会脱离停止状态,这就是我想说的“活动状态”。处于停止状态的应用程序不会被所有广播意图启动。用户可以手动将应用置于停止状态,但不确定是否存在系统自动将应用更改为停止状态的情况。

以上是关于Android 应用程序共享相同 UID 的问题的主要内容,如果未能解决你的问题,请参考以下文章

android uid 和 pid 的理解获取

Android安全沙箱

Android:如何在使用相同证书签名的项目之间共享代码

protected-broadcast 系统应用自定义广播规范

自定义选择器活动:SecurityException UID n 没有对 content:// uri 的权限

如何在活动和小部件之间共享数据和方法