模块化 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 项目 - 如何? 的相关文章

  • 导入已经创建的sqlite数据库(xamarin)

    我正在使用 Xamarin 想知道如何导入我已经创建的 sqlite 数据库 到目前为止 我已将其添加到资产文件夹中 但不知道下一步从哪里开始 string localPath Path Combine System Environment
  • 如何在 Android TextView 中使用土耳其语字符,如“ş ç ı ö”?

    我想在 android TextView 中写入 ile 但它没有正确绘制 怎样才能使用这样的字符呢 例如 我将文本视图设置为 ile 它显示为 ile 我怎样才能解决这个问题 尝试以下方法 看看是否有帮助 source http grou
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • android中根据屏幕尺寸计算图像尺寸

    我正在尝试根据屏幕尺寸计算图像高度和宽度 我从后端获取 5 x 7 尺寸的图像 为了将像素乘以 72 进行转换 我有 360 X 504 尺寸的图像 对于 360 X 504 我的动态透明矩形区域将显示为 1 223 x 1 179 即 8
  • Android PhoneGap 插件,UI 选项卡栏,调整 WebView 大小

    我正在创建一个美味的 PhoneGap 插件 希望一旦它能被打开 准备好了 插件基本完成了 我只需要一个漂亮的用户界面 相互作用 简而言之 我想创建一个 本机 android 工具栏组件 如果您实现 PhoneGap UIControls
  • 如何在活动中的必填字段中显示 * 符号

    我需要在活动中的必填字段中显示 符号 你能建议我怎样才能做到这一点吗 任何帮助 将不胜感激 我想说 作为必填字段的标记不遵循本机 Android 主题 的组合setHint and setError对于 Android 应用程序来说看起来更
  • Junit maven构建错误(maven-surefire-plugin:2.19.1:测试失败:分叉进程中出现错误)[重复]

    这个问题在这里已经有答案了 我通过引用创建了一个示例 struts 2 项目和 J unit 测试用例link http self learning java tutorial blogspot com au 2015 04 struts2
  • Android 版 jTwitter 授权错误

    我在我的 Android 应用程序中使用 jTwitter 库 直到前天一切都运转良好 但今天遇到异常 服务提供商响应错误 301 请帮助我 这是堆栈跟踪 02 21 21 07 27 258 E AndroidRuntime 4013 F
  • 在 Android Lollipop 中从 Uri 中裁剪照片后总是返回 Null?

    我尝试在拍照或挑选照片后从 Uri 中裁剪图像 我的代码是这样的 public static void cropImage Uri uri Activity activity int action code Intent intent ne
  • 使用 Android Studio 进行调试永远停留在“等待调试器”状态

    UPDATE The supposed重复是一个关于陷入 等待调试器 执行时Run 而这个问题就陷入了 等待调试器 执行时Debug 产生问题的步骤不同 解决方案也不同 每当我尝试使用Android Studio的调试功能时 运行状态总是停
  • 像 WhatsApp 一样发送图片

    我做了一个聊天应用程序 我想添加照片 文件共享我的应用程序中的概念与 WhatsApp 相同 我已经使用该应用程序制作了Xmpp Openfire目前我正在使用此功能进行照片共享 但它并不完全可靠 public void sendFile
  • android中listview显示数据库中的数据

    我是安卓新手 我想知道如何在列表视图中显示数据库中的数据 它不会向数据库添加数据 我只是显示我们存储在数据库中的任何内容 请帮助我实现这一目标 提前致谢 使用这些课程可能会对您有所帮助 用于数据库创建 package com example
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • Android Root 执行 su 带参数

    我在使用参数执行 su 时遇到问题 包含空格 我的 Command java 看起来像这样 public class Command Process process public String executeCommand String c
  • 在 Mac 上使用 Eclipse 进行 C++ 调试器

    当我最终设置我的 mac 来使用 eclipse 后 我无法调试 我尝试通过谷歌寻求帮助 但没有一个答案对我有用 所以 我需要有人帮助我在 eclipse 上安装和使用 c c 调试器 我安装了 Xcode 5 0 感谢您的帮助 Roy 您
  • 如何在Android中创建一个简洁的两栏输入表单?

    我想创建一个整洁的两列输入表单 如下所示 到目前为止我的 xml 布局代码
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • 为什么带处理程序的连续自动对焦相机不允许切换相机闪光灯?

    到目前为止我所做的 我已经实现了用于读取二维码的自定义相机 需要继续聚焦相机以获得更好的二维码读取 我的问题当我使用处理程序每 秒聚焦一次时 相机闪光灯开 关按钮不起作用 或者打开和关闭相机闪光灯需要太多时间 当我删除每秒自动对焦相机的代码

随机推荐

  • 如何在 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 的地图 另一个模块包含活动日历 第三个