rokevin
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
  • 组件化

组件化

接口下沉 + callback原理

官方应用架构指南

将一个app的代码拆分成几份独立的组件,组件之间是低耦合的,可以独立编译打包;也可以将组件打包到一个apk中。

【没有组件化的缺点】:

  • (1)项目可维护性下降。随着项目的增加,即使有做分包目录,但是项目会逐渐失去层次感,可读性、可维护性下降
  • (2)开发和调试效率低。开发和调试时,修改了一个小功能,但是需要重新build整个项目才能看到结果,耗费时间
  • (3)易阻断不同业务模块的并发开发。一个业务模块的小bug,可能阻断其他业务模块的开发和调试,不同业务模块的并发开发会被阻断。
  • (4)版本管理困难。多人联合开发时,在版本管理中容易出现冲突和代码覆盖问题。

【组件化的拆分】

  • 按照业务(功能)划分各个业务组件模块。

【组件化后的优点】

  • (1)每个模块可独立编译,提高了编译速度;
  • (2)开发只负责自己的模块,还可以再做的隔离一些,每个业务线只可见自己业务模块的代码,避免了误修改和版本管理问题。
  • (3)公共的Lib依然是个独立模块

与模块化的区别:是每个模块的角色的转换,一个组件可以独立编译打包,也可以作为lib集成到整个apk中

android组件化开发

APT

Java进阶--编译时注解处理器(APT)详解

Java Poet

JavaPoet的使用指南

WMRouter:美团外卖Android开源路由框架

WMRouter

https://tech.meituan.com/2018/08/23/meituan-waimai-android-open-source-routing-framework.html

ARouter

ARouter

仓库

仓库

项目搭建

app_config.gradle

用于全局版本统一配置,整个app的项目配置文件

在项目中的 build.gradle 中配置

apply from: "app_config.gradle"

buildScript {
    repositories {
        google()
        jcenter()
    }
    
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
    }
}

allprejects {
    ...
}

自定义扩展内容

ext {
    test="测试"
}

使用自定义扩展内容

在app中的 build.gralde 中设置

// 使用方式一,定义变量
def test = this.rootProject.ext.test
println "test is :" + test

// 使用方式二,直接引用
println "${rootProject.ext.test}"
println "test is :" + test

android {
    xxxx
}

println是个当过语法,相当于js 弱类型

依赖简单的配置

config.gradle

ext {

    app_impl = [
        "appcompat" : "androidx.appcompat:appcompat:1.1.0",
        "junit" : "junit.junit:4.12",
        ...
    ]
}

app的build.gradle

// 可以这么简单的循环下不用每个都写了
app_impl.each {
    k, v -> implementation v
}

环境的设置

通过下面设置环境
release {
    buildConfigFiled("string", "SERVER_URL", "\"${url.release}\"")
}
debug {
    buildConfigFiled("string", "SERVER_URL", "\"${url.debug}\"")
}

结构搭建

MyApp/
├── base 存放基类 访问有权限,很少改动 
├── common 存放公共工具类或者自定义View,大家都可以改动 
├── network 存放网络框架 访问有权限,很少改动
├── 业务module 各个业务的module,使用arouter或者cc连接  
│   └── api
├── 用户中心 
└── 业务1
     ├── api
     └── other

组件化和集成化切换

状态表示

组件化:有小绿点,可以单独运行
集成化:柱状图,不能单独运行,需要依赖app

排除业务模块的测试代码

配置sourceSets

组件化模块之间的交互

组件化APT JavaPoet

APT编译的时候处理注解,依赖于注解

JavaPoet 生成java文件 BufferedWriter writer = new BufferedWriter(SourceFile.openWriter()); writer.writer("import xxxxxx");

编译期做事 在compiler java module的依赖中设置两个

构建 -> 编译 -> 打包 -> 安装

compileOnly 'com.google.auto.service:auto-service:1.0-rc4'
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'

// 导入java poet

implementation 'com.squareup:javapoet:1.9.0'

创建两个java项目,一个注解,一个注解处理。

注解处理继承AbstractProcessor实现process()方法

资料

详解Gradle自动实现Android组件化 https://juejin.im/post/6844903847572275213

模块化,组件化傻傻分不清?附带组件化福利 https://www.jianshu.com/p/f5212cf7df55

Android组件化最佳路由—ARetrofit https://www.jianshu.com/p/4210234cf0a0

牛笔了!阿里P8大佬熬夜15天,把所有Android第三方库整理成了PDF https://www.jianshu.com/p/8ba7af02b003

腾讯大牛最佳总结!只需一篇文章教会你Android组件化 https://www.jianshu.com/p/18e46e0e4b9c

一次搞懂—模块化、组件化与插件化 https://www.jianshu.com/p/35bc4f456759

从零开始搭建Android组件化框架 *** https://github.com/tome34/frameDemoMo2

资料

Android 组件化之通信

腾讯Android研发岗必刷真题:说下组件之间的跳转和组件通信原理机制

CC

Android组件化方案及组件消息总线modular-event实战

component

LiveEventBus

一种简单的低侵入性的组件化方案

一种低侵入性的组件化方案 之 传统组件化方案的问题

最近更新:: 2025/10/22 15:36
Contributors: luokaiwen, 罗凯文