初期Android项目构建方式基本为分层结构设计,由于初期项目较小这种架构简单,清晰因此沿用至今。而当项目业务逐渐扩大时发现简单的分层结构已经无法满足现有项目架构,尤其是多人开发时各个业务之间沟通成本成指数上升。 应运而生的模块化思想诞生,初期大家只是将项目的业务进行简单拆分成各个module,以主module去引用子module。
后来发现这种方式隔绝了子module之间的通信,且主module只能主动的引用子module,无法被子module访问。随之而来进入主题了–组件间如何去通信
组件间通信方式
目前最常用的通信方式有Event、协议、RPC接口三种主要形式,但实际上都只是协议的一种变形封装而已。从标题能看出我参考了微信的模块化通信我就不墨迹,我更倾向于微信的RPC形式的通信方式。 原因有以下几点:
- 协议以接口形式展现能避免协议格式以及字段的维护
- 双方开发时省却协议解析步骤,避免解析过程中错误概率
- 将接口以aar形式对外开放,能极大节省双方接入以及后续维护成本
方式已经确定那接下来就是解决实现上的难题,从上述原因中我们可以看到几个关键点:
- 如何暴露接口
- 如何生成接口aar
- 如何注册并初始化接口实现类
首先我们来说说如何生成接口aar,大家都知道aar对应的是一个独立的module,那如何自动生成该module? 从微信的实现上看它是为setting新增了include_with_api方法,并修改了gradle指向的setting实现类,从而在初始化setting类时自动生成接口module。 由于个人研究时间有限目前采用取巧方案,在setting.gradle文件中新增include_with_api方法用来自动生成接口module,而build.gradle和AndroidManifest.xml文件皆从实现module中拷贝过来,并修改AndroidManifest.xml中的package以及去掉android:label信息,再去掉原有build.gradle的接口module依赖,从而顺利解决接口module生成方式。
def include_with_api(def projectName) {
include projectName
String rootDir = rootDir.getAbsolutePath();
String moduleName = ((String) projectName).replace(“:”, “”)
String parentName = moduleName.replace(“plugin-”, “”);
copy() {
from rootDir + ‘/’ + parentName + ‘/build.gradle’
into rootDir + ‘/’ + moduleName + ‘/’
filter { line ->
String content = line;
if (content.contains(moduleName)) {
content = “”;
}
content
}
}
copy() {
from rootDir + ‘/’ + parentName + ‘/src/main/AndroidManifest.xml’
into rootDir + ‘/’ + moduleName + ‘/src/main/’
filter { line ->
String content = line;
content = content.replace(“android:label=”@string/app_name"“, “”)
if (content.contains(“package=””)) {
content = content.replace(“”>“, “.plugin”>”)
}
content
}
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
结尾
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~
望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~
[外链图片转存中…(img-ANA3BPMV-1710902784764)]