Arouter 原理:学习和使用(初级)

验证编译时会执行的方法,以及安卓项目传递数据给java工程
app.build.gradle
在这里插入图片描述
在这里插入图片描述
compiler.builder.gradle
在这里插入图片描述
annotations.builder.gradle
在这里插入图片描述
MainActivity
在这里插入图片描述
ARouter
在这里插入图片描述
ArouterProcessor注解处理器如下:

package com.e.compiler;

import com.google.auto.service.AutoService;

import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.Filer;
import javax.annotation.processing.Messager;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedOptions;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.Diagnostic;

@AutoService(Processor.class) // 启用服务
@SupportedAnnotationTypes({“com.e.arouter_annotations.ARouter”}) // 把注解告诉注解处理器ArouterProcessor
@SupportedSourceVersion(SourceVersion.RELEASE_7) // 环境的版本

// 接收 安卓工程传递过来的参数
@SupportedOptions(“student”) // 通过字段student,来接收安卓工程传过来的数据
public class ARouterProcessor extends AbstractProcessor {

// 操作Element的工具类(类,函数,属性,其实都是Element)
private Elements elementTool; // 比如:MainActivity使用了注解,就是可以通过element操作MainActivity,以及这个类里的方法,属性

// type(类信息)的工具类,包含用于操作TypeMirror的工具方法
private Types typeTool; // 类的细节,如类的继承或实现,通过Types来维护

// 调试注解器:Message用来打印 日志相关信息
private Messager messager; // 这个是java 工程,不能用安卓的Log来输出日志

// 文件生成器, 类 资源 等,就是最终要生成的文件 是需要Filer来完成的
private Filer filer;

@Override
public synchronized void init(ProcessingEnvironment processingEnvironment) {
    super.init(processingEnvironment);

    elementTool = processingEnvironment.getElementUtils();
    messager = processingEnvironment.getMessager();
    filer = processingEnvironment.getFiler();

    // 获取从安卓工程传过来的数据
    String value = processingEnvironment.getOptions().get("student");
    // 这个代码已经下毒了
    // 打印输出一下;如果我想在注解处理器里面抛出异常 可以使用Diagnostic.Kind.ERROR
    messager.printMessage(Diagnostic.Kind.NOTE, "init value:" + value);
}

// 在编译的时候,会执行这个process方法,在这里可以写自己的逻辑
/**
 * 坑:如果没有在任何地方使用,次函数是不会工作的,如下,是在MainActivity中使用了
 * @Arouter(path = "MainActivity")
 * public class MainActivity extends AppCompatActivity {。。。}
 * */
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
    messager.printMessage(Diagnostic.Kind.NOTE, "process start");
    return false;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值