插件架构的Android应用程序? [关闭](Plugins architecture for

2019-06-23 19:11发布

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


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

我在哪里可以找到一个插件体系结构的一个很好的例子?

以下是我想一个插件能够做到:

  • 重新定义一个特定的屏幕的布局( 负载瘪XML ?)
  • 重新定义一个类的方法( 负荷DEX类 ?, AOP ?)

例如,插件必须添加特定的屏幕上的按钮,点击此按钮,增加在应用程序的数据库中的值。 这是不可行的与内容提供商和意图,因为据我所知。

我希望避免的核心应用程序的代码复杂,到处是吨挂钩。

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

Answer 1:

我做了一个框架,就像机器人 - 吉斯的一些其主要的IoC功能。 (砍倒上装载的意见/服务等样板代码...)

但其核心,我认为这是解决问题的方法,就是加载单独的APK“插件”文件的能力,包括“资源”以及<layouts>.xml文件。 所述<layouts>.xml文件可以被独立地由APK内的类充气。 也就是说,可以加载CustomView(即膨胀其自身<layout>.xml )到始发/父应用程序。 所有这一切都没有父应用程序APK知道UI是如何在插件APK充气完成。

我的意思例子:我有一个地图应用,该框架将动态扫描安装了“附加功能”插件的“合同”匹配APK,并加载特定的用户界面,以它在应用程序的视图作为浮动面板。

我想说的Android插件框架做,能,由于Android拥有最如果不是全部建在API的必要的做到这一点。

这些都是在这方面为Android插件开发的朋友:

  1. PackageManager(扫描安装软件包,又名插件)
  2. DexClassLoaderClassNotFoundException将是一个痛苦,如果你不使用正确ClassLoader BTW)
  3. Java反射


Answer 2:

我在哪里可以找到一个插件体系结构的一个很好的例子?

从谷歌的罗马Nurik已经实施了他的开源应用程序一个不错的插件框架冲刺时钟 。 插件本身是扩展服务DashClockExtension的类API ,并安装自己的资源,完全独立的APK文件。 这是相当多的工作通过AIDL定义的通信协议,但它是非常干净的,而且运作非常良好。

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

其可以由插件进行修改的主要布局的部分将需要由核心应用是预定义的,并经由通信协议露出。 它应该是可能的插件膨胀任​​意布局,并将其发送到主应用程序,它可以把它自己的布局的预分配区域内。



Answer 3:

如果你只是去增加模块,我会建议使用依赖注入容器,如PicoContainer的 , 吉斯或春季 。

如果你想要一个轻量的插件架构,然后再为Java插件框架(JPF) 。

它允许您定义扩展点,可以通过你的模块来实现。 插件框架的主要工作是提供一种方式,你可以捆绑这些模块(如罐子),其动态地由核心应用程序中发现并作为扩展点的实现方式给出。



文章来源: Plugins architecture for an Android app? [closed]