Android应用程序的插件架构?

Nic*_*oul 38 android dalvik dex android-inflate layout-inflater

本问题已移至https://softwarerecs.stackexchange.com/questions/27841/plugins-architecture-for-an-android-app


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

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

这是我想要一个插件能够做到的:

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

我想避免让核心应用程序的代码复杂化,到处都是大量的钩子.

插件的形式可以是SD卡上的文件,应用程序或其他任何内容.

小智 8

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

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

我的意思是:我有一个Mapping App,该框架将动态扫描已安装的APK,它与"附加功能"插件的"合同"相匹配,并将特定于其的UI作为浮动面板加载到App的View中.

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

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

  1. PackageManager(扫描安装包,又名插件)
  2. DexClassLoader(ClassNotFoundException如果你不使用正确的ClassLoaderbtw 会很痛苦)
  3. Java反思


Chr*_*bek 5

如果您只是想提高模块化程度,我建议使用依赖注入容器,例如PicoContainerGuiceSpring

如果您想要轻量级插件架构,那么请选择Java Plugin Framework (JPF)

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


Tim*_*Rae 5

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

Google的Roman Nurik在他的开源应用程序时钟中实现了一个很好的插件框架.插件本身是服务,它扩展了API中DashClockExtension类,并作为完全独立的APK文件安装,具有自己的资源.通过AIDL定义通信协议是相当多的工作,但它很好,干净,效果很好.

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

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