我的场景
我必须实现一个“模块化”Android 应用程序。有一个核心模块,我应该能够从中调用其他模块。每个模块为用户提供不同的功能。想象一下,我正在制作一份城市指南,那么一个模块可能包含带有 POI 的地图,另一个模块包含活动日历,第三个模块可能包含预定义的城市指南。这些模块包含要在核心模块的活动中加载的视图(例如每个模块放置其项目/图片的仪表板)。它们还包含应调用的活动(例如当用户点击仪表板上的项目时)。据我所知,我只需要核心模块中的数据库和/或首选项。 “插件模块”使用核心模块的类(实用程序),例如连接后端时。
我在 iOS 上的解决方案
对于 iOS,我通过 XCode 中的目标实现了这一点。我有一个项目,根据客户的需求,我只编译相关的模块。如果用户可以随时安装模块,而不需要重新安装“核心”应用程序,那就更好了。
我在 Android 上遇到的问题
在SO中,我已经找到了各种解决方案,例如库项目,从Eclipse切换到Android Studio +一些东西,使用包管理器和广播接收器...但我仍然不明白... Android应用程序的模块化如何达到了?
以下是我看到的一些具体问题:
库:我的模块都使用核心模块的类,因此它们不是独立的。我根据我需要的灵活性使用接口/继承来实现模块化。
广播接收器:这似乎是除推荐之外的所有其他内容。例如,参见here https://stackoverflow.com/a/23241454/2320456 or here http://mylifewithandroid.blogspot.de/2011/01/plugins-with-user-interface.html.
我至少需要的是能够使用相同的代码将具有功能 A 和 B 的应用程序交付给一位客户,并将具有 B 和 C 功能的应用程序交付给另一位客户。而且,直到现在,我还不知道如何实现它。
PS:我不想使用脚本,我对此不熟悉。
我不认为这个“模块化”应用程序与一个应用程序有什么不同,它有多个包,每个包都包含离散的功能,适应某些设置或外部参数列表(由用户或您提供)。
我的方法是有一个“主”包。该包将包含您上面提到的共享功能,并作为您的应用程序的中心。然后,我将为不同的“附加”功能创建单独的子包。这允许您仍然通过简单的导入语句使用主包中的代码。根据您的描述,这些附加功能可能应该作为Fragment
. A Fragment
几乎是一个独立的应用程序,除了它是由一个Activity
。根据这些附加功能的使用方式(我无法判断它们是否与 UI 有关,只是后台处理等),您可以轻松拥有 4 个不同片段中的 3 个,并选择在运行时仅加载其中的 1 个或 3 个或 2 个。
为了控制使用代码的哪些部分,我只需设置一个简单的切换类(它甚至可以是启动的第一个活动的一部分,我无法从上面的描述中看出)。在这里,我将检查一些设置,指示应用程序的哪些部分将“活动”。这可以很容易地定义使用SharedPreferences
存储特定配置,例如在交付最终项目之前使用 A 和 B。然后,您只需初始化所需的片段并在 (1) 中单独显示它们Fragment
布局元素或FrameLayout
; (2) 集体地在其他一些视图结构中,例如ViewPager
.
我关注你的链接BroadcastReceiver
我仍然不确定为什么他们是“除了推荐之外的一切”。正确使用aBroadcastReceiver
非常有用。我倾向于使用LocalBroadcastManager
连同一个BroadcastReceiver
当某些情况时通知应用程序的其他部分AsyncTask
,例如下载了很多资料,就完成了。然后,应用程序的这些部分可以访问本地数据库或自行处理下载的信息。我不会使用BroadcastReceiver
如果您正在寻找的话,可以调整应用程序的某些部分。我只想使用SharedPreference
文件以在运行时设置配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)