Android Studio 从不同的包加载远程库

u1ehiz5o  于 12个月前  发布在  Android
关注(0)|答案(1)|浏览(120)

我有一个情况,我要开发两个Android应用程序,让我们说第一个应用程序应用程序A将有不同的库在它和第二个应用程序让我们说应用程序B,我开发应该能够加载库从应用程序A。用户不应该使用意图在应用程序之间移动,用户应该在应用程序B中,他永远不应该知道库来自应用程序A。我们需要开发应用程序,使用户感觉到他正在从同一应用程序本身加载库,但实际上这些应用程序将在另一个应用程序中。
我认为我们可以通过包可见性来实现这一点,但不是更详细。如果有人能一步一步地帮助我,那将非常有帮助。
我曾想过内容提供者,IPC机制,如Messenger和AIDL,但不是复杂的架构,我发现我们可以通过使用包可见性概念来实现这一点。首先,我们需要在应用程序B中注册应用程序A的包,然后在应用程序B中加载应用程序A的库。如果有人知道我如何一步一步地做到这一点,这对我来说真的很有帮助。

mpgws1up

mpgws1up1#

第一个应用程序App A将在其中包含不同的库,第二个应用程序假设我开发的App B应该能够从App A加载库
如果您希望应用程序B使用应用程序A内部打包的 libraries,则Android中不允许使用此选项。如果您希望应用程序B与应用程序A通信,则需要使用各种形式的进程间通信(IPC),例如:

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

我想到了内容提供者,IPC机制,如Messenger和AIDL
是的,这些都是可行的选择。
但与其复杂的建筑结构
如果你不喜欢IPC,不要有两个应用程序。除了对 * 你 * 来说复杂之外,对 * 用户 * 来说也很复杂。如果应用程序A因任何原因不可用,应用程序B将无法工作-无论是全部还是部分,例如:

  • 尚未安装
  • 它已安装,但当前用户无法运行它,例如通过受限配置文件

(也可能有一个场景涉及工作简介,但我没有足够的经验,这些肯定说)
如果你有一个应用程序,而不是两个应用程序,对每个人来说都会简单得多。
我发现我们可以通过使用包可见性概念来实现这一点
不可以。包可见性规则所做的只是确定 * 是否 * App B可以与App A对话,甚至知道App A存在。您仍然需要使用IPC进行实际对话。
首先,我们需要在App B中注册App A的包,然后在App B中加载App A中的库。
这不是软件包可见性的工作原理。你可以考虑阅读the documentation关于软件包可见性的文章。顺便说一句,我还介绍了this free bookthis chapter中的软件包可见性。

相关问题