前言

大家应该都知道,项目模块化是一个大命题,相信各团队都有其合理方案。本文不求涵盖各方面,仅从项目协同、开发调试、业务模块服务调用与通知三个方面简述一个可行方案。下面话不多说了,来一起看看详细的介绍吧。
项目协同
项目协同,也叫多项目协同,是对多个相关且有并行情况项目的管理模式,它是帮助实现项目与企业战略相结合的有效理论和工具[1]。本文的项目协同为Android主APP与其他业务模块的协同。
假设我们的APP目录如下,一个主app,多个modules。并假设我们的主app与各modules为多git repository。一个大APP多git repository管理是合理的。本文使用git repo[2]管理项目(可能有团队使用git submodule[3],在此不推荐,其坑会很多)。
MApp --独立git rep app modules module1 --独立git rep module2 --独立git rep module3 --独立git rep ...
使用git repo,团队早期可以不用玩一整套(git repo+gerrit),可以考虑只用repo去管理项目目录,成员提交代码还是继续走git提交。
项目开发与调试
Android模块化的主要目的是业务并行开发,减少编译时间,但又方便业务模块与主App的调试。本文介绍如下方案。
MApp
app --application
modules
module1
demo --application
lib --library
settings.gradle
settings.gradle
settings_debug.gradle
local.properties
MApp的settings.gradle文件:
boolean moduleDebug() {
boolean ret = false
try {
Properties properties = new Properties()
File file = file('local.properties')
if (!file.exists()) {
return false
}
properties.load(file.newDataInputStream())
String debugStr = properties.getProperty("debug")
if (debugStr != null && debugStr.length() > 0) {
ret = debugStr.toBoolean()
}
} catch (Throwable throwable) {
throwable.printStackTrace()
ret = false
}
return ret
}
include ':app'
if (moduleDebug()) {
apply from: 'settings_debug.gradle'
}
settings_debug.gradle文件:
//include 'module1'
//project(':module1').projectDir = new File('modules/module1/lib')
...其他业务模块
当module1在需求开发阶段,完全不用考虑主APP,可以在Android Studio中以项目的方式打开。当module1需要和主APP跑流程时,我们只需要把MApp的local.properties的debug属性改为true,并在settings_debug.gradle中打开module1即可。
业务模块服务调用与通知
当APP模块化后,通过Intent(Context packageContext, Class<?> cls)方式去启动其他模块的Activity就不太合理了。模块化后,模块里的Activity或其他组件对其他业务模块最好透明。唤起Activity可以通过App Links[4]的方式,也就是我们常说的url router方式。App Links还可以玩deep link。Github上现在开源项目比如ARouter[5]就是App Link的应用。
当然,模块之间的通信,不局限于启动四大组件,还有服务调用与通知。这的服务不是Android系统的Service。举个服务通知的例子,在电商APP中,店铺详情页点收藏按钮,可能要通知其他模块,变更UI或数据。服务调用的例子,比如模块唤起登陆注册,登陆或注册成功后,做相应业务处理。
服务调用,大部分团队可能没涉及到。服务调用可以用IOC,反射等注册到服务注册中心。本文选一个取巧的方案。利用Applicatin.getSystemService方法,让Application作为ZoomKeep一样成为服务注册中心。只要各Serivce继承同一个Interface,相应模块间服务调用就不难了。
public class MApp extends Application {
@Override
public Object getSystemService(String name) {
return super.getSystemService(name);
}
}
服务通知,稍简单,用广播,EventBus[6]或其他方式都可。本文推荐EventBus,但其有缺点,如Event多起来后,很难找全观察者和通知者之间的关系;一些简单Event对象无法复用,所以最好二次开发。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
参考
[1] 项目协同: http://www.baike.com/wiki/%E...
[2] git repo:https://gerrit.googlesource.com/git-repo/
[3] git submodule: https://git-scm.com/book/zh/v1/Git...
[4] App Links:https://developer.android.com/training/app-links/deep-linking.html
[5] ARouter:https://github.com/alibaba/ARouter
[6] EventBus:https://github.com/greenrobot/EventBus
# android
# 模块化
# 模块化开发
# android模块化框架
# Android笔记之:App模块化及工程扩展的应用
# 多个
# 是一个
# 都有
# 还可以
# 很难
# 在此
# 不太
# 说了
# 可以用
# 不多
# 只需
# 并在
# 有一定
# 它是
# 要把
# 可以通过
# 能有
# 或其他
# 各方面
# 多项
相关文章:
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
大连 网站制作,大连天途有线官网?
建站之星安装路径如何正确选择及配置?
建站之星Pro快速搭建教程:模板选择与功能配置指南
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
css网站制作参考文献有哪些,易聊怎么注册?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
c++怎么用jemalloc c++替换默认内存分配器【性能】
ppt制作免费网站有哪些,ppt模板免费下载网站?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
如何快速生成专业多端适配建站电话?
怎么将XML数据可视化 D3.js加载XML
安云自助建站系统如何快速提升SEO排名?
红河网站制作公司,红河事业单位身份证如何上传?
制作网站的模板软件,网站怎么建设?
如何零基础在云服务器搭建WordPress站点?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
微信h5制作网站有哪些,免费微信H5页面制作工具?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何通过网站建站时间优化SEO与用户体验?
公司网站制作价格怎么算,公司办个官网需要多少钱?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何通过二级域名建站提升品牌影响力?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星后台管理如何实现高效配置?
如何确保西部建站助手FTP传输的安全性?
广州商城建站系统开发成本与周期如何控制?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
制作门户网站的参考文献在哪,小说网站怎么建立?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
如何在西部数码注册域名并快速搭建网站?
Android使用GridView实现日历的简单功能
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何用VPS主机快速搭建个人网站?
如何快速搭建高效可靠的建站解决方案?
建站之星展会模版如何一键下载生成?
C++中引用和指针有什么区别?(代码说明)
建站为何优先选择香港服务器?
建站168自助建站系统:快速模板定制与SEO优化指南
Bpmn 2.0的XML文件怎么画流程图
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
建站上传速度慢?如何优化加速网站加载效率?
如何选择高性价比服务器搭建个人网站?
如何在云主机快速搭建网站站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。