android - Room : 添加额外的功能包/模块
问题描述
问题
我希望为我的项目添加额外的功能,一个Room
based instantapp
,我不确定这样做的最佳策略。应该在现有模块Feature A
下或在新的单独模块下提供额外的“活动” Feature B
。由于新代码将依赖于已经定义的实体和 POJO,Feature A
我可以将这些类提取到base
模块中还是应该设置一个单独的database
模块来包含它们?
背景 (TL;DR)
我目前对Android项目结构的理解如下。Android Studio 为一个新的应用程序生成了大约两个结构。
传统/标准应用程序是使用一个简单调用的主模块生成的,
app
并将其所有代码投入其中。Instant Applications 生成一组模块
app
、base
和。(注意:这通过在“目标 Android 设备”表单中声明“包括 Android Instant App 支持”的复选框启用)FEATURE X
instantapp
这些模块似乎组织如下:
base
- 包含所有其他模块共有的代码和资源,这些模块app
和instantapp
.feature A
- 作为包含应用程序初始代码的“主”包/模块。(注意:目前所有的代码都在这里。)app
- 标准/传统应用程序的构建目标。instantapp
- one 项目提供的“instantapp”的构建目标。
每个模块按如下方式相互继承(implementation ("MODULE")
根据 gradle 构建文件中的行确定)。
base
|
V
Feature A
/ \
V V
app instantapp
好奇心
base
模块_
base
据说会生成一个AAR
文件。也就是说,它创建了一个可以在其他模块中导入的 Android 库。从文档看来,最好使用api
gradle 构建文件中的宏导入此类模块,但用于Feature A
使用implementation
宏的库存构建文件。是否有一个原因 ?
每个功能的实体
其他框架(例如 Django)允许Feature X
模块通过简单地包含模块来定义它们自己的实体,这些实体包含在主数据库中。这可以通过 dagger 或可能的 Kotlin 扩展来完成(我对 dagger 一无所知,但它似乎支持可能用于此目的的依赖注入)?
解决方案
我总是喜欢将数据库集中为一个单独的模块。这样任何人都可以使用数据库表,它们也会松散耦合,这意味着如果有人之前使用 sqlite 并想迁移到 RoomDatabase,那么只能修改 1 个模块,而其他所有模块都保持不变。这是 1 个示例架构。https://github.com/ankitthakur/MobileSecurity-Android
推荐阅读
- terraform - 变量的继承在 terraform 中不起作用
- android - 如何启动来自图书馆的另一个应用程序的活动?
- c++ - 当 ogl::Arrays 的默认构造函数运行时,Opencv2 崩溃
- c# - Json.net 无法序列化从 Monobehaviour 派生的类
- recaptcha - 从 reCAPTCHA 服务中删除域
- java - Java很长的字符串比较似乎不起作用
- sql - ODBC Excel SQL 条件
- python - 在 docker 容器内为 django 运行 cron 作业时,manage.py 脚本出错
- python - 如何在python中取消setInterval?
- c# - 分割字符串的最快方法?