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