从不同的包加载远程库

问题描述 投票:0回答:1

我遇到过这样的情况,我要开发两个 Android 应用程序,假设第一个应用程序 App A 将包含不同的库,第二个应用程序假设我开发的应用程序 B 应该能够从应用程序 A。用户不应该使用意图在应用程序之间移动,用户应该在应用程序 B 中,并且他永远不应该知道这些库来自应用程序 A。我们需要开发应用程序,以便用户应该感觉到他正在从应用程序 B 加载库相同的应用程序本身,但实际上这些应用程序将位于另一个应用程序中。

我认为我们可以通过包可见性来实现这一点,但不能更详细。如果有人帮助我一步一步的过程,那将会非常有帮助。

我曾想到过内容提供者、IPC 机制(如 Messenger 和 AIDL),但我发现我们可以通过使用包可见性概念来实现这一点,而不是那种复杂的架构。首先,我们需要在应用程序B中注册应用程序A的包,然后在应用程序B中加载应用程序A的库。如果有人知道我如何一步一步地做到这一点,那对我来说真的很有帮助。

android android-studio package communication mobile-development
1个回答
0
投票

第一个应用程序应用程序 A 将包含不同的库,第二个应用程序假设我开发的应用程序 B 应该能够从应用程序 A 加载库

如果您期望应用程序 B 将使用打包在应用程序 A 内的,那么这在 Android 中不是一个选项。如果你想让App B与App A通信,你将需要使用各种形式的进程间通信(IPC),例如:

  • 应用程序 B 从应用程序 A 开始活动
  • 应用程序 B 从应用程序 A 启动服务
  • 应用程序 B 绑定应用程序 A 的服务
  • 应用程序 B 向应用程序 A 发送广播
  • 应用程序 B 与应用程序 A 提供的
    ContentProvider
    进行交互

我想到了内容提供商、IPC 机制(例如 Messenger 和 AIDL)

是的,这些都是可行的选择。

但不是那种复杂的架构

如果你不喜欢IPC,就不要有两个应用程序。除了“你”的复杂性之外,“用户”也很复杂。如果应用程序 A 因任何原因不可用,应用程序 B 将无法工作(无论是全部还是部分),例如: 尚未安装

它已安装,但当前用户无法运行它,例如通过受限配置文件
  • (也可能存在涉及工作资料的场景,但我没有足够的经验来确定)
  • 如果您有一个应用程序,而不是两个应用程序,这对每个人来说都会简单得多。

我发现我们可以通过使用包可见性概念来实现这一点

不。包可见性规则所做的所有事情就是确定应用程序 B 是否可以与应用程序 A 通信,甚至知道应用程序 A 存在。实际通话还是需要使用IPC。

首先我们需要在App B中注册App A的包,然后在App B中加载App A的库。

这不是包可见性的工作原理。您可以考虑阅读有关包可见性的

文档
。 FWIW,我还在

这本免费书

本章

中介绍了包可见性。

© www.soinside.com 2019 - 2024. All rights reserved.