【问题标题】:Private Content Provider shared among my apps only仅在我的应用程序之间共享的私有内容提供程序
【发布时间】:2014-06-27 17:03:50
【问题描述】:

我已经用谷歌搜索了足够多的东西,但找不到这个案例。我想编写一个仅对特定应用程序共享/可访问的自定义内容提供程序。

我有这种情况:

  • 在 Google Play 上有多个应用程序。说 A、B 和 C。
  • 想要编写一个内容提供程序,例如 Z,它只能由 A、B 和 C 访问。我正在考虑将内容提供程序“Z”作为自己的 apk 发布。
  • 当 Z 安装在设备上时; A、B 和 C 可以访问 Z。如果未安装 Z,则第一个应用将直接到 Google Play 安装 Z。

现在我的问题是:

是否有可能编写这样的内容提供程序,仅在特定应用程序之间共享? android:exported="false" 使其无法被任何其他外部应用程序访问。当 android:exported 设置为 false 时,android:grantUriPermissions="true" 不起作用,并且将 android:exported 设置为 true 可以使其公开访问。

如果它们看起来更适合我在多个应用之间共享信息的要求,请随时分享其他解决方案。

【问题讨论】:

  • 不,它只能被某些应用程序选择性地访问。相反,谷歌所做的——不仅是ContentProviders,还有其他一切——检查调用应用程序的签名,只允许它自己的应用程序访问。

标签: android android-contentprovider android-sharing


【解决方案1】:

当 android:exported 设置为 false 时,android:grantUriPermissions="true" 不起作用

是的,确实如此。

但是,android:grantUriPermissions 可能与您的用例无关,尤其是当 Z 是其自己的独立应用时。 Z 必须是使用带有FLAG_GRANT* 标志的Intent 调用A/B/C 的人,我猜这不符合您的计划。

如果我怀疑,A/B/C 需要独立于 Z 访问 Z,告诉他们可以访问它并授予 Uri 特定权限,标准方法是使用自定义 signature -级别<permission>。然后,您将使用android:permission<provider> 中使用android:permission 保护导出提供程序并使用该权限保护它。理论上,只有您的应用程序套件才能拥有该权限,因为只有您的应用程序套件会由该签名密钥签名,因此具有签名匹配。

(我说“理论上”是因为有issues with this approach

【讨论】:

  • 应用程序是否可以使用相同的证书签名并具有签名权限的无缝共享数据(甚至不使用内容提供者)?你有什么例子可以看吗?谢谢!
  • @bianca:不。签名级权限不会神奇地创建新的 IPC 协议;他们只是保护现有的。 android:sharedUserId 允许使用相同签名密钥签名的应用程序共享一个 Linux 用户 ID,从而允许它们直接读取/写入彼此的内部存储部分。然而,这是非常脆弱的。特别是,如果您的任何应用程序已经发布,则不再是您的选择。
猜你喜欢
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2011-01-01
  • 2011-12-15
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多