游客发表

android模块化开发

发帖时间:2026-10-17 04:37:14

Android模块化不是块化开银弹,它是块化开一把双刃剑。我见过太多团队把模块化当成炫技的块化开玩具,最后把自己割得鲜血淋漓。块化开真正跑通的块化开架构,往往是块化开从一个痛点出发,被现实逼出来的块化开。

去年我们接手一个电商App,块化开主工程代码超过30万行,块化开编译一次要五分钟。块化开新同事光是块化开跑通项目就要半天,gradle同步时大家集体去泡咖啡。块化开这状态,块化开谁顶得住?块化开模块化的直接目的就是拆。把商品、块化开订单、用户这些业务拆成独立module,每个模块单独编译,改一行代码的验证时间从五分钟缩到三十秒。这体验,用过就回不去了。

但拆,不是乱砍。你见过那种按功能拆得七零八落的工程吗?一个“商品详情”模块里塞着网络请求、数据库操作、UI组件,内部还有一堆互相引用的私有类。这哪是模块化,这是把一个大杂烩分装成几个小杂烩。真正的边界应该是业务闭环——商品模块只管商品展示和交互,它需要的数据通过接口从服务层拿,不直接碰数据库。这个“接口隔离”原则,才是模块化的灵魂。

路由是另一个坑。模块间跳转,很多人用ARouter或者自己写个Router。但路由表一旦膨胀,维护起来就是灾难。我见过一个项目,路由路径字符串散落在十几个文件里,改个路径要全局搜索。后来我们干脆约定:每个模块暴露一个入口Activity,通过显式Intent跳转,模块间不直接依赖类,但通过接口通信。笨办法,反而最稳。

资源冲突也烦人。两个模块都定义了同名颜色或字符串,编译时静默覆盖,运行时UI错乱。这种bug查起来要命。我们的土办法是给每个模块的资源文件加前缀,比如`goods_`、`order_`。虽然丑,但有效。后来还加了lint规则,资源命名不规范直接编译失败。

依赖管理,说多了都是泪。早期用Gradle的`api`和`implementation`分不清,结果模块间传递依赖满天飞。改一个底层库版本,上层模块全崩。现在规矩是:模块对外只暴露接口,内部依赖全部用`implementation`。谁要是用`api`暴露了不该暴露的东西,code review直接打回。

模块化最反直觉的地方在于,它让“小步快跑”成为可能,但也让“整体重构”变得几乎不可能。我们曾经想统一网络层框架,结果发现每个模块都自己封装了一套网络工具。要动底层,得改十几个模块的代码。最后只能靠一个过渡层逐步替换,花了两个季度才搞定。所以,模块化之前,先把基础架构想清楚,不然拆完就是给自己挖坟。

说到底,模块化是手段,不是目的。如果团队只有五个人,项目代码量不大,老老实实单工程开发反而更高效。模块化的代价是初期设计成本高、调试链路变长、工具链复杂。只有当项目大到编译慢、协作乱、测试难的时候,才值得动手。你问我现在还推不推荐模块化?我推荐,但前提是你真的被痛过,并且愿意为长期维护付出短期的折腾。这活儿,急不得。

    热门排行

    友情链接