模块化的android项目
我的场景
我必须实现一个“模块化”android应用程序。 有一个核心模块,我应该能够调用其他模块。 每个模块为用户提供了不同的功能。 想象一下,我正在制作一个城市指南,然后一个模块可能会包含一个包含POI的地图,另一个包含事件日历和第三个预先定义的城市指南。 这些模块包含要加载到核心模块活动中的视图(如每个模块放置其项目/图片的仪表板)。 它们还包含应该调用的活动(例如用户点击仪表板上的项目时)。 据我所知,我只需要核心模块中的数据库和/或首选项。 “插件模块”使用核心模块的类(实用程序),例如连接到后端时。
我在iOS上的解决方案
对于iOS,我使用XCode中的目标实现了这一点。 我有一个项目,根据客户的需求,我只编译相关模块。 如果用户可以随时安装模块,而无需重新安装“核心”应用程序,那将会更好。
Android上的问题
在SO中,我已经找到了各种解决方案,比如库项目,从Eclipse切换到Android Studio +,使用包管理器和广播接收器......但我仍然不明白... Android应用程序的模块化是如何实现的实现?
以下是我看到的一些具体问题:
库:我的模块都使用核心模块的类,所以它们不是独立的。 我通过使用接口/继承来实现模块化,这取决于我需要的灵活性。
广播接收器:这似乎是推荐的其他事情。 例如,参见这里或这里。
至少,我需要的是能够使用相同的代码向特定的客户提供功能A和B的应用程序,并使用B和C将应用程序提供给另一个客户。 而且,到现在为止,我不知道如何实现它。
PS:我不想使用脚本,我不熟悉这一点。
我没有看到这个“模块化”应用程序与任何不同于一个应用程序的应用程序,有几个程序包,每个程序包都包含离散功能,适用于某些设置或外部参数列表(由用户或您提供)。
我的做法是制定一个“主要”包裹。 该软件包将包含您在上面提到的共享功能,并作为应用程序的中心。 然后,我会为不同的“附加”功能创建单独的子包。 这允许您仍然使用简单的import语句在主包中使用代码。 从你的描述来看,这些附加功能可能应该作为Fragment
来实现。 Fragment
几乎是一个独立的应用程序,不同之处在于它由一个Activity
“托管”。 根据如何使用这些附加功能(我无法确定它们是否与用户界面相关,仅仅是后台处理等),您可以轻松地选择4个不同的片段中的3个,并选择在运行时只加载1或3或2个片段。
为了控制代码的哪些部分被使用,我只需要设置一个简单的切换类(它甚至可以是第一个启动的活动的一部分,我不能从上面的描述中得知)。 在这里,我会检查一些设置,指出应用程序的哪些部分将“处于活动状态”。 在交付最终项目之前,可以使用SharedPreferences
轻松定义这些内容以存储特定的配置,例如使用A和B. 然后,您只需初始化您需要的片段,并单独在Fragment
布局元素或FrameLayout
显示它们(1); (2)像ViewPager
一样在一些其他视图结构中ViewPager
。
我在BroadcastReceiver
上关注你的链接,我仍然不确定他们为什么是“推荐以外的其他东西”。 正确使用BroadcastReceiver
非常有用。 当一些AsyncTask
(例如下载大量数据)完成时,我倾向于使用LocalBroadcastManager
和BroadcastReceiver
来通知应用程序的其他部分。 然后,应用的这些部分可以访问本地数据库或处理自己下载的信息。 我不会使用BroadcastReceiver
来调整应用程序的某些部分,如果这是您正在寻找的。 相反,我只是使用SharedPreference
文件在运行时设置配置。
如果你需要facebook sdk之类的模块或类似的东西,那么最好使用库项目。 如果您使用Idea或Android Studio,那么就有像Module这样的东西。 如果我在一个应用程序中需要一些模式,我宁愿只是放在不同的包,如com.appname.model,com.appname.ui等。 广播接收器不是模块。 据我所知,没有类似ios的目标。
链接地址: http://www.djcxy.com/p/30691.html