模块化 android 项目 - 如何?

2024-01-29

我的场景

我必须实现一个“模块化”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(使用前将#替换为@)

模块化 android 项目 - 如何? 的相关文章

随机推荐

  • 如何在 const 中定义数组?

    我在定义字符串数组时遇到一些问题const在 Inno Setup 的代码部分下 我有以下内容 Code const listvar array 0 4 of string one two three four five 它说我需要一个 哪
  • 如何使用 Android 导航抽屉更改片段

    我知道这些类型的问题已经在这里 但我仍然没有找到这个问题的答案 我创建了一个应用程序并使用了由应用程序 AndroidStudio 自动创建的导航抽屉 这是我所拥有的 Override protected void onCreate Bun
  • 如何从 iPhone 的表格视图中获取所选单元格的单元格值

    我在表视图控制器中显示图像 其中图像从 URL 呈现为 XML 文件 它适用于将图像作为滚动视图列出 现在我想选择一个特定的图像 窗口应该单独显示所选的单元格图像 为此 我需要获取单元格值吗 如果是这样 我如何获取特定的单元格值并在下一个窗
  • Blob createObjectURL 下载在 Firefox 中不起作用(但在调试时有效)

    我有一个奇怪的问题 下面的函数是我根据我在网上找到的有关在客户端中动态创建 Blob 并使用一些二进制数据 作为数组传递 并能够下载该数据创建的函数 这在 Chrome 中工作得很好 但在 Firefox 中没有任何作用 除非我调试并单步执
  • 如何使用 Rust 在用户空间处理 SIGSEGV 信号?

    我试图了解 Rust 中的堆栈溢出处理程序 我已经写了函数recursive stack 它一次又一次地声明一些局部变量以耗尽堆栈空间 extern crate nix use nix sys signal extern C fn hand
  • 使用 CustomAttributes 调用 sagemaker 端点

    我正在尝试调用我的 SageMaker 端点并传递指定的 CustomAttributes 参数here https boto3 amazonaws com v1 documentation api latest reference ser
  • 如何在 Dart 中触发 KeyboardEvent

    正如我在标题中所说 我想在 Dart 中模拟 keyup 事件 问题是我还没有找到如何创建新的 KeyboardEvent 对象 我发现的唯一方法是使用 Event String 类型 构造函数 然后将其分派到窗口对象上 但这不起作用 因为
  • 无法加载从带有标识符的包中的笔尖引用的“”图像

    当我加载我的应用程序时 它会显示一条警告消息 无法加载从捆绑包中的笔尖引用的 图像 标识符 我搜索并确认了我所有的图像 但它仍然显示该警告 在项目导航器中选择您的图像 打开文件检查器 确保您已选择目标
  • 可以使用“ifconfig”块(reStructuredText)有条件地定义目标

    是否可以有条件地定义target https docutils sourceforge io docs ref rst restructuredtext html hyperlink targets在 reStructuredText 文件
  • 前端开发中的“乐观更新”是什么

    我正在读介绍redux pattern https redux js org introduction motivation 并且有以下段落 考虑前端产品中变得普遍的新要求 开发 例如处理乐观更新 渲染 服务器 在执行路由转换之前获取数据等
  • 在 iOS 上引发的 Xamarin.Forms.WebView.Navigating 事件用于内部导航

    假设您希望阻止用户从 Xamarin Forms WebView 导航到外部页面 public App var webView new WebView Source new HtmlWebViewSource Html h1 Hello w
  • 带 firebase 身份验证的拦截器

    我的 Angular 6 拦截器出现问题 我已将代码从 Angular 5 x 迁移到 6 0 和 rxjs 5 x 到 6 x 当我尝试创建新用户帐户时 该请求似乎被调用了两次 我知道这一点是因为我将错误记录到控制台 我注意到当我尝试从
  • 从 XCAsset 目录获取数据

    我知道要从资产目录中获取图像 我可以使用 UIImage named fileName 来执行此操作 但是 如果我从 XCAsset 目录获取数据怎么办 我无法弄清楚这一点 我努力了 let url NSBundle mainBundle
  • 当键盘出现时向上滑动表格

    你好 我正在使用表格进行数据输入 一些文本字段位于表单底部 当我单击文本字段进行书写时 键盘会出现并隐藏其后面的字段 如果我使文本字段成为第一响应者 它会隐藏键盘 但通过这样做我无法做到这一点 我想知道当键盘出现时 整个表单应该以我的最后一
  • 在 Visual Studio Code 中启用错误突出显示

    我最近使用 Visual Studio Code 进行 C 编程 我的代码中有一个错误 但是我希望 VS Code 突出显示它Example https i stack imgur com D1gon png 解决方案实际上非常简单 在此之
  • Java - JTextPane 中的自动缩进

    我正在用 Java 制作一个文本编辑器 除了自动缩进之外 我拥有所需的一切 如果它们转到新行 我如何使缩进保持不变 我的编辑器窗口使用 JTextPane 基本上 如果用户输入新行 我希望新行像前一行一样缩进 这是到目前为止我的缩进代码 注
  • WebLogic 中默认“经过身份验证的角色”的角色名称是什么?如何在我的部署描述符中引用它?

    我正在尝试在 Web 应用程序中实现身份验证机制 并将其部署在 WebLogic 12c 实例上 我想限制只有经过身份验证的用户才能访问某些页面 我的问题是弄清楚如何定义我的安全部分的身份验证约束来执行此操作 这是我的 web xml 的安
  • Swift:错误:“必需”初始化器“init(coder:)”必须由“UIView”的子类提供

    当我在 swift 2 中构建我的应用程序时遇到问题 Xcode 说 required 初始化程序 init coder 必须由 UIView 的子类提供 这是该类的代码 class creerQuestionnaire UIView IB
  • Hibernate:使用 setFirstResult 和 setMaxResult 进行分页

    我正在开发一个使用 Hibernate 作为 ORM 框架的 Java EE 项目 为了对查询结果进行分页 我使用 setFirstResult 和 setMaxResult 方法 Criteria API 问题是第一页显示正确 但当我转到
  • 模块化 android 项目 - 如何?

    我的场景 我必须实现一个 模块化 Android 应用程序 有一个核心模块 我应该能够从中调用其他模块 每个模块为用户提供不同的功能 想象一下 我正在制作一份城市指南 那么一个模块可能包含带有 POI 的地图 另一个模块包含活动日历 第三个