41

这个问题已经转移到https://softwarerecs.stackexchange.com/questions/27841/plugins-architecture-for-an-android-app


我想为开源应用程序实现一个插件系统,因为它已经变得非常大,具有许多只有少数用户需要的功能。发布不同的应用程序不是一个好的解决方案,因为用户 A 想要 feature7 和 feature24,而 userB 想要 feature39 和 feature24。

我在哪里可以找到一个插件架构的好例子?

这是我希望插件能够执行的操作:

例如,其中一个插件必须在特定屏幕上添加一个按钮,单击此按钮会增加应用程序数据库中的一个值。据我所知,这对于内容提供者和意图是不可行的。

我想避免使核心应用程序的代码变得复杂,到处都有大量的钩子。

插件的形式可以是 SD 卡上的文件、应用程序或其他任何东西。

4

3 回答 3

9

我已经完成了一个框架,它与 Robo-guice 类似,并具有一些主要的 IoC 功能。(减少加载视图/服务等的样板代码......)

但是,我认为解决您的问题的核心是能够加载单独的 APK“插件”文件,其中包括“res”以及<layouts>.xml文件。该<layouts>.xml文件可以由该 APK 中的类独立扩展。也就是说,您可以将 CustomView (它自己膨胀<layout>.xml)加载到原始/父应用程序中。所有这些都是在父应用 APK 不知道 UI 是如何在插件 APK 中膨胀的情况下完成的。

我的意思的示例:我有一个映射应用程序,框架将动态扫描与“附加功能”插件的“合同”匹配的已安装 APK,并将特定于它的 UI 作为浮动面板加载到应用程序的视图中.

我会说 Android 的插件框架是可行的,因为 Android 拥有大部分(如果不是全部)必要的内置 API 来实现这一点。

这些是您在 Android 插件开发领域的朋友:

  1. PackageManager(扫描安装包,又名插件)
  2. DexClassLoaderClassNotFoundException如果您不使用正确的ClassLoader顺便说一句,将会很痛苦)
  3. Java 反射
于 2012-08-12T09:48:17.460 回答
7

我在哪里可以找到一个插件架构的好例子?

来自 Google 的 Roman Nurik 在他的开源应用dash clock中实现了一个不错的插件框架。插件本身是扩展API中的DashClockExtension类的服务,并安装为具有自己资源的完全独立的 APK 文件。通过 AIDL 定义通信协议需要做很多工作,但它既干净又好用,而且效果很好。

其中一个插件必须在特定屏幕上添加一个按钮,单击此按钮会增加应用程序数据库中的一个值。

可以被插件修改的主布局部分需要由核心应用程序预先定义,并通过通信协议公开。插件应该可以扩展任意布局,并将其发送到主应用程序,这可以将其放在它自己布局的预分配区域内。

于 2015-06-27T02:12:07.137 回答
5

如果你只是想增加模块化,我建议使用依赖注入容器,例如PicoContainerGuiceSpring

如果你想要一个轻量级的插件架构,那么选择Java Plugin Framework (JPF)

它允许您定义可以由您的模块实现的扩展点。插件框架的主要工作是提供一种方法来捆绑这些模块(作为 jar),这些模块由核心应用程序动态找到并作为扩展点的实现给出。

于 2012-04-28T12:12:34.430 回答