如何在Android中创建共享库

时间:2011-12-02 14:59:33

标签: android deployment shared

我有一个库,比如LIB,它公开了很多API和类供应用程序开发人员使用。

如果手机上有多个应用程序使用LIB,我只想创建并运行一个LIB实例。它有点类似于Android平台服务,如LocationManager,SensorManager,PackageManager等。

具体而言,有两个问题需要解决: -

  1. 如何确保只有一个LIB实例?
  2. 如何部署LIB(与使用它的每个应用程序分开apk /捆绑,但只有其中一个在任何时间点创建库实例)等。
  3. 除了服务/ AIDL之外,还有其他方法可以确保只运行一个LIB实例而不管使用它的应用程序数量。

2 个答案:

答案 0 :(得分:6)

好的,花了很多时间在这上面,这里是我的问题的答案: -

Q值。如何确保只有一个LIB实例? - 只能通过服务公开LIB功能。

Q值。如何部署LIB(单独的apk /捆绑每个使用它的应用程序,但只有其中一个在任何时间点创建库实例)等。

对于服务,会有一个单独的apk(或者可能与服务客户端应用程序捆绑在一起),

Q值。是否有任何其他方式(除了服务/ AIDL)以确保只有一个LIB实例运行,而不管使用它的应用程序的数量。

是的,就像LIB与每个应用程序捆绑在一起。 但是,这需要在使用意图的库之间建立强大的通信协议,以便其中一个充当主设备,并与其他库共享数据。实际上,只有在没有其他实例运行的情况下,打包在apk中的LIB才会启动它的引擎。实现此目的的一种方法是使用广播并保持安全性,权限可以与所涉及的广播操作相关联。

答案 1 :(得分:0)

使用库项目,您可以静态包含库项目中的类和资源。什么都不会运行,不需要。

这可以增加你的应用程序的大小,但ProGuard等技术可以从最终的.apk中删除未使用的类。

如果您希望您的库独立于其他应用程序运行,那么它确实是一项服务,您应该考虑生命周期应该是什么(例如,应用程序启动,启动时启动等)。

如果你的lib包含要运行的活动,Android操作系统已经处理了这个 - 另一个应用程序只是创建一个意图并调出你的活动。这就是Android的工作原理 - 应用可以使用意图无缝地在彼此之间共享数据和工作流。

如果有服务,那就是同样的事情 - 调用应用程序要么与正在运行的服务交互,要么触发服务启动。

图书馆项目为大多数开发人员处理了很多问题,但如果您有一个非常大的共享代码包,则需要安装为单独的应用程序。

例如,Google地图是一个单独的应用,但其他应用可以触发从该应用加载活动的意图。与可由不同应用程序处理的消息传递和其他活动相同。