如何在安卓系统中安全地共享两个或多个应用程序之间的数据?

8
我正在为企业环境制作一个应用程序框架,其中涉及从设备内存共享数据。这些数据需要存储在设备上,并且只能由少数应用程序访问(可以通过安装它们时使用的证书进行识别)。此外,它需要以安全的方式存储,以便其他第三方应用程序无法访问。哪种方法是实现此功能的最佳方式?
我已经阅读了关于ContentProviders和ContentResolvers的资料,据我理解,它们只是促进这个过程。实际的数据存储更加重要。我还研究了Android的Keychain API,它似乎是我需要实现的最接近的方法。

有没有一种方法可以将 ContentProvidersContentResolvers 与密钥链API集成?这样做是正确的吗?如果不是,那么实现相同功能的最佳方法是什么?此外,我还没有找到良好的代码示例来完全理解 Keychain API 的功能。 请帮忙!

编辑:
我也看了一下 Keystore API。它在内部使用 Keychain API,并且用于在应用程序之间共享数据,应使用 Keychain。虽然我还没有找到相应的代码示例或详细文档或API指南以了解如何使用 Keychain API。我正在寻找与 iOS Keychain 等效的 Android 版本。

在Android 5中引入了称为管理配置文件的东西。这是实现我所要做的事情的正确方式吗?

1
你目前做了什么? - Amy
@Amy,我已经编辑了问题并添加了链接。你能帮忙吗? - Keya Madhukar
你解决了吗?我也在寻找类似的东西。 - Kannan_SJD
你最终是如何解决这个问题的? - Hugo Allexis Cardona
@KeyaMadhukar,你能理解吗?托管配置文件不是最好的选择,因为它在API 29中已被弃用。我也想实现类似的功能,但在钥匙串上找不到好的示例。非常感谢您的帮助。 - SS06Dec86
@KeyaMadhukar,你能找到解决问题的方法吗?如果你能与其他人分享相同的方法,那将非常有帮助。谢谢。 - BATMAN
1个回答

1

您需要使用相同的 sharedUserId 声明您的应用程序,例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mydomains.myapp"
    android:sharedUserId="com.mydomains.shared.user.id"
    android:sharedUserLabel="@string/appName">

在这种情况下,两个应用程序的私有存储中存储的所有数据将彼此可用(假设它们使用相同的签名进行签名)。
按照手册所述:
sharedUserId:Linux用户ID的名称,将与其他应用程序共享。默认情况下,Android为每个应用程序分配其自己独特的用户ID。但是,如果将此属性设置为两个或多个应用程序的相同值,则它们将共享相同的ID - 前提是它们还由相同的证书签名。具有相同用户ID的应用程序可以访问彼此的数据,并且如果需要,可以在同一个进程中运行。

共享用户ID有一定的限制,其中一些在此链接中提到。此外,我的主要关注点不是如何使数据可访问,而是应该如何存储(SharedPreferences vs Internal或External存储中的文件vs sqlite DB vs 服务器上)。http://developer.android.com/guide/topics/data/data-storage.html - Keya Madhukar
我的应用程序已经发布了,但没有使用android:sharedUserId,现在我想为我的新应用程序共享数据,我该怎么做?你知道如果我们没有设置android:sharedUserId的默认值是什么吗? - Anh Vu
如果您为旧应用的新版本设置了“sharedUserId”,则用户将无法自动更新您的应用程序 - 这是一个重大问题,因此在设置“sharedUserId”之前请记住这一点。 - Barmaley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接