Android组件化javaPoet的使用
Posted 我想月薪过万
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android组件化javaPoet的使用相关的知识,希望对你有一定的参考价值。
基础知识回顾
【android组件化】一文教你玩转APT_我想月薪过万的博客-CSDN博客https://blog.csdn.net/qq_41885673/article/details/122818568?spm=1001.2014.3001.5501
javaPoet使用教程
ARouter注解被使用多次
package com.wust.newmodueljavapoet;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.wust.arouter_annotations.ARouter;
/**
* ClassName: MainActivity <br/>
* Description: <br/>
* date: 2022/2/10 16:14<br/>
*
* @author yiqi<br />
* @QQ 1820762465
* @微信 yiqiideallife
* @技术交流QQ群 928023749
*/
@ARouter(path = "MainActivity")
public class MainActivity extends Activity
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@ARouter(path = "MainActivity2")
class MainActivity2 extends Activity
@ARouter(path = "MainActivity3")
class MainActivity3 extends Activity
在注解处理器中获取这三个调用的地方
//在编译的时候干活
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)
messager.printMessage(Diagnostic.Kind.NOTE, "process is run");
//循环
//获取被ARouter注解的“类节点信息”
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(ARouter.class);
for (Element element : elements) //for 3次 1 MainActivity 2 MainActivity2 3 MainActivity3
return false;
使用javaPoet生成模板代码
- 核心思想
- 要生成的模板代码
package com.example.helloworld;
public final class HelloWorld
public static void main(String[] args)
System.out.println("Hello, JavaPoet!");
- javaPoet的使用
//在编译的时候干活
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)
messager.printMessage(Diagnostic.Kind.NOTE, "process is run");
//循环
//获取被ARouter注解的“类节点信息”
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(ARouter.class);
for (Element element : elements) //for 3次 1 MainActivity 2 MainActivity2 3 MainActivity3
/**
*
* package com.example.helloworld;
*
* public final class HelloWorld
* public static void main(String[] args)
* System.out.println("Hello, JavaPoet!");
*
*
*/
//1、方法
MethodSpec mainMethod = MethodSpec.methodBuilder("main")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(void.class)
.addParameter(System[].class, "args")
//增加main方法里面的内容
.addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
.build();
//2、类
TypeSpec testClass = TypeSpec.classBuilder("testClass")
.addMethod(mainMethod)
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.build();
//3、包
JavaFile packagef = JavaFile.builder("com.wustyq.test", testClass).build();
//4、生成文件
try
packagef.writeTo(filer);
catch (IOException e)
e.printStackTrace();
messager.printMessage(Diagnostic.Kind.NOTE, "生成Test文件时失败,异常:" + e.getMessage());
编译结果展示
有人可能会出现如下把报错:这是因为我们使用了上次ARouter注解,所以重复生成了testClass类导致的
以上是关于Android组件化javaPoet的使用的主要内容,如果未能解决你的问题,请参考以下文章