组件化

组件化

概况:

提高编译速度、提升协作效率、功能重用

代码重用和解耦

all.png

组件模式和集成模式切换

if (iMisModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}

if(iMisModule.toBoolean()) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
}else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}

1.大型项目只编译某些module

2.海外分享和国内分享依赖编译不同module带不同sdk

weiboshare.png
Arouter流程图

本质解决:不同module无法相互引用对方的类的问题

arouter.png
arouter1.png
arouter2.png

1.通过router注解创建映射类
2.init navigation 通过映射构建postcard进行跳转等

apt语javapoet

apt注解处理器(参见RouteProcessor) :

APT(Annotation Processing Tool):
编译期注解处理技术,通过自定义注解和注解处理器来实现编译期生成代码的功能,并且将生成的代码和源代码一起编译成 class 文件
1.基础配置依赖等
2.继承AbstractProcessor
3.重写init方法对Element操作
什么是Element Element

element.png
Java- poet:
javapoet.png
Arouter processor过程:

动态生成class文件过程

arouter_poet.png

Android Gradle Transform

Gradle Transform是Android官方提供给开发者在项目构建阶段(.class -> .dex转换期间)用来修改.class文件的一套标准API,即把输入的.class文件转变成目标字节码文件。
目前比较经典的应用是字节码插桩、代码注入等。
参考:链接

1.gradle依赖
2.创建groovy 目录,创建 Transform 类(ARouter RegisterTransform)
transform方法中可以遍历所有的jar包里面文件和目录文件
DirectoryInput 集合 是指以源代码方式参与项目编译的所有目录结构及其目录下的源代码
JarInput 集合 是指以 jar 包方式参与项目编译的本地 jar 包和远程 jar 包,包含 aar

第三步创建 plugin(参考ARouter PluginLaunch), 注册 transform

第四步 创建 properties 文件 在 plugin/src/main 目录下创建新目录 resources/META-INFO/gradle-plguins, 然后创建文件,内容指定为上一步创建的 plugin

第五步,修改相关的 build.gradle 文件,添加依赖

Arouter 动态注册loadRouterMap register 方法的过程


A_transform.png

流程:RegisterTransform 的transform扫描所有的class文件

调用ScanUtil.scanJar()扫描jar包
调用ScanUtil.scanClass()扫描所有class文件
ScanClassVisitor扫描每个class类,进行接口判断,如果在RegisterTransform.registerList配置的接口中,就搜集该类
扫描时需要判断class是否在com/alibaba/android/arouter/routes/的包下
在搜索jar包时,顺便把LogisticsCenter所在的文件找到,方便代码插入到这个类中

事件总线

参考文章:
Android组件化架构
Android组件化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容