- 当你将它作为一本Android工具书时,它会指导你对Android的进阶学习。
- 当你将它作为一本软件架构书籍时,它会将工具和人的思想关联来调整你对架构的认知。
- 当你将它作为一本思维哲学书籍时,你有可能对Android开发有新的认识。
——摘自本书前言
我依稀看到了一款包治百病的中药,至于它是否管用,主要是取决于你得了什么病,或者有没有病。话是有些刻薄,也许是前言给人期望太高的结果,也可能是作者把思维哲学写的略有些晦涩了。
一点体会
本书一共八章,三百页,大概在一个星期内,每天晚上用一个小时看完。核心是第二章组件化编程,介绍了组件化的基础技术,通信、存储、跳转等各种基本的解耦操作,大概一百页;另外第五章,组件化分发,占了七十余页,不过本章包含了大量的Android基本流程图(各种生命周期)、示例代码等;其余章节一般平均在二十页上下。组件化本身是一种全方位的Android开发模式,所以涉及到琐碎的点有很多,实际上把所有的点的基础都介绍一遍,篇幅已经可以占掉不少了。作为基础书和入门书,还是老少咸宜的。
整体而言,本书是一本合格的工具书。诚如背面封皮的推荐语所说,是一本系统而全面的Android组件化架构的书籍。只是搜一搜网页,看几篇博客是无法对组件化了解这样详细的。甚至于我厂的组件化项目工作已有半年多,仔细看过这本书之后,还是会看到一些没有使用过的部分。开发知识与工具浩如烟海,总有你碰不到的那一面。这本书的独到之处在于,把组件化相关的几乎所有内容都涵盖了进来,而且每一部分都会有两三节来介绍基础知识,对新手入门很友好——换句话说,对中高级的工程师而言,你恐怕不会在这里找到什么新思路,但很可能会夯实一下平时比较薄弱的部分基础,也很有可能发现一些好用的开源工具。
对于一本工具书而言,特别是软件行业的工具书,最大的缺点应该就是时效性了。软件发展日新月异,书籍的再版基本没有赶上技术前沿的可能。所以有所期待的更多的是架构认知与思维哲学这部分,因为这一部分可以是经典而永恒的。然而纵观全书,每个章节的小结或多或少会有一些技术点本身细节之外的思考,但一方面仅仅是只言片语,另一方面感觉更像是开发使用tips。偶尔出现几句惊鸿一瞥的宝相庄严的句子又往往显得如无根的浮萍——不知道从哪儿飘来的,也不知道要漂去哪儿。作者本身或许对组件化、架构这些事儿经验丰富、很有认知,但就本书而言,并没有把一些深刻的东西展示出来。
一点认识
非常突兀的,想聊一下最近重新听起来的施展的《中国史纲》。课程开头,就着重讲解了什么是中国,什么又是历史。对于这个,这里不做详细介绍,反正要看能耐有多大,总要先看人对基本概念的理解与说明。那么什么是组件化架构呢,当尝试从概念上解释时,发现值得思考的有很多,水平还是有限。尝试描述一下,按照套路,先解释“组件化”,组件化是一种以业务或功能为维度将代码以组件的方式来组织实现的设计思路。组件化的核心是解耦合,通过统一的通信机制解除掉业务之间的依赖。从工程角度看组件化的解耦实际上跟具体业务的实现采用MVP解耦所带来的好处和坏处都差不多,好处是职责更加明确、可维护性可测试性会有所提升;坏处则是设计变得相对复杂,需要一些学习成本,而组件化会更会带来组织打包的组件版本管理问题。按照业务组件化之后的工程打包,大概是一个壳工程维护所有的组件依赖、业务组件之间是平级的、最后组织打包出一个功能完整的APK的过程。把粒度变细到页面级别,每一个view与相对的功能组件化,就能够实现页面容器配置各个页面组件最后组织出一个完整页面的玩法。当然带来的复杂程度也是相对较高的。
接着可以聊聊“架构”。这是一个很高深的词汇,看到架构会联想到什么,一个树干,软件架构师,系统方框图,服务器分布式部署……抛开一些书本上的概念不提,以目前的思考而言,我认为架构是一种约束。比如分层原则上的约束、层级依赖之间的约束、通信方式的约束等等,它可能不仅仅是一张系统框架图,它需要包涵设计者思路中所有对工程实现有约束意义的协议。应该是抽象思维还比较局限,语言功底也很不足,把简单问题复杂化了些,导致有些谈玄论道不如归去的意思了。
那么结合在一起,组件化架构在我的理解是以组件化的形式来约束开发设计结构的一种实现方案。我曾听人说客户端的开发无所谓架构设计,现在想来或许是大家对架构和设计的概念定义不是很一致的原因。我的第一份工作中当时带我的前辈屡次告诫我说,“写代码一定要设计”,现在看来,小到一个功能函数,大到一个系统架构确实都是需要设计的。架构,或许也可以算是设计中抽象到比较顶层的一环。那么“Android 组件化架构”,你说它名副其实也好,说它牵强附会也罢,整本书描述的其实是开发中各个环节的横向的、纵向的、业务实现的、工具体系的一个合集。至于组件化架构本身的内容,也算是大致涵盖其中,不用过于苛求了。
一点收获
下面是我在这本书中收获的一些琐碎的知识点,希望日后可以按需用到项目中。
开源库
- 反射 jOOR
- 数据库 greenDao/Realm
- 混淆 AndResGuard
- 组件化分发 ModuleBus
- 注解 javapoet
- 模版预研引擎 freeMarker
gradle相关
- 通过 consumerProguardFiles 配置子模块的混淆
- 学习 fat-aar.gradle源码,可以帮助了解gradle编译流程
ctrl + L 可以将switch语句转化成if语句
- 无效的混淆配置会对编译效率造成影响