APT in Android
来源:互联网 发布:tomcat 域名绑定 端口 编辑:程序博客网 时间:2024/05/29 17:40
【参考链接】
注解入门:反射+APThttp://www.jianshu.com/p/dce26aa75060
实现一个简单的Java编译时注解处理器https://yq.aliyun.com/articles/59493
前面讲了在Java中使用APT,那么在Android中如何操作呢?
以Android Studio为例,先新建一个工程
1. 编写注解
在工程中新建一个Java Library类型的module,名为anno_lib,在其中创建一个注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public@interfaceHelloAnno{
String value()default"var";
}
2. 编写注解处理器
再新建一个Java Library类型的module,名为anno_processor_lib
2.1.
由于要解析注解,所以需要在module的build.gradle中添加对anno_lib的依赖
dependencies {
compile fileTree(dir:'libs',include: ['*.jar'])
compile project(':anno_lib');
}
2.2.
然后编写注解处理器类HelloProcessor,示例的处理逻辑是获取所有使用了HelloAnno注解的类,创建一个Generated+原类名的新类,并在其中创建一个public String sayHello()方法
@SupportedAnnotationTypes("com.shadowfaxghh.anno.HelloAnno")//指定处理的注解
@SupportedSourceVersion(SourceVersion.RELEASE_7)
public classHelloProcessorextendsAbstractProcessor {
@Override
public booleanprocess(Set<?extendsTypeElement>annotations,RoundEnvironment roundEnv) {
//获取所有使用了HelloAnno注解的类
for(Element element : roundEnv.getElementsAnnotatedWith(HelloAnno.class)) {
String name = element.getSimpleName().toString();
HelloAnnoannotation = element.getAnnotation(HelloAnno.class);
StringBuilder builder =newStringBuilder()
.append("package com.shadowfaxghh.generated;\n\n")
.append("public class Generated"+name+"{\n\n")// open class
.append("\tpublic String sayHello() {\n")// open method
.append("\t\treturn ")
.append("\""+annotation.value()+"\";")
.append("\n")
.append("\t}\n")// close method
.append("}\n");// close class
try{
JavaFileObject source = processingEnv.getFiler().createSourceFile("com.shadowfaxghh.generated.Generated"+name);
Writer writer = source.openWriter();
writer.write(builder.toString());
writer.flush();
writer.close();
}catch(IOException e) {
}
}
return true;
}
}
2.3.
然后还需要在这个module的src\main目录下创建一个resources\META-INF\services目录,并在其中创建一javax.annotation.processing.Processor文件,在其中添加一行内容为刚创建的注解处理器类
3. 使用注解
在主module app中
3.1.
由于要使用注解,所以要添加对anno_lib的依赖,在app module的build.gradle中
compile project (':anno_lib')
3.2.
还需要指定注解处理器,这需要借助于gradle android-apt插件
在工程的根build.gradle中
l 指定插件的classpath
classpath'com.neenbedankt.gradle.plugins:android-apt:1.8'
在app module的build的gradle中
l 应用插件
applyplugin:'com.neenbedankt.android-apt'
l 指定注解处理器,在dependencies中
apt project(':anno_processor_lib')
3.3.
然后就可以在app中编写一个测试类使用HelloAnno注解
@HelloAnno
public classTest {
}
执行Build->Make Project,完成以后,在app module的build\generated\source\apt\debug\目录下会生成源代码com\shadowfaxghh\generated\GeneratedTest.java
然后我们就可以在自己的代码中调用生成的类了
- APT in Android
- Android-apt
- Android-apt
- android apt
- add-apt-repository in debian
- Warning:Using incompatible plugins for the annotation processing: android-apt. This may result in an
- android studio apt-complier
- apt测试android性能
- android-apt plugin
- Android studio添加apt
- com.neenbedankt.android-apt
- <android-apt学习笔记>
- Android之APT
- Android Apt与annotationProcessor
- Android Apt实战
- Android APT 技术浅谈
- install apt-fast in ubuntu11.04
- Using apt in an RPM world
- PID调节之积分(I)调节
- MIPI协议概述:DCS、DSI、CSI、D-PHY的简要介绍
- ActiveMQ简单使用介绍(一):未整合Spring情况下的介绍使用
- ubuntu14.04 安装caffe
- sbc(一)SpringBoot+SpringCloud初探
- APT in Android
- 深度学习三:tensorflow,训练一个神经元
- 几个UI小技巧,提高效率
- 深入理解操作系统原理之进程管理(一)
- zImage构成图解
- MySQL数据库优化的八种方式
- Window & Linux 进程间通信方式(IPC)
- 改变EditText光标的颜色
- php输出mysqli查询出来的结果