Android 组件化实战一: Gradle基础语法
Android 组件化实战二: 项目部署
Android组件化实战三: 模块之间的交互
Android组件化实战四: APT的介绍与使用
Android组件化实战五: APT的高级用法JavaPoet
Android组件化实战六:路由架构设计
前言
上一篇文章简单介绍了APT及其使用,生成相应的java文件,帮我们执行相关的操作,生成java文件的方式是字符串拼接的方式,但是如果要生成的java文件成员属性和方法比较多,这种方式就比较麻烦了,而且容易出现人为失误。所有就有了API调用的方式生成java文件,也就是JavaPoet。
什么是JavaPoet
项目主页及源码:https://github.com/square/javapoet
APT + JavaPoet = 超级利刃
JavaPoet是square推出的开源java代码生成框架,提供Java Api生成.java源文件,这个框架功能非常实用,也是我们习惯的Java面向对象OOP语法,可以很方便的使用它根据注解生成相应的代码,通过这种自动化生成代码的方式,可以让我们更加简洁优雅的方式要替代繁琐冗杂的重复工作(常规的通过继承注解处理器AbstractProcessor,根据注解生成java代码的时候,需要一行一行的进行字符串的拼接,如果生成java文件内容较多,实在是不优雅,可以说是不人性)。
结构体语言
Android Studio 3.4.2 + Gradle5.1.1 (向下兼容)
compileOnly ‘com.google.auto.service:auto-service:1.0-rc4’
annotationProcessor ‘com.google.auto.service:auto-service:1.0-rc4’
依赖
//帮助我们通过类调用的形式来生成java代码
implementation ‘com.squareup:javapoet:1.10.0’
JavaPoet的8个常用类
注意与APT中结构体语言表述区别
类对象 | 说明 |
---|---|
MethodSpec | 代表一个构造函数或方法说明 |
TypeSpec | 代表一个类、接口或者枚举声明 |
FieldSpec | 代表一个成员变量,一个字段声明 |
JavaFile | 包含一个顶级类的java文件 |
ParameterSpec | 用来创建参数 |
AnnotationSpec | 用来创建注解 |
ClassName | 用来包装一个类 |
TypeName | 类型,如在添加返回值类型时使用TypeName.VOID |
JavaPoet字符串格式化规则
核心原理
// AutoService则是固定的写法,加个注解即可
// 通过auto-service中的@AutoService可以自动生成AutoService注解处理器,用来注册
// 用来生成 META-INF/services/javax.annotation.processing.Processor 文件
@AutoService(Processor.class)
// 允许/支持的注解类型,让注解处理器处理(新增annotation module)
@SupportedAnnotationTypes({
"com.example.annotation.ARouter"})
// 指定JDK编译版本
@SupportedSourceVersion(SourceVersion.RELEASE_7)
// 注解处理器接收的参数
@SupportedOptions